2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DAX で過去データを取得する: 前年・前月・前週・前日の出し方ガイド

2
Last updated at Posted at 2025-05-30

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 か月前の同期間

前週の値を取得する

前週の売上などを出すには PARALLELPERIODWEEK 単位を指定します。

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)
)

注意点:

  • DATEADDDAYMONTHQUARTERYEAR のみをサポートしており、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!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?