「タイムインテリジェンス関数」の練習2回目です。
1回目はこちらです。
DATESMTD
現在までの月の日付の列を含むテーブルを返します
ただし、日付列が「現在」より前の日付までしか収録してない場合は、「現在に最も近い」値を返します。
Power BI Desktop使用例(最新月テーブル)
「データビュー」 → 「新しいテーブル」で「DATESMTD」を使ったテーブルを作成してみます。
Sales_DATEMTD = DATESMTD('Sales'[t_Date])
Salesテーブルで定義しているDateテーブルが2020年6月までなので、範囲内の最新の月のみのテーブルを作成します。
※上記の「t_Date」列は、Salesテーブル上で「データビュー」→「新しい列」で「t_Date=RELATED(‘Date'[Date])」と記述し、作成しています。Salesテーブルに日付型の列がなかったので追加した、ということです。
Power BI Desktop使用例(累計)
以下のメジャーをSalesテーブル内に加えます。
「DATESMTD」の対象期間内(6月)の「累計」を計算しています。
DATESMTD_Sales =
CALCULATE(SUM(Sales[Sales Amount]), DATESMTD('Sales'[t_Date]))
通常のDateテーブルと売上(Sales Amount)の表と並べると、「DATESMTD」の効果がわかりやすいと思いました。
例えば、左の表が、年を「2020」、月を「June」に設定した値です。
右が、上記で作成した「DATESMTD_Sales」の値(ビジュアルに「カード」を選択)です。
「DATESMTD(‘Sales'[t_Date]))」という記述で、「現在までの(最新の)月の日付の列を含むテーブル」の期間を集計期間とします。
このため、2020年6月の合計値(累計値)となります。
左の表の合計値と同じになるので、集計が正しいことが確認できます。
DATESQTD
現在までの四半期の日付の列を含むテーブルを返します。
Power BI Desktop使用例(最新四半期テーブル)
上記の「DATESMTD」同様に、「データビュー」 → 「新しいテーブル」で「DATESQ
TD」を使ったテーブルを作成してみます。
Sales_DATEQTD = DATEQMTD('Sales'[t_Date])
Salesテーブルで定義しているDateテーブルが2020年6月までなので、範囲内の最新の四半期のみのテーブルを作成します。
このため、2020年4月1日から始まります。
Power BI Desktop使用例(累計)
以下のメジャーで、上記期間の累計を集計できます。
DATESQTD_Sales =
CALCULATE(SUM(Sales[Sales Amount]), DATESQTD('Sales'[t_Date]))
左の表が、年を「2020」、四半期を「Qtr2」に設定した値です。
右が上記の「DATESQTD_Sales」の値を「カード」で表示しています。
表の合計値と同じ値になります。
DATESYTD
現在までの年の日付の列を含むテーブルを返します。
Power BI Desktop使用例(最新年度テーブル)
上記の「DATESYTD」や「DATESQTD」同様に、「データビュー」 → 「新しいテーブル」で「DATESYTD」を使ったテーブルを作成してみます。
Sales_DATEYTD = DATEQYTD('Sales'[t_Date])
Salesテーブルで定義しているDateテーブルが2020年6月までなので、範囲内の最新年のみのテーブルを作成します。
このため、2020年月1日から始まります。
Power BI Desktop使用例(累積)
以下のメジャーで、上記期間の累計を集計できます。
DATESYTD_Sales =
CALCULATE(SUM(Sales[Sales Amount]), DATESYTD('Sales'[t_Date]))
左の表が、年を「2020」に設定した値です。
右が上記の「DATESYTD_Sales」の値を「カード」で表示しています。
表の合計値と同じ値になります。
ENDOFMONTH
月の最後の日付を返します。
Power BI Desktop使用例(列の最新月の月末日)
「データビュー」 → 「新しいテーブル」で「ENDOFMONTH」を使ったテーブルを作成してみます。
Sales_ENDOFMONTH = ENDOFMONTH('Sales'[t_Date])
「t_Date」の最後の値が「2023年6月15日」なので、その日付のみのテーブルが作成されます。
※この後「ENDOFQUARTER」(四半期末)、「ENDOFYEAR」(年度末)についても触れますが、「t_Date」の最後の値が「2023年6月15日」なので、同じ値を返します。
「ENDOFMONTH」、「ENDOFQUARTER」、「ENDOFYEAR」の違いを確認するために、最後にそれぞれを表で並べています。
ENDOFQUARTER
四半期の最後の日付を返します。
Power BI Desktop使用例(列の最新の四半期末日)
「データビュー」 → 「新しいテーブル」で「ENDOFQUARTER」を使ったテーブルを作成してみます。
Sales_ENDOFQUARTER = ENDOFQUARTER('Sales'[t_Date])
「ENDOFMONTH」と同じく「t_Date」の最後の値が「2023年6月15日」なので、その日付のみのテーブルが作成されます。
ENDOFYEAR
年の最後の日付を返します。
Power BI Desktop使用例(列の最新の年度末日)
「ENDOFMONTH」、「ENDOFQUARTER」と同様です
「データビュー」 → 「新しいテーブル」で「ENDOFYEAR」を使ったテーブルを作成すると、これれまでと同じく「2023年6月15日」が返されます。
Sales_ENDOFMONTH = ENDOFMONTH('Sales'[t_Date])
「ENDOFYEAR」の場合、「ENDOFYEAR(<dates> [,<year_end_date>])」という構文で年度末の日付を定義できるそうですが、
Sales_ENDOFYEAR2 = ENDOFYEAR('Sales'[t_Date], "01/31/2020")
と記述してもうまくいきませんでした。
記述方法を変えるなど何度かトライ&エラーしましたが、まだ確認中です。
ENDOFMONTH /QUARTER /YEARの比較
「ENDOFMONTH」「ENDOFQUARTER」「ENDOFYEAR」はともに「2023年6月15日」を返すため、少々わかりにくい例となりました。
それぞれの違いを確認しやすいように、同じ表にまとめてみます。
Power BI Desktop使用例(各末日の売上)
「ENDOFMONTH」「ENDOFQUARTER」「ENDOFYEAR」を使ったメジャーを用意します。
それぞれが返す期間の売上の集計を計算する式です。
上述の通り返す値は「末日」なので、(期間でなく)その日の売り上げになります。
ENDOFMONTH_Sales =
CALCULATE(SUM(Sales[Sales Amount]), ENDOFMONTH('Sales'[t_Date]))
ENDOFQUARTER_Sales =
CALCULATE(SUM(Sales[Sales Amount]), ENDOFQUARTER('Sales'[t_Date]))
ENDOFYEAR_Sales =
CALCULATE(SUM(Sales[Sales Amount]), ENDOFYEAR('Sales'[t_Date]))
上記メジャーの「ENDOFMONTH_Sales」「Sales_ENDOFQUARTER_Sales」「Sales_ENDOFYEAR_Sales」それぞれの列を並べます。
「Sales Amountの合計」の列の値は1ヶ月間の合計値です。
「Sales_ENDOFMONTH」は(日にち列がないのでわかりにくいかもしれませんが)その月末日の売上(月の合計値ではありません)を表示しています。
同様に「ENDOFQUARTER」は四半期の最後の日にちの値、「ENDOFYEAR」は年の最後の日の値、となります。