DAXで前年比を計算する方法|SAMEPERIODLASTYEARの基本

DAXで前年比を計算する方法|SAMEPERIODLASTYEARの基本の記事アイキャッチ ビジネススキル

前年比を作るとき、前年売上を別列へ固定してしまうと、月・商品・地域の切り口を変えるたびに式が増えます。DAXでは、現在選ばれている期間を1年前へ移動し、同じ売上メジャーを再評価できます。中心となるのがCALCULATEとSAMEPERIODLASTYEARです。この記事では、日付テーブルの準備から前年売上、前年差、前年比率、空白の扱い、会計年度の考え方まで順番に解説します。

この記事でできるようになること

  • 日付テーブルと売上テーブルの関係を整えられる
  • SAMEPERIODLASTYEARで前年売上・前年差・前年比率を作れる
  • 前年データの空白、月途中、会計年度を検算して誤解を防げる
  1. 先に結論:前年比は現在の期間を前年へ移して同じメジャーを評価する
  2. 前年比の前提となるデータモデル
    1. 日付テーブルを売上テーブルから分ける
    2. 基本メジャーを先に作る
  3. DAXで前年比を作る6ステップ
    1. 手順1:連続した日付テーブルを用意する
    2. 手順2:日付と売上を1対多で関連付ける
    3. 手順3:現在売上の基本メジャーを作る
    4. 手順4:SAMEPERIODLASTYEARで前年売上を作る
    5. 手順5:前年差と前年比率を作る
    6. 手順6:月・商品・地域で結果を検算する
  4. 前年比で使うDAXメジャー
    1. 売上と前年売上
    2. 前年差と前年比率
  5. 前年比を正しく検算する
  6. 前年比が出ない・合わない原因
    1. 前年売上がすべて空白
    2. 月ごとの前年値が同じ
    3. 前年比率が無限大・エラー
    4. 会計年度の比較がずれる
  7. SAMEPERIODLASTYEARとDATEADDを使い分ける
  8. 実務で継続運用するためのポイント
    1. メジャー名と表示形式を統一する
    2. 検算用ピボットテーブルを残す
    3. 定義とモデル変更を記録する
  9. よくある質問
      1. 前年比が空白のとき0を表示してよいですか?
      2. 計算列で前年比を作れますか?
      3. 会計年度でもSAMEPERIODLASTYEARを使えますか?
  10. UdemyでDAX・Power Pivotをさらに学びたい方へ
    1. 1.Microsoft Excel – Power Pivot, Power Query, DAX 入門講座
    2. 2.3時間でDAXの基礎を徹底解説 Power BIでのレポート作成のレベルをあげる!
    3. 3.【Power Pivot】大量データを瞬時に集計・分析!DAX関数&ダッシュボード作成実践講座
  11. まとめ:同じ売上を前年の期間で再評価する

先に結論:前年比は現在の期間を前年へ移して同じメジャーを評価する

DAXの前年比では、現在のセルやスライサーが作る日付フィルターを1年前へ移し、その条件で売上メジャーを計算します。前年値を行番号で探すのではなく、日付テーブルを通じて期間を置き換える考え方です。

基本は[前年売上] = CALCULATE([売上], SAMEPERIODLASTYEAR('日付'[日付]))です。現在売上と前年売上ができれば、前年差と前年比率は再利用できます。

同じ売上メジャーが、日付フィルターだけを変えて評価される様子を確認してください。

DAXのSAMEPERIODLASTYEARが現在の2026年4月の日付フィルターを2025年4月へ移し同じ売上メジャーを評価する図
図1: SAMEPERIODLASTYEARで現在の日付条件を1年前へ移動する

商品や地域のフィルターはそのまま残り、日付の範囲だけが前年へ移ります。そのため、ピボットテーブルの行・列・スライサーに応じて前年値が動的に変わります。

前提は連続した日付テーブル

売上がある日だけの日付列ではなく、分析期間の毎日を連続して持つ日付テーブルを用意し、売上日と1対多で関連付けます。

前年比の前提となるデータモデル

日付テーブルを売上テーブルから分ける

日付テーブルには、期間内のすべての日付を1日1行で持たせます。年、四半期、月番号、年月表示、年度などの列を追加し、表示順を月番号で制御します。

売上テーブルの販売日と日付テーブルの日付を関連付けます。日付側が一意の1、売上側が複数の多です。時刻を含む売上日時は日付だけの列へ分けて関連付けます。

Excel Power Pivotでは、日付テーブルとしてマークする機能や自動日付の挙動が製品によって異なるため、使用環境で確認します。重要なのは、連続・一意・空白なしの日付列を使うことです。

テーブル 主な列 役割
日付 日付、年、月、年度 期間フィルターを作る
売上 販売日、商品番号、数量、金額 集計対象の明細
商品 商品番号、カテゴリ 商品軸で絞る
地域 地域番号、国、エリア 地域軸で絞る

基本メジャーを先に作る

前年比の式へSUMを直接繰り返すより、まず[売上] = SUM('売上'[売上金額])を作ります。前年、前年差、比率はこのメジャーを参照します。

基本メジャーを再利用すると、売上定義を変更した際に1か所の修正で済みます。数量×単価で売上を計算する場合も、[売上]の定義だけをSUMXへ変更できます。

現在期間が前年のどの日付集合へ移るかを追います。

DAXのSAMEPERIODLASTYEARが現在の日付集合を1年前へ移し前年売上から前年差と前年比を計算する流れ
図2: 現在の日付条件を前年へ移して前年売上と前年比を計算する

日付だけを前年へ移し、商品や地域の条件は残すことで、同じ条件同士の前年比を計算できます。

DAXで前年比を作る6ステップ

日付モデルから比率検算までの流れです。

Excel Power Pivotで日付テーブルと売上を関連付けてDAXの売上、前年売上、前年差、前年比率を作る図
図3: 日付テーブルを関連付け、売上、前年売上、前年差、前年比率を作って検算する

式を作る順番は、売上、前年売上、前年差、前年比率です。途中メジャーをピボットへ並べると、どこから値が想定外になったかを確認できます。

手順1:連続した日付テーブルを用意する

売上の最小日から最大日を含む連続日付を作り、年、月番号、年月、年度列を追加します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

時間インテリジェンス関数は現在期間を日付集合として扱います。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

日付が一意で空白がなく、期間に欠けがないことを確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順2:日付と売上を1対多で関連付ける

日付テーブルの日付から売上テーブルの販売日へ関係を作ります。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

日付フィルターが関係を通じて売上明細へ伝わる必要があります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

日付側が1、売上側が多で、関係がアクティブか確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順3:現在売上の基本メジャーを作る

売上金額列を合計する[売上]メジャーを作ります。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

前年計算でも同じ売上定義を再評価できます。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

年・月別売上が元データの合計と一致するか確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順4:SAMEPERIODLASTYEARで前年売上を作る

CALCULATEのフィルター引数に日付列のSAMEPERIODLASTYEARを指定します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

現在の期間を前年の同期間へ移して[売上]を評価します。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

月別に現在年と前年値を並べ、前年の元集計と照合します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順5:前年差と前年比率を作る

[売上]-[前年売上]で差額を、DIVIDE([前年差],[前年売上])で成長率を作ります。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

DIVIDEは分母が0または空白のときの扱いを安全に指定できます。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

増加が正、減少が負になり、表示形式がパーセントか確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順6:月・商品・地域で結果を検算する

ピボットテーブルへ年月、商品カテゴリ、地域を配置し、売上と前年売上を比較します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

合計だけ合っていても、関係やフィルター方向の問題が細分類で現れることがあります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

総計と代表的な月・商品の両方を元データへ照合します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

前年比で使うDAXメジャー

以下では、日付テーブル名を日付、売上金額列を売上[売上金額]としています。実際のモデル名へ読み替えてください。

売上と前年売上

基本メジャーを作り、前年期間へフィルターを移します。

売上 :=
SUM ( '売上'[売上金額] )

前年売上 :=
CALCULATE (
    [売上],
    SAMEPERIODLASTYEAR ( '日付'[日付] )
)

SAMEPERIODLASTYEARは前年の日付集合を返し、CALCULATEが変更後のフィルターコンテキストで[売上]を評価します。

前年差と前年比率

前年比を『前年を基準とした増減率』として計算する例です。

前年差 :=
[売上] - [前年売上]

前年比率 :=
DIVIDE (
    [前年差],
    [前年売上]
)

日本語の『前年比』は前年を100とした指数を指す場合もあります。成長率なら上式、指数ならDIVIDE([売上],[前年売上])を使い、名称を明確にします。

指標 式の考え方 表示例
前年差 当年-前年 +120万円
前年比率 前年差÷前年 +8.5%
前年比指数 当年÷前年 108.5%

日付テーブルのフィルターが関係を通じて売上へ届きます。

ピボットで選んだ年月が日付テーブルから売上テーブルへ伝播してDAXメジャーを評価する図
図4: ピボットの年月から日付テーブルとリレーションを通じて売上を絞る

売上側の年月列を直接使うと期間関数が想定どおり動かないことがあります。軸とスライサーには日付テーブルの列を使います。

前年比を正しく検算する

前年売上メジャーだけを見ると値の正しさを判断しにくいため、当年売上、前年売上、前年差、前年比率を同じピボットへ並べます。代表月の前年元データを直接集計して照合します。

現在年が月途中なら、前年の同じ日数と比較されるか、前年の月全体と比較されるかを確認します。経営報告では比較期間の定義を注記します。

前年比では次の6項目を確認します。

DAXの前年比計算で日付の連続性、リレーション、当年売上、前年売上、空白、比較期間を検算する図
図5: 日付テーブル、関係、当年・前年売上、空白、比較期間を確認する

特に初年度は前年データがないため空白が自然です。0へ置換すると『前年実績ゼロ』と『前年データなし』を区別できなくなります。

年度合計だけでなく、月別や日別でも値を確認します。月表示を文字列にする場合は月番号で並べ替え、1月、10月、11月、12月、2月という順序にならないようにします。

前年比が出ない・合わない原因

前年売上がすべて空白

当年売上は表示されるのに前年売上が空白です。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

日付テーブルが売上へ関連付いていない、販売日が日時型で時刻を含む、前年期間のデータがありません。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

日付だけの列で1対多関係を作り、前年データの存在を確認します。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

前年の同じ月を単独選択して[売上]が表示されるか確認します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

月ごとの前年値が同じ

すべての月で年合計のような同じ前年値が表示されます。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

ピボットの月が売上テーブル側にあり、日付テーブルのフィルターを使っていません。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

行・列には日付テーブルの年月列を使います。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

月ごとの日付範囲と前年売上が変化することを確認します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

前年比率が無限大・エラー

前年売上が0の行で割り算が不安定です。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

通常の除算演算子で0または空白を割っています。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

DIVIDEを使い、代替結果を空白または業務で決めた値にします。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

前年0、前年空白、前年正数の3ケースをテストします。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

会計年度の比較がずれる

4月開始年度の合計や月順が暦年基準になります。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

年度列や会計月番号が日付テーブルにありません。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

日付テーブルへ年度・会計月番号を追加し、表示列を正しく並べ替えます。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

年度開始月と終了月、うるう日を含む代表期間を照合します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

前年比が空白になるときは、どこでデータが途切れたかを確認します。

DAXの前年比が空白になる原因を前年日付、前年売上、関係、表示軸、初年度、0除算で確認する図
図6: 前年比の空白を日付・売上・関係・表示軸・初年度・0除算で切り分ける

空白は必ずしもエラーではありません。比較元が存在しない初年度と、関係や日付設計の不具合を区別します。

SAMEPERIODLASTYEARとDATEADDを使い分ける

SAMEPERIODLASTYEARは現在期間を1年前へ移す意図が読みやすい関数です。DATEADDは年だけでなく月、四半期、日などの単位で移動でき、13か月会計や特別な比較で柔軟です。

ただし、関数を変えても日付テーブルと比較期間の定義が曖昧なら正しい結果になりません。暦年、会計年度、営業日、同曜日など、何を『前年同期間』とするかを先に決めます。

目的 候補 注意点
前年同期間 SAMEPERIODLASTYEAR 連続日付と現在コンテキスト
任意の期間移動 DATEADD 移動単位を指定
前年全体 PREVIOUSYEAR 現在期間との違いを確認
13期間会計 DATEADD等で設計 カレンダー定義が必要

最新のDAXにはカレンダー参照を使う時間インテリジェンスの拡張もありますが、Excel Power Pivotのバージョンによって利用できる構文が異なります。公開記事では基本の日付列を使う式を中心にし、使用環境で機能差を確認してください。

実務で継続運用するためのポイント

メジャー名と表示形式を統一する

DAXメジャーには、値の定義が分かる名前と表示形式を設定します。金額、数量、率、指数を区別し、同じ『前年比』でも差額、成長率、前年を100とした指数のどれかを名称から判断できるようにします。

基本メジャー、期間比較、比率、表示用メジャーをフォルダーまたは命名規則で整理します。式の中へ同じ集計を繰り返さず、検算済みの基本メジャーを参照すると、定義変更の影響範囲を小さくできます。

検算用ピボットテーブルを残す

完成ダッシュボードとは別に、日付、商品、地域などを自由に置ける小さな検算用ピボットを残します。基本値と派生値を同時に表示し、総計、代表明細、フィルターなし、単一選択の状態を比較します。

メジャーが正しく見える1つのセルだけを確認せず、境界日、空白、0、未一致、複数選択などの条件をテストします。DAXはセルのフィルターコンテキストで再評価されるため、テストケースを変えることが式の品質確認になります。

定義とモデル変更を記録する

メジャーの目的、分子、分母、対象期間、空白時の扱い、参照テーブルを一覧にします。リレーション、日付テーブル、列名を変更した場合は、関係するメジャーとピボットの検算結果を記録します。

数値の定義は式だけでは伝わりません。利用者が同じ言葉を別の意味で使わないよう、レポート上の注記とメジャー定義をそろえ、変更後は主要数値を確定済みレポートへ照合します。

よくある質問

前年比が空白のとき0を表示してよいですか?

前年データが存在しないのか、前年実績が0なのかを区別できるなら表示側で0にできます。分析メジャーは空白を保ち、理由が分かる補助指標を作る方が安全です。

計算列で前年比を作れますか?

前年比はピボットの月・商品・地域フィルターに応じて変わるため、通常はメジャーで作ります。計算列はデータ更新時に行単位で固定され、同じ柔軟性を持ちません。

会計年度でもSAMEPERIODLASTYEARを使えますか?

日付テーブルに会計年度属性を持たせれば同期間比較はできます。ただし13か月会計や特殊カレンダーではDATEADDなど別の期間移動と検算が必要です。

UdemyでDAX・Power Pivotをさらに学びたい方へ

前年比は日付テーブル、CALCULATE、時間インテリジェンスが連動するため、実際にメジャーを作りながら結果を確認する学習が効果的です。

記事の内容を動画と演習で復習したい方へ、関連性の高いUdemy講座を3つ選びました。

1.Microsoft Excel – Power Pivot, Power Query, DAX 入門講座

こんな方におすすめ

ExcelでPower Query、Power Pivot、DAXがどう連携するのかを、レポート作成の流れに沿って学びたい方に向いています。

2.3時間でDAXの基礎を徹底解説 Power BIでのレポート作成のレベルをあげる!

こんな方におすすめ

CALCULATE、前年比、累計、SUMXなど、この記事群で扱うDAXの考え方と基本関数を集中して学びたい方に向いています。

3.【Power Pivot】大量データを瞬時に集計・分析!DAX関数&ダッシュボード作成実践講座

こんな方におすすめ

Excel Power PivotでデータモデルとDAXを組み合わせ、実務の集計やダッシュボード作成まで進みたい方に向いています。

Udemyは動画の再生速度を調整でき、必要な箇所を繰り返し確認できます。価格は講座やセール時期によって変わるため、申込み前に講座ページの内容、対応環境、最新価格をご確認ください。

※本記事にはアフィリエイトリンクが含まれます。リンク経由で申込みがあった場合、運営者に報酬が発生することがあります。

まとめ:同じ売上を前年の期間で再評価する

DAXの前年比は、日付テーブルが作る現在期間を1年前へ移し、同じ売上メジャーをCALCULATEで再評価する仕組みです。

連続した日付テーブルを用意し、売上日へ1対多で関連付けたうえで、売上、前年売上、前年差、前年比率の順にメジャーを作ります。

前年データなし、前年0、月途中、会計年度を区別し、当年と前年の元集計へ照合します。比率の定義も成長率か指数かを名称と説明で明確にしてください。

ビジネススキルの人気オンラインコース

コメント

タイトルとURLをコピーしました