Posted at

DATEDIFFもどきを作る|Power Query

公式関数にないものの、Power Query内で処理するなら、経過年月が必要になることもあります。

個人的には月数が出したいので、作ってました。


コード

引数のintervalにはy,m,dの3種類を入れるか、もしくは省略してください。

インターバルを入れない場合は、年・月・日の3種類それぞれのベースでの結果を返す仕様にしてみました。

要らないかな。:expressionless:

(date1 as date,date2 as date,optional interval as text)=>

//check the argument―"interval"
if List.Contains({"y","m","d",null},interval) then

let
Difference =[Year =Date.Year(date2)-Date.Year(date1),
Month =Date.Month(date2)-Date.Month(date1),
day =Date.Day(date2)-Date.Day(date1)],

MonthAdjustment= if Difference[day]<0 then -1 else 0,

Answers =[
d = Duration.Days(date2-date1),
m = Difference[Year]*12+Difference[Month]+MonthAdjustment,
y = Difference[Year]
+(if (Difference[Month]+MonthAdjustment) <0 then -1 else 0)
],

Answer = if interval =null then Answers
else Record.Field(Answers,interval)
in
Answer

else "intervalはy,m,dのいずれかを指定するか、省略してください。"


メモ


  • 「日」単位以下は、Duration関数群があるので、そちらを使いましょう。

  • githubなどにもいくつか作例が出ていたはずです。

  • DAXの方にはDATEDIFF関数があります。

  • プルダウンで引数を選択させられれば最高ですが、そもそもできるかどうか分からなかったので、ifでエラー回避しました。