2
0

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 で過去データを取得する: 前年・前月・前週・前日の出し方ガイド

Posted at

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年前を自動で参照してくれます。ただし、「日単位」などの単一日フィルターでは空になることがあるため、その場合は DATEADD(Date[Date], -1, YEAR) の利用を検討してください。


前月の値を取得する

前月の同じ日・月の売上を取得するには 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 か月前の同期間(柔軟)

前週の値を取得する

DAX の PARALLELPERIODDAY, MONTH, QUARTER, YEAR のみを正式にサポートしており、WEEK は非対応です。そのため、前週を求めたい場合は、日付テーブルに「週番号」や「週開始日」などのカスタム列を用意し、それを用いたロジックが必要です。

カスタム列を使った前週の計算例

  1. Date テーブルに以下のような列を追加:
YearWeek = YEAR([Date]) * 100 + WEEKNUM([Date], 2)

2 は ISO 準拠の月曜始まり)

  1. 次に、以下のようなメジャーを定義:
Sales Last Week = 
VAR CurrentWeek = MAX(Date[YearWeek])
VAR LastWeek = CALCULATE(
    SUM(Sales[Amount]),
    FILTER(ALL(Date), Date[YearWeek] = CurrentWeek - 1)
)

注意点

  • 年を跨ぐ週番号の処理には工夫が必要(例:202401 から 202352 への切り替えなど)
  • ISOWEEKNUM を使用することで ISO 準拠の週番号を取得可能(2016年以降の Excel/Power BI で利用可)

前日の値を取得する

前日のデータ取得には 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 より柔軟だが、
2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?