DAX サンプルモデル
「DAX サンプル」と検索すると、「DAX サンプル モデル」というページが見つかります。
そのページから「GitHub」にある「AdventureWorks Sales.xlsx」に辿り着けます。

このデータを使い、「DAX」(Data Analysis Expressions)に用意されている「タイムインテリジェンス関数」の練習を初めました。

CLOSINGBALANCEMONTH
日付情報を含むテーブルから、月末の値のみを取り出せます。
- CLOSINGBALANCEMONTH(<expression>,<dates>[,<filter>])
- 月の末日に評価される式を表すスカラー値

Power BI Desktop使用例(月末値抽出)
f_CLOSINGBALANCEMONTH =
CLOSINGBALANCEMONTH(SUM(Sales[Sales Amount]), ('Date'[Date]))

この式(メジャー)の場合、月末の売上値を返します。
このため、表示される日付も月末の値となります。

CLOSINGBALANCEQUARTER
「CLOSINGBALANCEMONTH」の四半期です。
日付情報を含むテーブルから、四半期末の値のみを取り出せます。
- CLOSINGBALANCEQUARTER(<expression>,<dates>[,<filter>])
- 四半期の最後の日付で評価された式を表すスカラー値

Power BI Desktop使用例(四半期末日の値抽出)
f_CLOSINGBALANCEQUARTER =
CLOSINGBALANCEQUARTER(SUM(Sales[Sales Amount]), 'Date'[Date])

今回のメジャーは四半期末日の値を返します。
このため、表示される日付も四半期末日の値となります。

CLOSINGBALANCEYEAR
この関数のシリーズの最後は年度版です。
- CLOSINGBALANCEYEAR(<expression>,<dates>[,<filter>][,<year_end_date>])
- 年度末日に評価される式を表すスカラー値

Power BI Desktop使用例(年度末の値抽出)
f_CLOSINGBALANCEYEAR =
CLOSINGBALANCEYEAR(SUM(Sales[Sales Amount]), 'Date'[Date])

年度末日の値を返すメジャーになっています。
表示される日付も年度末日の値となります。

DATEADD
指定された間隔数だけ時間をシフトしたます。
x年やx月、x日単位での日付をずらすこと(足し引き)ができます。
- DATEADD(<dates>,<number_of_intervals>,<interval>)
- 日付値の単一列を含むテーブル

Power BI Desktop使用例(1年前に移動)
f_DATEADD_列 =
DATEADD('Date'[Date], -1, YEAR)

このメジャー式では「-1, YEAR」で、1年前の日付に移動します。
元の日付列と並べると、1年前の日付の値を返していることがわかります。

DATESBETWEEN
指定した開始日から終了日までのテーブルを返します。
ある期間の合計値や平均値を算出する際に使えます。
- DATESBETWEEN(<dates>, <start_date>, <end_date>)
- 日付値のテーブル

Power BI Desktop使用例1(指定期間)
例えば日付テーブルを作成する場合、「データビュー」 → 「新しいテーブル」から作れます。

f_DATESBETWEEN =
DATESBETWEEN('Date'[Date], MIN('Date'[Date]), MAX('Date'[Date]))
元の日付テーブルの最小値と最大値の範囲の日付テーブルを作成しています。
(最小値と最大値なので、元の日付テーブルのDate列と同じ内容)

Power BI Desktop使用例2(指定期間の平均値)
メジャーを使った計算式の例です。
指定した期間の売上(Sales Amount)の平均値を算出しています。
f2_DATEBITWEEN = CALCULATE(
AVERAGE(Sales[Sales Amount]),
DATESBETWEEN('Date'[Date], MIN('Date'[Date]), MAX('Date'[Date])
))

「スコアカード」で平均値を表示しています。
右側は、「Sales Amount」の集計方法を「平均」にした結果です。
「DATESBETWEEN」を使った値と同じになることを確認しました。

DATESINPERIOD
「DATESBETWEEN」同様、期間を指定する関数です。
「DATESINPERIOD」の場合、開始日から「x日、x月、x年」と間隔を自由に設定できます。
- DATESINPERIOD(<dates>, <start_date>, <number_of_intervals>, <interval>)
- 日付値のテーブル

Power BI Desktop使用例1(1年前までの期間)
上記の「DATESBETWEEN」同様にテーブルを作成してみます。
ft_DATESINPERIOD =
DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -1, YEAR)
もとデータの日付の最大値が「2021/6/30」なので、「1年前 = MAX(‘Date'[Date]), -1, YEAR」の「2021/7/1」から始まるテーブルが作成されます。

Power BI Desktop使用例2(1年間の累計)
売上(Sales Amount)の累計式(メジャー)の例です。
f_DATESINPERIOD =
CALCULATE(
SUM(Sales[Sales Amount]),
DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -1, YEAR
))

「2020年」に限定しているので、「2020/1/1」より前の期間は対象外になります。
このため、「2020/1/1」は「2020/1/1」のみの集計、「2020/1/2」は「2020/1/1から1/2の合計値」と集計しています。
カードで表示されている数字は指定期間中の売上(Sales Amount)の合計値。確認用です。

Power BI Desktop使用例3(DATESBETWEENとの比較)
「DATESBETWEEN」を使っても同様の計算ができます。
「BLANK()」は空白を返す関数です。
ゼロを返す関数でもあるらしく、「ゼロからMAXの範囲」を集計してくれています。
先ほどの「DATESINPERIOD」を使ったメジャーと同じ結果になります。
f3_DATEBITWEEN =
CALCULATE(
SUM(Sales[Sales Amount]),
DATESBETWEEN('Date'[Date], BLANK(), MAX('Date'[Date])
))

Power BI Desktop使用例4(7日間隔の合計)
「7, DAY」と7日間隔で集計するメジャーです。
f2_DATESINPERIOD =
CALCULATE(
SUM(Sales[Sales Amount]),
DATESINPERIOD('Date'[Date], MIN('Date'[Date]), 7, DAY
))
右の表では、7日間隔で合計値を算出しています。
2017/7/1が最初の日付なので、「2017/7/1」は「2017/7/1」のみの集計、「2017/7/2」は「2017/7/1から1/2の合計値」、そして「2017/7/7」が7/1から7日間の合計。
これで1サイクル終了です。
「2017/7/8」は、7/2から7/8までの7日間ぼ集計となります。
右の表では7/1からの7日間の合計値が左の表と同じ値になることを確認しています。
