📅 STEP 37: DAXの時系列インテリジェンス
前年比、累計、移動平均…時系列分析の強力な武器!
📋 このステップで学ぶこと
- 時系列インテリジェンスとは何か
- 日付テーブルの重要性と設定方法
- 年初来累計(YTD)の計算方法
- 前年同期比較(SAMEPERIODLASTYEAR)
- 日付操作関数(DATEADD、DATESINPERIOD)
- 移動平均と実践的な時系列分析
ゴール:前年比、YTD、移動平均など、ビジネスで必須の時系列メジャーを作成できるようになる
📅 1. 時系列インテリジェンスとは
時系列インテリジェンスの概要
DAXには、時間に関する分析を簡単に行える特別な関数群があります。これを「時系列インテリジェンス(Time Intelligence)」と呼びます。前年比、累計、移動平均など、ビジネスで頻繁に使う時系列分析が、わずか数行のコードで実現できます。
| 機能 | 具体例 | ビジネスでの活用 |
|---|---|---|
| 累計(Running Total) | YTD(年初来)、QTD(四半期)、MTD(月) | 年間目標に対する進捗確認 |
| 期間比較 | 前年同期、前月同期、前週同期 | 売上の前年比較、成長率分析 |
| 成長率 | 前年比成長率、前月比成長率 | 業績のトレンド把握 |
| 移動平均 | 過去3ヶ月平均、過去12ヶ月平均 | 季節変動の除去、長期トレンド |
| 期間集計 | 過去30日、過去1年間 | リアルタイムダッシュボード |
時系列インテリジェンス関数を使うには、適切な日付テーブルが必要です。日付テーブルを作成し、「日付テーブルとしてマーク」しないと、これらの関数は正しく動作しません。これは最も重要なポイントなので、必ず設定してください。
日付テーブルの作成と設定
時系列インテリジェンスを使うための前提条件として、まず日付テーブルを作成し、正しく設定する必要があります。
日付テーブル =
ADDCOLUMNS(
CALENDAR(DATE(2020, 1, 1), DATE(2030, 12, 31)),
"年", YEAR([Date]),
"月", MONTH([Date]),
"月名", FORMAT([Date], "MMMM"),
"四半期", "Q" & QUARTER([Date]),
"年月", FORMAT([Date], "YYYY-MM")
)
※モバイルでは横スクロールできます
| 手順 | 操作 | 補足 |
|---|---|---|
| 1 | ホームタブ→「新しいテーブル」 | DAX式入力欄が表示される |
| 2 | 上記のDAX式を入力してEnter | 日付テーブルが作成される |
| 3 | テーブルを右クリック→「日付テーブルとしてマーク」 | これが最も重要!忘れずに |
| 4 | 日付列(Date)を選択して確定 | 時系列関数が使えるようになる |
| 5 | モデルビューでファクトテーブルとリレーションシップ作成 | 売上[日付] → 日付テーブル[Date](*:1) |
📊 2. 年初来累計(YTD – Year To Date)
TOTALYTDの基本
YTD(Year To Date)は、年の初めから現在までの累計を計算する機能です。TOTALYTD関数を使うと、1行のコードで年初来累計を計算できます。
| 引数 | 説明 | 例 |
|---|---|---|
| 第1引数(必須) | 計算するメジャー(式) | SUM(売上[金額]) |
| 第2引数(必須) | 日付列 | 日付テーブル[Date] |
| 第3引数(省略可) | 年度末の日付 | “3/31″(3月決算の場合) |
YTD売上 =
TOTALYTD(
SUM(売上[金額]),
日付テーブル[Date]
)
※モバイルでは横スクロールできます
| 月 | 月次売上 | YTD売上 | 計算内容 |
|---|---|---|---|
| 1月 | 100万円 | 100万円 | 1月のみ |
| 2月 | 120万円 | 220万円 | 1月+2月 |
| 3月 | 110万円 | 330万円 | 1月+2月+3月 |
| 4月 | 130万円 | 460万円 | 1月〜4月 |
| … | … | … | … |
| 12月 | 150万円 | 1,400万円 | 年間合計 |
会計年度のYTD
日本企業の多くは3月決算です。会計年度でYTDを計算するには、第3引数で年度末を指定します。
会計年度YTD売上 =
TOTALYTD(
SUM(売上[金額]),
日付テーブル[Date],
"3/31"
)
※モバイルでは横スクロールできます
| 決算月 | 指定する値 | 会計年度の範囲(例:2024年度) |
|---|---|---|
| 3月決算 | “3/31” | 2024/4/1 〜 2025/3/31 |
| 9月決算 | “9/30” | 2024/10/1 〜 2025/9/30 |
| 12月決算 | 指定不要(デフォルト) | 2024/1/1 〜 2024/12/31 |
四半期累計(QTD)と月累計(MTD)
YTDと同様に、四半期の累計(QTD)や月の累計(MTD)も簡単に計算できます。
// 四半期累計(Quarter To Date)
四半期累計売上 =
TOTALQTD(
SUM(売上[金額]),
日付テーブル[Date]
)
// 月累計(Month To Date)
月累計売上 =
TOTALMTD(
SUM(売上[金額]),
日付テーブル[Date]
)
※モバイルでは横スクロールできます
| 関数 | 用途 | ビジネスでの活用例 |
|---|---|---|
| YTD | 年間トレンド、年間目標との比較 | 「今年の累計売上は目標の70%達成」 |
| QTD | 四半期業績、四半期目標との比較 | 「Q2累計で前年同四半期を上回る」 |
| MTD | 月次進捗、月次目標との比較 | 「今月15日時点で月間目標の50%達成」 |
📈 3. 前年同期比較(SAMEPERIODLASTYEAR)
SAMEPERIODLASTYEARの基本
SAMEPERIODLASTYEAR関数は、ちょうど1年前の同じ期間のデータを取得します。前年比較はビジネスで最も頻繁に使われる分析の1つです。
前年売上 =
CALCULATE(
SUM(売上[金額]),
SAMEPERIODLASTYEAR(日付テーブル[Date])
)
※モバイルでは横スクロールできます
// 前年比(差分)
前年比 =
SUM(売上[金額]) - [前年売上]
// 前年比率(%)
前年比率 =
DIVIDE(
SUM(売上[金額]) - [前年売上],
[前年売上]
) * 100
※モバイルでは横スクロールできます
| 月 | 今年売上 | 前年売上 | 前年比 | 前年比率 |
|---|---|---|---|---|
| 2024/1 | 100万円 | 90万円 | +10万円 | +11.1% |
| 2024/2 | 120万円 | 100万円 | +20万円 | +20.0% |
| 2024/3 | 110万円 | 105万円 | +5万円 | +4.8% |
前年同期YTDとの比較
月次の前年比だけでなく、YTDベースでの前年比較も重要です。「今年の1月から今月までの累計」と「去年の同期間の累計」を比較できます。
// 今年のYTD
今年YTD =
TOTALYTD(
SUM(売上[金額]),
日付テーブル[Date]
)
// 前年のYTD
前年YTD =
CALCULATE(
TOTALYTD(SUM(売上[金額]), 日付テーブル[Date]),
SAMEPERIODLASTYEAR(日付テーブル[Date])
)
// YTD前年比率(%)
YTD前年比率 =
DIVIDE(
[今年YTD] - [前年YTD],
[前年YTD]
) * 100
※モバイルでは横スクロールできます
| 項目 | 値 | 意味 |
|---|---|---|
| 現在 | 2024年5月末 | 分析時点 |
| 今年YTD(1-5月) | 5,500,000円 | 2024年1月〜5月の累計 |
| 前年YTD(1-5月) | 5,000,000円 | 2023年1月〜5月の累計 |
| YTD前年比 | +500,000円 | 同期間で50万円増加 |
| YTD前年比率 | +10% | 前年同期比10%成長 |
🔄 4. 日付操作関数(DATEADD)
DATEADDの基本
DATEADD関数は、指定した期間だけ日付をシフトする関数です。前月、前週、前四半期など、様々な期間との比較が可能です。
| 引数 | 説明 | 例 |
|---|---|---|
| 第1引数 | 日付列 | 日付テーブル[Date] |
| 第2引数 | シフト数(マイナスで過去) | -1(1期間前) |
| 第3引数 | 単位 | YEAR、QUARTER、MONTH、DAY |
// 前月の売上
前月売上 =
CALCULATE(
SUM(売上[金額]),
DATEADD(日付テーブル[Date], -1, MONTH)
)
// 前週の売上(7日前)
前週売上 =
CALCULATE(
SUM(売上[金額]),
DATEADD(日付テーブル[Date], -7, DAY)
)
// 2年前の売上
2年前売上 =
CALCULATE(
SUM(売上[金額]),
DATEADD(日付テーブル[Date], -2, YEAR)
)
※モバイルでは横スクロールできます
// 前月比(差分)
前月比 =
SUM(売上[金額]) - [前月売上]
// 前月比率(%)
前月比率 =
DIVIDE(
[前月比],
[前月売上]
) * 100
※モバイルでは横スクロールできます
| 単位 | 意味 | 使用例 |
|---|---|---|
| YEAR | 年単位 | DATEADD(日付, -1, YEAR) → 1年前 |
| QUARTER | 四半期単位 | DATEADD(日付, -1, QUARTER) → 1四半期前 |
| MONTH | 月単位 | DATEADD(日付, -3, MONTH) → 3ヶ月前 |
| DAY | 日単位 | DATEADD(日付, -30, DAY) → 30日前 |
📊 5. 移動平均と期間集計
移動平均(Rolling Average)
移動平均は、過去N期間の平均を計算する手法です。季節変動を除去し、長期トレンドを把握するのに有効です。DATESINPERIOD関数を使います。
// 過去3ヶ月の移動平均
過去3ヶ月平均 =
CALCULATE(
AVERAGE(売上[金額]),
DATESINPERIOD(
日付テーブル[Date],
MAX(日付テーブル[Date]),
-3,
MONTH
)
)
// 過去12ヶ月の移動平均(年間トレンド)
過去12ヶ月平均 =
CALCULATE(
AVERAGE(売上[金額]),
DATESINPERIOD(
日付テーブル[Date],
MAX(日付テーブル[Date]),
-12,
MONTH
)
)
※モバイルでは横スクロールできます
| 引数 | 説明 | 例 |
|---|---|---|
| 第1引数 | 日付列 | 日付テーブル[Date] |
| 第2引数 | 基準日 | MAX(日付テーブル[Date]) |
| 第3引数 | 期間数(マイナスで過去) | -3(過去3期間) |
| 第4引数 | 単位 | MONTH、DAY など |
| 月 | 月次売上 | 3ヶ月移動平均 | 効果 |
|---|---|---|---|
| 2024/1 | 100万円 | – | – |
| 2024/2 | 120万円 | – | – |
| 2024/3 | 110万円 | 110万円 | 平滑化開始 |
| 2024/4 | 130万円 | 120万円 | 変動を抑制 |
| 2024/5 | 115万円 | 118.3万円 | トレンド把握 |
過去N日間の集計
DATESINPERIODを使って、直近N日間の売上を集計することもできます。リアルタイムダッシュボードで活用できます。
// 過去30日間の売上
過去30日売上 =
CALCULATE(
SUM(売上[金額]),
DATESINPERIOD(
日付テーブル[Date],
MAX(日付テーブル[Date]),
-30,
DAY
)
)
// 過去7日間の売上(週次)
過去7日売上 =
CALCULATE(
SUM(売上[金額]),
DATESINPERIOD(
日付テーブル[Date],
MAX(日付テーブル[Date]),
-7,
DAY
)
)
※モバイルでは横スクロールできます
🎯 6. 実践的な時系列分析
KPIダッシュボード用メジャー
実務で使うKPIダッシュボードには、様々な時系列メジャーを組み合わせます。以下は、包括的な時系列分析のためのメジャーセットです。
// 1. ベースメジャー
売上 = SUM(売上[金額])
// 2. 年初来累計
YTD売上 = TOTALYTD([売上], 日付テーブル[Date])
// 3. 前年売上
前年売上 =
CALCULATE([売上], SAMEPERIODLASTYEAR(日付テーブル[Date]))
// 4. 前年YTD
前年YTD =
CALCULATE([YTD売上], SAMEPERIODLASTYEAR(日付テーブル[Date]))
// 5. 前年比率(%)
前年比率 =
DIVIDE([売上] - [前年売上], [前年売上]) * 100
// 6. YTD前年比率(%)
YTD前年比率 =
DIVIDE([YTD売上] - [前年YTD], [前年YTD]) * 100
// 7. 3ヶ月移動平均
MA3 =
CALCULATE(
AVERAGE(売上[金額]),
DATESINPERIOD(日付テーブル[Date], MAX(日付テーブル[Date]), -3, MONTH)
)
※モバイルでは横スクロールできます
目標進捗管理
年間目標に対する進捗を管理するメジャーも、時系列インテリジェンスを活用して作成できます。
// 年間目標(固定値またはテーブルから取得) 年間目標 = 12000000 // 月次目標(均等割) 月次目標 = DIVIDE([年間目標], 12) // YTD目標 YTD目標 = VAR 現在月 = MAX(日付テーブル[月]) RETURN [月次目標] * 現在月 // YTD達成率(%) YTD達成率 = DIVIDE([YTD売上], [YTD目標]) * 100 // 目標との乖離 目標乖離 = [YTD売上] - [YTD目標] // 残り期間での必要月次売上 月次必要売上 = VAR 残り月数 = 13 - MAX(日付テーブル[月]) VAR 残り目標 = [年間目標] - [YTD売上] RETURN DIVIDE(残り目標, 残り月数)
※モバイルでは横スクロールできます
| 指標 | 値 | 状態 |
|---|---|---|
| YTD売上 | 8,500,000円 | – |
| 年間目標 | 12,000,000円 | – |
| YTD達成率 | 70.8% | ⚠️ やや遅れ |
| 目標乖離 | -500,000円 | 要改善 |
| 必要月次売上 | 1,166,667円/月 | 現状より+17%必要 |
📝 STEP 37 のまとめ
- TOTALYTD:年初来累計の計算(会計年度対応可)
- SAMEPERIODLASTYEAR:前年同期との比較
- DATEADD:柔軟な期間シフト(年/四半期/月/日)
- DATESINPERIOD:移動平均と期間集計
- 日付テーブル:すべての時系列関数の基礎(必須設定)
- 実践活用:KPIダッシュボード、目標進捗管理
時系列インテリジェンスは日付テーブルありきです!
まず適切な日付テーブルを作成し、「日付テーブルとしてマーク」することが絶対条件。それさえできれば、TOTALYTD、SAMEPERIODLASTYEARなどの関数で、驚くほど簡単に前年比や累計が計算できます。
ビジネスダッシュボードには必須の機能なので、しっかりマスターしましょう!
📝 実践演習
以下のメジャーを作成してください:
1. 年初来の売上合計(YTD)
2. 前年同期の売上
3. 前年比(差分)
4. 前年比率(%)
前提:日付テーブルを作成済み、日付テーブルとしてマーク済み
// 1. 年初来の売上合計(YTD)
YTD売上 =
TOTALYTD(
SUM(売上[金額]),
日付テーブル[Date]
)
// 2. 前年同期の売上
前年売上 =
CALCULATE(
SUM(売上[金額]),
SAMEPERIODLASTYEAR(日付テーブル[Date])
)
// 3. 前年比(差分)
前年比 =
SUM(売上[金額]) - [前年売上]
// 4. 前年比率(%)
前年比率 =
DIVIDE(
[前年比],
[前年売上]
) * 100
使い方:
- 折れ線グラフ:X軸=年月、Y軸=YTD売上
- カード:前年比率(%)を大きく表示
- テーブル:月別に前年売上と比較
過去12ヶ月の移動平均を計算し、実際の売上と比較するメジャーを作成してください。売上が移動平均を上回っているか判定するメジャーも作成してください。
// メジャー1: 過去12ヶ月の移動平均
過去12ヶ月平均 =
CALCULATE(
AVERAGE(売上[金額]),
DATESINPERIOD(
日付テーブル[Date],
MAX(日付テーブル[Date]),
-12,
MONTH
)
)
// メジャー2: 実際の売上
月次売上 = SUM(売上[金額])
// メジャー3: 移動平均との差
MA差分 =
[月次売上] - [過去12ヶ月平均]
// メジャー4: 移動平均比(%)
MA比率 =
DIVIDE(
[MA差分],
[過去12ヶ月平均]
) * 100
// メジャー5: トレンド判定
トレンド判定 =
IF([月次売上] > [過去12ヶ月平均], "上昇", "下降")
ビジュアル化:
- 折れ線グラフ:X軸=年月、Y軸=月次売上と過去12ヶ月平均(2本線)
- 売上が平均を上回る → 成長トレンド
- 売上が平均を下回る → 減速トレンド
会計年度(4月1日開始)でのYTD売上、前年度同期YTD売上、YTD前年比率を計算してください。また、年度末(3月31日)までの目標達成に必要な月次売上ペースも計算してください。
// 1. 会計年度YTD売上(4月開始)
会計年度YTD =
TOTALYTD(
SUM(売上[金額]),
日付テーブル[Date],
"3/31"
)
// 2. 前年度同期YTD
前年度YTD =
CALCULATE(
TOTALYTD(SUM(売上[金額]), 日付テーブル[Date], "3/31"),
SAMEPERIODLASTYEAR(日付テーブル[Date])
)
// 3. YTD前年度比率(%)
YTD前年度比率 =
DIVIDE([会計年度YTD] - [前年度YTD], [前年度YTD]) * 100
// 4. 年度目標
年度目標 = 12000000
// 5. 残り期間での必要売上ペース
月次必要ペース =
VAR 現在月 = MONTH(MAX(日付テーブル[Date]))
VAR 経過月数 = IF(現在月 >= 4, 現在月 - 3, 現在月 + 9)
VAR 残り月数 = 12 - 経過月数
VAR 残り目標 = [年度目標] - [会計年度YTD]
RETURN DIVIDE(残り目標, 残り月数)
ポイント:
- 会計年度は”3/31″で指定
- 経過月数の計算が少し複雑(4月開始を考慮)
- 残り月数で必要ペースを逆算
❓ よくある質問
チェックリスト:
- ☑ 日付テーブルを作成している
- ☑ 「日付テーブルとしてマーク」している
- ☑ ファクトテーブルとリレーションシップを設定
- ☑ リレーションシップがアクティブ
- ☑ 日付テーブルの範囲がデータ範囲をカバー
TOTALYTDは日付テーブルの年が変わるとリセットされます。日付テーブルに正しい年列があるか確認してください。
また、会計年度の場合は第3引数で年度末を指定:
TOTALYTD(SUM(売上[金額]), 日付テーブル[Date], “3/31”)
SAMEPERIODLASTYEARは前年のデータが存在しないとBLANKを返します。
対策として、エラーハンドリングを追加できます:
前年比率 = IF(ISBLANK([前年売上]), BLANK(), DIVIDE([売上]-[前年売上], [前年売上]))
正しい例:
DATESINPERIOD(日付テーブル[Date], MAX(日付テーブル[Date]), -12, MONTH)
間違い例:
DATESINPERIOD(日付テーブル[Date], TODAY(), -12, MONTH) ← 常に今日の日付になる
MAX(日付テーブル[Date])を使うと、フィルターコンテキストに応じた最新日が自動選択されます。
カレンダー年度:
YTD_暦年 = TOTALYTD(SUM(売上[金額]), 日付テーブル[Date])
会計年度:
YTD_会計 = TOTALYTD(SUM(売上[金額]), 日付テーブル[Date], “3/31”)
スライサーでどちらを表示するか切り替えることも可能です。
学習メモ
BIツール入門 - Step 37