日付を使ってメジャーが計算結果が出ますが、選択されている日付とは違う日付をベースに計算したい時に使える便利な関数DATEADD。
今回はこのDATEADD関数の基本をまとめたいと思います。実際に使用例も画像付きで含めます。
今回の使用例は、選択されている年より一年前を選択した場合の結果を表示してくれるメジャーを作ります。
目次
DATEADDの基本
DATEADD関数はPower BIの得意とする要素の一つ、タイムインテリジェンスを使った関数の一つです。(タイムインテリジェンスとは、データに紐付けてある日付を認識してくれる機能。これにより簡単に、選択された日付から去年、来年、先月、来月、昨日、明日の観点から見た計算結果を返すことができるのです。)
DATEADDについてMSの関数リファレンスには以下のように書かれています。
現在のコンテキストの日付から、指定された間隔数だけ時間を前後にシフトした日付の列を含むテーブルを返します。
MS関数リファレンス
すでに分かり易くまとまっていますね。このように日付をシフトしてくれるのです。これを他の関数を使うことによってユーザーが選択した日付から指定された間隔数シフトした日付を使って計算することができるのです。
そして定義されている構文は以下の通りです。
DATEADD(<dates>,<number_of_intervals>,<interval>)
DATEADD(<日付>,<シフトする数>,<シフトする日付要素(年、月、日、四半期)>)
<日付>
テーブルビジュアルを使う場合、<日付>にはテーブルで使われている日付列とおなじ日付を使います。もしも複数のデータソースを使ったメジャーを一つの日付テーブルでまとめている場合は、その日付テーブルからの日付列を使います。(お勧めは各リポートに自作のカレンダーテーブルを一つ作り、それにデータソースの日付列と関連付けること。)
<シフトする数>
もし一月、一年、一日未来にシフトしたい場合は「1」を。過去に戻りたい場合は−1を入力します。
3ヶ月後の値は「3」、2年後は「2」。4日前は「−4」、3ヶ月前は「−3」です。このように、数字の部分だけ入れます。
<シフトする日付要素>
ここにはシフトしたい要素を入れます。もしも3ヶ月前、2ヶ月後の場合は「月(MONTH)」。もし1年後の場合は「年(YEAR)」を入力する。
DATEADDを使ってみる
ここからは実際にDATEADD関数を使って見たいと思います。
まずはシナリオ

今回も内容としては、月々のテストの結果をまとめた表を使いたいと思います。2019年から2020年の終わりまで、それぞれの月ごとにデータがあります。
選択した年の平均点数を計算してくれるメジャー
まずは確認用に選択した年の点数の平均を計算してくれるメジャーを作ります。

完成したメジャーはこの通り(もちろんこの方法限りがやり方ではありません。)結果は75.25と、左のテーブルにある2019年の点数マッチしているので、合っているいることが確認できます。使ったDAXは以下。
Average =
CALCULATE(AVERAGE('Test scores - Sample File'[点数]))
DATEADDを使って選択した年の一年前の計算をするメジャー

完成形はこのよう。現在2020年が選択されていて上部には2020年の平均88.33が表示されています。そして下部には選択されている2020年の一年前の平均75.25が表示されているのです。使ったDAXは以下の通りです。
Average for previous year =
CALCULATE(
[Average],
DATEADD('Calendar'[Date],-1,YEAR)
)

CALCULATE関数の第一引数に先ほど作った普通に選択された日付を元に平均を計算してくれるメジャーを入れます。([Average]の部分)。
そしてCALCULATE関数の第二引数にDATEADD関数を入れます。これにより、指定された数だけ年(今回の場合)シフトするのです。
今回使っている「 DATEADD(‘Calendar'[Date],-1,YEAR)」は、「カレンダーテーブル内のDate列を1年過去に戻す」と言う指定です。
ちなみにデータのない2021年を選択すると、選択した年の平均を計算する上のカードは(Blank)になります。これはデータがないからです。しかし、選択された年の一年前の計算をするDATEADDを使った関数はしっかりと一年前の2020年の平均を表示してくれます。

先ほどから年単位の計算をしていきましたが、もちろん月単位のシフトもできます。
Average for previous year =
CALCULATE(
[Average],
DATEADD('Calendar'[Date],-1,YEAR)
)
「YEAR」と書かれているDATEADD関数の第3引数を「MONTH」に置き換えるだけです。
DATEADD関数はテーブルでも使える。

前のセクションではメジャーをカードに設置しましたが、ターブルに設置すれば行ごとに計算をしてくれます。
上の画像のように、三列目がDATEADD関数を使ったメジャーです。よく見てみると、2019年の月の行には何もありません。そして2020年から、2019年1月以降の点数が表示されます。
まとめ
まとめますと、定義されている構文は
DATEADD(<dates>,<number_of_intervals>,<interval>)
そしてメージャーでもテーブルなのでも使える。そして他の関数に含まれて使われることが多いタイムインテリジェンス関数です。
以上、「【Power BI DAX】DATEADD関数の基本 メジャーでの使用例など【図解】」でした。