DAX で過去データを取得する: 前年・前月・前週・前日の出し方ガイド
はじめに
Power BI や Excel の Power Pivot で時間の推移を分析するには、DAX の「時間知能関数(Time Intelligence Functions)」の理解が欠かせません。特に、前年・前月・前週・前日の数値を取得して比較分析を行うことは、売上分析や業績評価で非常によく使われるパターンです。
本記事では、DAX を使って 前年 (YoY)、前月 (MoM)、前週 (WoW)、前日 (DoD) の値を求める方法を、実践的なコード例とともに解説します。
前提: 日付テーブルの準備
これらの計算を行うには、連続した日付を持つカレンダーテーブルが必要です。まず、以下のように Date テーブルを用意しましょう。
Date = CALENDARAUTO()
また、分析対象のファクトテーブル(例: Sales)と日付テーブルを Sales[Date] → Date[Date] のようにリレーションで結んでおく必要があります。
前年の値を取得する
前年同月の売上など、前年の同一日・同一週・同一月のデータを取得するには SAMEPERIODLASTYEAR 関数を使います。
Sales Last Year = CALCULATE(
SUM(Sales[Amount]),
SAMEPERIODLASTYEAR(Date[Date])
)
この関数は、現在のコンテキストの日付と同じ期間の1年前を自動で参照してくれます。
前月の値を取得する
前月の同じ日・月の売上を取得するには PARALLELPERIOD または PREVIOUSMONTH を使います。
Sales Last Month = CALCULATE(
SUM(Sales[Amount]),
PREVIOUSMONTH(Date[Date])
)
または、より柔軟に使いたい場合は:
Sales Last Month (Flexible) = CALCULATE(
SUM(Sales[Amount]),
PARALLELPERIOD(Date[Date], -1, MONTH)
)
違い:
-
PREVIOUSMONTH: 直前の「月」全体 -
PARALLELPERIOD: N か月前の同期間
前週の値を取得する
前週の売上などを出すには PARALLELPERIOD で WEEK 単位を指定します。
Sales Last Week = CALCULATE(
SUM(Sales[Amount]),
PARALLELPERIOD(Date[Date], -1, WEEK)
)
Power BI では週次分析のために、WEEKNUM を使ったカスタム列や、ISOWEEKNUM を含む日付テーブルの用意が推奨されます。
前日の値を取得する
前日のデータ取得には PREVIOUSDAY 関数を使います。
Sales Yesterday = CALCULATE(
SUM(Sales[Amount]),
PREVIOUSDAY(Date[Date])
)
DATEADD 関数の活用
もう少し汎用的に「1日前」「1か月前」「1年前」などを扱いたい場合、DATEADD を使うことも可能です。
例:1年前
Sales LY = CALCULATE(
SUM(Sales[Amount]),
DATEADD(Date[Date], -1, YEAR)
)
注意点:
-
DATEADDはDAY、MONTH、QUARTER、YEARのみをサポートしており、WEEKは使えません。 -
PARALLELPERIODと似ていますが、DATEADDの方がより汎用的 - 連続した日付が必要(欠損があるとエラーになる可能性あり)
-
SAMEPERIODLASTYEAR前年、前月、前日とこれ1つで対応可能なためらく
比較計算 (差分や比率)
取得した前年・前月などの値は、現状の値と比較することで以下のような指標を作成できます。
差分の例:前年との差
YoY Difference = [Total Sales] - [Sales Last Year]
増減率の例:前年比
YoY Growth Rate = DIVIDE([YoY Difference], [Sales Last Year], 0)
まとめ
DAX の時間知能関数を活用することで、過去のデータとの比較を簡単かつ安全に行うことができます。特に以下の関数は重要です:
-
SAMEPERIODLASTYEAR:前年 -
PREVIOUSMONTH,PARALLELPERIOD:前月 -
PARALLELPERIOD(..., WEEK):前週 -
PREVIOUSDAY:前日 -
DATEADD:柔軟に任意期間をずらしたい場合に便利(ただし週は非対応)
こうした関数を使いこなすことで、視覚的なダッシュボードやレポートの分析力を大きく向上させることができます。
おわりに
時間軸での比較は、ビジネスにおける成長や異常の発見に不可欠です。DAX の時間知能関数を正しく使いこなして、より深いインサイトを得ましょう。
🤔「めんどくさい」「柔軟に使いたい」場合は?
- 比較する期間が毎回異なる(例:13ヶ月前、4週間前など)
- ユーザーによって「比較対象の期間」を動的に切り替えたい
そんなときは DATEADD を使ったメジャーを汎用的に作っておくと便利です。
Sales N Periods Ago = CALCULATE(
SUM(Sales[Amount]),
DATEADD(Date[Date], -[Offset], MONTH)
)
このように、変数や切り替え可能なオフセットを使えば、柔軟で再利用性の高い分析が可能になります。
今後の記事では、会計年度ベースの比較や移動平均、YTD(年初来)集計など、さらに高度なテクニックも紹介していく予定です。
Happy Analyzing!