DAX タイム インテリジェンス関数を使用する
DAX には、日付フィルター コンテキストを変更するタスクを簡略化するためのタイム インテリジェンス関数がいくつか含まれています。 これらのインテリジェンス式の多くは、日付フィルターを変更する CALCULATE
関数を使用して記述することもできますが、より多くの作業が必要になります。
注意
多くの DAX タイム インテリジェンス関数では、標準的な日付の期間、具体的には年、四半期、月を扱います。 不規則な期間 (たとえば、カレンダー月の途中から始まる会計月など) を使用する場合、または週や時刻の期間 (時間、分など) を使う必要がある場合は、DAX タイム インテリジェンス関数は役に立ちません。 代わりに CALCULATE
関数を使用して、手動で作成した日付や時刻のフィルターを渡す必要があります。
日付テーブルの要件
タイム インテリジェンス DAX 関数を使用するには、モデルに少なくとも 1 つの "日付テーブル" があるというモデル要件をあらかじめ満たしている必要があります。 日付テーブルとは、次の要件を満たすテーブルのことです。
- "日付列" と呼ばれる、データ型 Date (または日付/時刻) の列が含まれている必要があります。
- 日付列には一意の値が含まれている必要があります。
- 日付列に空白を含めることはできません。
- 日付列に欠落している日付があってはなりません。
- 日付列は年間全体にわたっている必要があります。 1 年は必ずしも暦年 (1 月から 12 月) ではありません。
- 日付テーブルは、日付テーブルとして指定する必要があります。
詳細については、「Power BI Desktop で日付テーブルを作成する」をご覧ください。
時間の経過に伴う概要作成
DAX タイム インテリジェンス関数の 1 つのグループでは、時間の経過に伴う概要作成を扱います。
-
DATESYTD
- 現在のフィルター コンテキストにおける年度累計 (YTD) の日付を含む単一列テーブルが返されます。 このグループには、月度累計 (MTD) および四半期累計 (QTD) 用の DAX 関数DATESMTD
とDATESQTD
も含まれています。 これらの関数を、フィルターとしてCALCULATE
DAX 関数に渡すことができます。 -
TOTALYTD
- 現在のフィルター コンテキストにおける YTD で式を評価します。 QTD および MTD 用の同等の DAX 関数TOTALQTD
とTOTALMTD
も含まれています。 -
DATESBETWEEN
- 指定した開始日で始まり、指定した終了日まで続く日付の列を含むテーブルが返されます。 -
DATESINPERIOD
- 指定した開始日で始まり、指定した間隔の数だけ続く日付の列を含むテーブルが返されます。
注意
TOTALYTD
関数は簡単に使用できますが、1 つのフィルター式しか渡すことができません。 複数のフィルター式を適用する必要がある場合は、CALCULATE
関数を使用し、フィルター式の 1 つとして DATESYTD
関数を渡します。
次の例では、TOTALYTD 関数を使用する最初のタイム インテリジェンス計算を作成します。 構文は次のとおりです。
TOTALYTD(<expression>, <dates>, [, <filter>][, <year_end_date>])
関数には、式と、すべてのタイム インテリジェンス関数に共通するように、マークされた日付テーブルの日付列への参照が必要です。 必要に応じて、1 つのフィルター式または年度の最終日を渡すことができます (年度が 12 月 31 日に終了しないときにのみ必要)。
Adventure Works DW 2020 M07.pbix ファイルをダウンロードして開いてください。 次に、YTD 収益を計算する次のメジャー定義を Sales テーブルに追加します。 小数点以下 2 桁の通貨としてメジャーを書式設定します。
Revenue YTD =
TOTALYTD([Revenue], 'Date'[Date], "6-30")
"6-30"
というの年度の最終日の値は、6 月 30 日を表しています。
レポートの [ページ 1] で、行列の視覚エフェクトに Revenue YTD メジャーを追加します。 年度の始めからフィルター処理された月までの収益額の概要が生成されることがわかります。
時間の経過に伴う比較
DAX タイム インテリジェンス関数のもう 1 つのグループでは、期間のシフトを扱います。
-
DATEADD
- 現在のフィルター コンテキストの日付から、指定された間隔の数だけ時間を進めたか、または戻した日付の列を含むテーブルが返されます。 -
PARALLELPERIOD
- 現在のフィルター コンテキストにおいて、指定した日付列に含まれる日付と並行する期間を表す日付の列を含むテーブルが返されます。日付は、間隔の数だけ前か後にシフトされます。 -
SAMEPERIODLASTYEAR
- 現在のフィルター コンテキストにおいて、指定した日付列に含まれる日付から 1 年前にシフトされた日付列を含むテーブルが返されます。 - 特定の期間だけ前か後に移動するための多数のヘルパー DAX 関数。すべて日付のテーブルを返します。 そのようなヘルパー関数には、
NEXTDAY
、NEXTMONTH
、NEXTQUARTER
、NEXTYEAR
や、PREVIOUSDAY
、PREVIOUSMONTH
、PREVIOUSQUARTER
、PREVIOUSYEAR
などがあります。
次に、SAMEPERIODLASTYEAR
関数を使用して前年度の収益を計算するメジャーを Sales テーブルに追加します。 小数点以下 2 桁の通貨としてメジャーを書式設定します。
Revenue PY =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
RevenuePriorYear
行列の視覚エフェクトに Revenue PY メジャーを追加します。 前年度の収益額と似た結果が生成されることがわかります。
次に、メジャーに変更を加えます。この名前を Revenue YoY % に変更して、変化率を計算するように RETURN
句を更新します。 書式を小数点以下 2 桁のパーセンテージに変更してください。
Revenue YoY % =
VAR RevenuePriorYear = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN
DIVIDE(
[Revenue] - RevenuePriorYear,
RevenuePriorYear
)
Revenue YoY % メジャーによって、前年度の月間収益に対する変化率が生成されていることがわかります。 たとえば、2018 年 7 月は、前年度の月間収益に対して 106.53 % の "増加" を表しています。また 2018 年 11 月は、前年度の月間収益に対して 24.22 % の "減少" を表しています。
注意
Revenue YoY % メジャーは、DAX 変数の適切な使用方法を示しています。 このメジャーでは、数式の読みやすさが向上し、メジャーのロジックの一部を単体テストすることが可能になっています (RevenuePriorYear 変数値を返すことによって)。 また、このメジャーは最適な数式です。前年度の収益値を 2 回取得する必要がないためです。 変数に一度格納した後、RETURN
句でこの変数値を 2 回使用しています。