BI探検ノート

Power BI で前年比を出す方法(SAMEPERIODLASTYEAR)

約6分

濵口 翔長崎で、Power BI のつまずきを記録しています
目次
  1. 前提
  2. 練習用の CSV で、はじめから作る(画面つき)
  3. 手順
  4. 結果の読み方
  5. 公式の記載との照合
  6. この記事で確認できたこと・できていないこと
  7. 参考

確認日2026年10月20日。Power BI Desktop(日本語版、2.159.883.0)で、ダミーのデータを使って確かめました。確認できていないことは、末尾にまとめました。

月ごとの売上に、前の年の同じ月の売上と、その比(前年比)を並べたい。DAX のメジャー2つで、できました。つまずきやすい点も、実機で確かめました。

結論(30秒版)

  • 前年売上 = CALCULATE([売上合計], SAMEPERIODLASTYEAR('日付テーブル'[Date])) と、前年比 = DIVIDE([売上合計], [前年売上]) で、前年比が出ました。
  • 前の年のデータがない行(私のデータでは2025年)は、前年売上も前年比も、空白になりました。
  • 売上のない月(2026年4月〜12月)にも、前年売上は、値が出ます。 前年比は、空白です。合計行の前年比は、年の比較ではないので、読み方に注意が必要です。

前提

日付テーブルを、自分で作りたいときは、日付テーブルの DAX を作る道具もあります。

日付テーブルを作って、売上のテーブルとつなぎ、「日付テーブルとしてマーク」してあります(手順は、日付テーブルを作る方法に書きました)。

データは、ダミーの売上(2025年1月〜2026年3月、51行)です。売上合計 = SUM(sales3[売上]) のメジャーを、先に作りました。

練習用の CSV で、はじめから作る(画面つき)

練習問題の CSV(sales_yoy.csv、51行)を使って、日付テーブルを作るところから、画面を撮り直しました(テーブル名は、sales_yoy です。下の「手順」の式は、記事を最初に書いたときのテーブル名(sales3)のままなので、読み替えてください)。

1. CSV を読み込む。 日付、店舗、売上の3列、51行です。

CSV のプレビュー。日付、店舗、売上の3列が見える

2. 日付テーブルを作る。 「モデリング」→「新しいテーブル」で、次の式を入れます。

日付テーブル = CALENDAR(DATE(2025,1,1), DATE(2026,12,31))

数式バーに、日付テーブル = CALENDAR(DATE(2025,1,1), DATE(2026,12,31)) と入っている

3. 売上の「日付」と、日付テーブルの「Date」をつなぐ。 モデルビューで、ドラッグします。出てきた画面では、「一対一・双方向」になっていたので、**「多対一」「単一」**に直して、保存しました。

新しいリレーションシップの画面。多対一、クロスフィルターの方向は単一

4. 日付テーブルとしてマークする。 日付テーブルを選び、「テーブル ツール」の「日付テーブルとしてマーク」をオンにして、日付列に「Date」を選ぶと、「正常に検証されました」と出ます。

5. メジャーを作る。 売上合計、前年売上、前年比の順に、「新しいメジャー」で作ります。

数式バーに、前年売上のメジャーが入っている

6. 表にして確かめる。 年と月の列(年 = YEAR('日付テーブル'[Date])、月 = MONTH('日付テーブル'[Date]))を、日付テーブルに足して、売上合計、前年売上、前年比と並べます。2026年1月は 1.16、2月は 1.45、3月は 0.81、合計は 1.23 でした(2025年は、前年がないので、空白です)。

年と月ごとの表。2026年1月の前年比は1.16、2月は1.45、3月は0.81。2025年は前年売上と前年比が空白

手順

「モデリング」タブの「新しいメジャー」で、次の2つを作ります。

前年売上 =
CALCULATE (
    [売上合計],
    SAMEPERIODLASTYEAR ( '日付テーブル'[Date] )
)
前年比 = DIVIDE ( [売上合計], [前年売上] )

数式バーに、前年売上のメジャー(CALCULATE と SAMEPERIODLASTYEAR)を入力した画面

テーブルのビジュアルに、年、月、前年比、売上合計、前年売上を、並べました。

年と月ごとの表。2025年の行は前年比と前年売上が空白。2026年1月は前年比 1.16、2月は 1.45、3月は 0.81。2026年4月以降は売上合計が空白だが前年売上は値がある。合計行の前年比は 1.23

結果の読み方

  • 2025年の行: 売上合計はありますが、前年売上と前年比は、空白でした。前の年(2024年)のデータが、ないためです。
  • 2026年1〜3月: 前年比は、1月が 1.16、2月が 1.45、3月が 0.81 でした(1月は、4573 ÷ 3931 です)。
  • 2026年4〜12月: 売上合計は空白ですが、前年売上は、2025年の同じ月の値が出ます(4月は 4150 など)。前年比は、売上合計が空白なので、空白になります。「売上がない月に、前年売上だけ出る」ことに、驚かないようにします。
  • 合計行: 前年比が 1.23 になっています。これは、全期間の売上合計(75874)を、前年売上の合計(61508、2025年だけ)で割った値で、年どうしの比較ではありません。この値を、そのまま報告に使わないようにします。

公式の記載との照合

Microsoft Learn(日本語版)の「SAMEPERIODLASTYEAR 関数 (DAX)」と、「Power BI Desktop で日付テーブルを設定し、使用する」(確認日 2026年10月20日)と、私の観察を、突き合わせました。

  • 引数: 公式では、dates の引数に、日付/時刻列への参照を指定できる、と書かれています。売上のテーブルの日付の列でも、日付テーブルの列でも、同じ結果だった、私の観察と合っています。
  • 返す日付: 公式では、DATEADD(dates, -1, year) が返す日付と同じ、と書かれています。
  • 月末の特殊な動作: 選択に、月の最後の2日が含まれる場合は、月末までの日数が含まれる、と公式に書かれています(例: 2月27日と28日を選ぶと、前年の2月27日から29日)。この記事では、確認していません。
  • 使えない場合: 公式では、DirectQuery の計算列や、行レベル セキュリティの規則では、使えない、と書かれています。また、ビジュアル計算での使用は、意味のない結果になることがあるため、お勧めしない、と書かれています。
  • 日付テーブル: 公式では、クラシックなタイム インテリジェンス関数を使う場合は、日付テーブルをマークする必要がある、とされています(日付テーブルの記事)。

この記事で確認できたこと・できていないこと

確認日: 2026年10月20日。Power BI Desktop(Windows、日本語版、2.159.883.0、未サインイン)、ダミーのデータ51行(2025年1月〜2026年3月)。

確認できたこと

  • 上の2つのメジャーで、2026年1〜3月に、前年売上と前年比が出たこと
  • 前年のデータがない行が、空白になること
  • 売上のない月にも、前年売上が出ること
  • 合計行の前年比が、年の比較ではないこと

確認できていないこと

  • 日付テーブルを使わないと、失敗するのか。SAMEPERIODLASTYEAR の引数を、売上のテーブルの日付の列にしても、私の環境では、同じ結果でした。失敗する条件は、再現できていません。
  • リレーションシップがない場合の動き
  • 日付が重複するテーブルでの、エラーの文言(今回は、エラーが出ませんでした)
  • 英語版での名称

参考

この記事で使った用語

Power BI Desktop
Windows で動く、レポートを作るためのアプリです。データの取り込みとモデルの作成、レポートの作成に向いています。
セマンティックモデル
レポートやグラフに使える状態に整えた、データの元です。作り方の1つは、モデルを含む Desktop のファイルを、Power BI サービスにアップロードすることです。

用語集をすべて見る