STEP 37:DAXの時系列インテリジェンス

📅 STEP 37: DAXの時系列インテリジェンス

前年比、累計、移動平均…時系列分析の強力な武器!

📋 このステップで学ぶこと

  • 時系列インテリジェンスとは何か
  • 日付テーブルの重要性と設定方法
  • 年初来累計(YTD)の計算方法
  • 前年同期比較(SAMEPERIODLASTYEAR)
  • 日付操作関数(DATEADD、DATESINPERIOD)
  • 移動平均と実践的な時系列分析

ゴール:前年比、YTD、移動平均など、ビジネスで必須の時系列メジャーを作成できるようになる

📅 1. 時系列インテリジェンスとは

時系列インテリジェンスの概要

DAXには、時間に関する分析を簡単に行える特別な関数群があります。これを「時系列インテリジェンス(Time Intelligence)」と呼びます。前年比、累計、移動平均など、ビジネスで頻繁に使う時系列分析が、わずか数行のコードで実現できます。

✅ 時系列インテリジェンスでできること
機能 具体例 ビジネスでの活用
累計(Running Total) YTD(年初来)、QTD(四半期)、MTD(月) 年間目標に対する進捗確認
期間比較 前年同期、前月同期、前週同期 売上の前年比較、成長率分析
成長率 前年比成長率、前月比成長率 業績のトレンド把握
移動平均 過去3ヶ月平均、過去12ヶ月平均 季節変動の除去、長期トレンド
期間集計 過去30日、過去1年間 リアルタイムダッシュボード
⚠️ 超重要!日付テーブルは必須です

時系列インテリジェンス関数を使うには、適切な日付テーブルが必要です。日付テーブルを作成し、「日付テーブルとしてマーク」しないと、これらの関数は正しく動作しません。これは最も重要なポイントなので、必ず設定してください。

日付テーブルの作成と設定

時系列インテリジェンスを使うための前提条件として、まず日付テーブルを作成し、正しく設定する必要があります。

💡 日付テーブルの作成(入力するDAX)
日付テーブル = 
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行のコードで年初来累計を計算できます。

📊 TOTALYTD関数の構文
引数 説明
第1引数(必須) 計算するメジャー(式) SUM(売上[金額])
第2引数(必須) 日付列 日付テーブル[Date]
第3引数(省略可) 年度末の日付 “3/31″(3月決算の場合)
✅ 年初来売上のメジャー(入力するDAX)
YTD売上 = 
TOTALYTD(
    SUM(売上[金額]),
    日付テーブル[Date]
)

※モバイルでは横スクロールできます

📊 YTDの動作イメージ
月次売上 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(3月決算)のメジャー(入力するDAX)
会計年度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)も簡単に計算できます。

✅ QTDとMTDのメジャー(入力するDAX)
// 四半期累計(Quarter To Date)
四半期累計売上 = 
TOTALQTD(
    SUM(売上[金額]),
    日付テーブル[Date]
)

// 月累計(Month To Date)
月累計売上 = 
TOTALMTD(
    SUM(売上[金額]),
    日付テーブル[Date]
)

※モバイルでは横スクロールできます

💡 YTD/QTD/MTDの使い分け
関数 用途 ビジネスでの活用例
YTD 年間トレンド、年間目標との比較 「今年の累計売上は目標の70%達成」
QTD 四半期業績、四半期目標との比較 「Q2累計で前年同四半期を上回る」
MTD 月次進捗、月次目標との比較 「今月15日時点で月間目標の50%達成」

📈 3. 前年同期比較(SAMEPERIODLASTYEAR)

SAMEPERIODLASTYEARの基本

SAMEPERIODLASTYEAR関数は、ちょうど1年前の同じ期間のデータを取得します。前年比較はビジネスで最も頻繁に使われる分析の1つです。

✅ 前年売上のメジャー(入力するDAX)
前年売上 = 
CALCULATE(
    SUM(売上[金額]),
    SAMEPERIODLASTYEAR(日付テーブル[Date])
)

※モバイルでは横スクロールできます

💡 前年比(差分と比率)のメジャー(入力するDAX)
// 前年比(差分)
前年比 = 
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ベースの前年比較メジャー(入力するDAX)
// 今年のYTD
今年YTD = 
TOTALYTD(
    SUM(売上[金額]),
    日付テーブル[Date]
)

// 前年のYTD
前年YTD = 
CALCULATE(
    TOTALYTD(SUM(売上[金額]), 日付テーブル[Date]),
    SAMEPERIODLASTYEAR(日付テーブル[Date])
)

// YTD前年比率(%)
YTD前年比率 = 
DIVIDE(
    [今年YTD] - [前年YTD],
    [前年YTD]
) * 100

※モバイルでは横スクロールできます

📊 YTD前年比の解釈例
項目 意味
現在 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関数は、指定した期間だけ日付をシフトする関数です。前月、前週、前四半期など、様々な期間との比較が可能です。

📊 DATEADD関数の構文
引数 説明
第1引数 日付列 日付テーブル[Date]
第2引数 シフト数(マイナスで過去) -1(1期間前)
第3引数 単位 YEAR、QUARTER、MONTH、DAY
✅ 前月売上・前週売上のメジャー(入力するDAX)
// 前月の売上
前月売上 = 
CALCULATE(
    SUM(売上[金額]),
    DATEADD(日付テーブル[Date], -1, MONTH)
)

// 前週の売上(7日前)
前週売上 = 
CALCULATE(
    SUM(売上[金額]),
    DATEADD(日付テーブル[Date], -7, DAY)
)

// 2年前の売上
2年前売上 = 
CALCULATE(
    SUM(売上[金額]),
    DATEADD(日付テーブル[Date], -2, YEAR)
)

※モバイルでは横スクロールできます

💡 前月比のメジャー(入力するDAX)
// 前月比(差分)
前月比 = 
SUM(売上[金額]) - [前月売上]

// 前月比率(%)
前月比率 = 
DIVIDE(
    [前月比],
    [前月売上]
) * 100

※モバイルでは横スクロールできます

📊 DATEADDの単位一覧
単位 意味 使用例
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関数を使います。

✅ 移動平均のメジャー(入力するDAX)
// 過去3ヶ月の移動平均
過去3ヶ月平均 = 
CALCULATE(
    AVERAGE(売上[金額]),
    DATESINPERIOD(
        日付テーブル[Date],
        MAX(日付テーブル[Date]),
        -3,
        MONTH
    )
)

// 過去12ヶ月の移動平均(年間トレンド)
過去12ヶ月平均 = 
CALCULATE(
    AVERAGE(売上[金額]),
    DATESINPERIOD(
        日付テーブル[Date],
        MAX(日付テーブル[Date]),
        -12,
        MONTH
    )
)

※モバイルでは横スクロールできます

📊 DATESINPERIOD関数の構文
引数 説明
第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日間の売上を集計することもできます。リアルタイムダッシュボードで活用できます。

💡 過去N日間の売上メジャー(入力するDAX)
// 過去30日間の売上
過去30日売上 = 
CALCULATE(
    SUM(売上[金額]),
    DATESINPERIOD(
        日付テーブル[Date],
        MAX(日付テーブル[Date]),
        -30,
        DAY
    )
)

// 過去7日間の売上(週次)
過去7日売上 = 
CALCULATE(
    SUM(売上[金額]),
    DATESINPERIOD(
        日付テーブル[Date],
        MAX(日付テーブル[Date]),
        -7,
        DAY
    )
)

※モバイルでは横スクロールできます

🎯 6. 実践的な時系列分析

KPIダッシュボード用メジャー

実務で使うKPIダッシュボードには、様々な時系列メジャーを組み合わせます。以下は、包括的な時系列分析のためのメジャーセットです。

✅ KPIダッシュボード用メジャーセット(入力するDAX)
// 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)
)

※モバイルでは横スクロールできます

目標進捗管理

年間目標に対する進捗を管理するメジャーも、時系列インテリジェンスを活用して作成できます。

💡 目標進捗管理メジャー(入力するDAX)
// 年間目標(固定値またはテーブルから取得)
年間目標 = 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 基礎

以下のメジャーを作成してください:
1. 年初来の売上合計(YTD)
2. 前年同期の売上
3. 前年比(差分)
4. 前年比率(%)

【時系列メジャーの作成】

前提:日付テーブルを作成済み、日付テーブルとしてマーク済み

// 1. 年初来の売上合計(YTD)
YTD売上 = 
TOTALYTD(
    SUM(売上[金額]),
    日付テーブル[Date]
)

// 2. 前年同期の売上
前年売上 = 
CALCULATE(
    SUM(売上[金額]),
    SAMEPERIODLASTYEAR(日付テーブル[Date])
)

// 3. 前年比(差分)
前年比 = 
SUM(売上[金額]) - [前年売上]

// 4. 前年比率(%)
前年比率 = 
DIVIDE(
    [前年比],
    [前年売上]
) * 100

使い方:

  • 折れ線グラフ:X軸=年月、Y軸=YTD売上
  • カード:前年比率(%)を大きく表示
  • テーブル:月別に前年売上と比較
演習 2 応用

過去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本線)
  • 売上が平均を上回る → 成長トレンド
  • 売上が平均を下回る → 減速トレンド
演習 3 発展

会計年度(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月開始を考慮)
  • 残り月数で必要ペースを逆算

❓ よくある質問

Q1: 時系列関数が動きません
日付テーブルの設定を確認してください。

チェックリスト:
  • ☑ 日付テーブルを作成している
  • ☑ 「日付テーブルとしてマーク」している
  • ☑ ファクトテーブルとリレーションシップを設定
  • ☑ リレーションシップがアクティブ
  • ☑ 日付テーブルの範囲がデータ範囲をカバー
特に「日付テーブルとしてマーク」を忘れると、時系列関数はエラーになります!
Q2: YTDが12月以降もリセットされません
日付テーブルの年列を確認してください。

TOTALYTDは日付テーブルの年が変わるとリセットされます。日付テーブルに正しい年列があるか確認してください。

また、会計年度の場合は第3引数で年度末を指定:
TOTALYTD(SUM(売上[金額]), 日付テーブル[Date], “3/31”)
Q3: 前年のデータがないと前年比が表示されません
それは正常です。

SAMEPERIODLASTYEARは前年のデータが存在しないとBLANKを返します。

対策として、エラーハンドリングを追加できます:
前年比率 = IF(ISBLANK([前年売上]), BLANK(), DIVIDE([売上]-[前年売上], [前年売上]))
Q4: 移動平均がおかしな値になります
DATESINPERIODの基準日を確認してください。

正しい例:
DATESINPERIOD(日付テーブル[Date], MAX(日付テーブル[Date]), -12, MONTH)

間違い例:
DATESINPERIOD(日付テーブル[Date], TODAY(), -12, MONTH) ← 常に今日の日付になる

MAX(日付テーブル[Date])を使うと、フィルターコンテキストに応じた最新日が自動選択されます。
Q5: 会計年度とカレンダー年度を両方使いたい
メジャーを2セット作成しましょう。

カレンダー年度:
YTD_暦年 = TOTALYTD(SUM(売上[金額]), 日付テーブル[Date])

会計年度:
YTD_会計 = TOTALYTD(SUM(売上[金額]), 日付テーブル[Date], “3/31”)

スライサーでどちらを表示するか切り替えることも可能です。

📝

学習メモ

BIツール入門 - Step 37

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE