BI探検ノート

Power BI で、3か月の移動平均を出す方法(DATESINPERIOD と AVERAGEX)

約5分

濵口 翔長崎で、Power BI のつまずきを記録しています
目次
  1. 前提
  2. 手順
  3. 結果の読み方
  4. 合計の行に注意
  5. 公式の記載との照合
  6. この記事で確認できたこと・できていないこと
  7. 参考

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

月ごとの売上は、増えたり減ったりして、傾きが読みにくいことがあります。直近3か月の平均(移動平均)を出すと、線がなめらかになります。DATESINPERIOD と AVERAGEX で出して、結果を確かめました。

結論(30秒版)

  • AVERAGEX(DATESINPERIOD('月次売上'[月], MAX('月次売上'[月]), -3, MONTH), CALCULATE(SUM('月次売上'[売上]))) で、その月と、その前の2か月の平均が出ました。
  • 最初の2か月は、3か月そろわないまま、1か月分・2か月分の平均になりました(1月は、1月だけの値)。
  • 3か月そろった月だけ出したいときは、COUNTROWS で、期間の月の数を数えて、足りなければ BLANK() にしました。

前提

ダミーの月次売上(2025年1月〜12月、12行)を使いました。月の列は、毎月1日の日付です。日付テーブルとは、つないでいません(「日付テーブルとしてマーク」もしていません)。

この表は、「新しいテーブル」で、次の式で作りました(実際の仕事では、CSV などの読み込みで入れます)。

月次売上 =
SELECTCOLUMNS (
    GENERATESERIES ( 1, 12, 1 ),
    "月", DATE ( 2025, [Value], 1 ),
    "売上", 3000 + MOD ( [Value] * 700, 1900 )
)

売上は、3700、4400、3200、3900、4600、3400、4100、4800、3600、4300、3100、3800 になりました。上がったり下がったりする、ギザギザのデータです。

手順

「新しいメジャー」で、次のメジャーを作ります。

3か月移動平均 =
AVERAGEX (
    DATESINPERIOD ( '月次売上'[月], MAX ( '月次売上'[月] ), -3, MONTH ),
    CALCULATE ( SUM ( '月次売上'[売上] ) )
)
  • MAX('月次売上'[月]) は、いま見ている月(表の行の月)です。
  • DATESINPERIOD(…, -3, MONTH) は、その月から、3か月さかのぼった期間の日付です。
  • AVERAGEX は、その日付の1つ1つで、売上の合計を出して、平均します。

表のビジュアルに、「月」「売上の合計」「3か月移動平均」を入れて、確かめました。

結果の読み方

3月は、(3700 + 4400 + 3200) ÷ 3 = 3,766.67 になりました。表の値と合っています。4月は (4400 + 3200 + 3900) ÷ 3 = 3,833.33 で、これも合いました。

売上は 3200 から 4600 の間で上下しているのに、移動平均は、3,700 から 4,233 の間の、ゆるやかな動きになりました。

最初の2か月は、そろっていません。

  • 1月: 3,700.00(1月だけの値)
  • 2月: 4,050.00(1月と2月の平均)

これは、3か月の平均ではありません。3か月そろった月だけを出したいときは、次のメジャーを使います。

移動平均3か月そろう月だけ =
VAR n =
    COUNTROWS (
        DATESINPERIOD ( '月次売上'[月], MAX ( '月次売上'[月] ), -3, MONTH )
    )
RETURN
    IF ( n < 3, BLANK (), [3か月移動平均] )

表に並べると、1月と2月は空白、3月からは、上と同じ値になりました。

表のビジュアル。列は、月、売上の合計、3か月移動平均、移動平均3か月そろう月だけ。1月は3700と3,700.00、2月は4400と4,050.00で、4列目は空白。3月は3200、3,766.67、3,766.67。12月は3800、3,733.33、3,733.33。合計行は46900、3,733.33、3,733.33

合計の行に注意

表の「合計」の行は、3か月移動平均が 3,733.33 になりました。これは、12月の値と同じです。月の列の合計行では、MAX('月次売上'[月]) が、全体の最後の月(12月)になるためだと、私は読んでいます(この理由は、確かめていません)。12か月の移動平均の平均ではありません。合計の行を見せたくないときは、表の書式で、合計を切ります。

公式の記載との照合

Microsoft Learn(日本語版ではなく、英語版)の「DATESINPERIOD」(確認日 2026年10月23日)と、私の観察を、突き合わせました。

  • 戻り値: 日付の列を渡したときは、日付が1列の表を返す、と書かれています。メジャーの中で、AVERAGEX や COUNTROWS に渡せた、私の観察と合っています。
  • 列にある日付だけ: 戻り値の表には、渡した列に入っている日付だけが入る、と書かれています。このため、毎月1日だけの列では、期間の中の日付(月の数)が、1、2、3 と数えられた、と私は読んでいます。
  • 日付テーブル: 公式では、一番よくある使い方は、「日付テーブルとしてマークした表」の日付の列を渡すことだ、と書かれています。この記事では、マークしていない列で動きましたが、実際の仕事では、日付テーブルを使うほうが、公式の使い方に近いです。

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

確認日: 2026年10月23日。Power BI Desktop(Windows、日本語版、2.159.883.0)、ダミーの月次売上 12行。

確認できたこと

  • 上のメジャーで、3か月の移動平均が出たこと(3月と4月は、手計算と一致)
  • 最初の2か月が、1か月分・2か月分の平均になること
  • COUNTROWS を使うメジャーで、1月と2月が空白になること
  • 合計の行が、12月の値と同じになること

確認できていないこと

  • 日付テーブルとつないだ場合(日付テーブルをマークして、日付の列に毎日の行がある場合)の動き。その場合、期間の日付の数え方が変わるので、COUNTROWS の式は、そのままでは使えないと考えられます
  • 毎日のデータで、移動平均を出す場合
  • 月が1つ抜けているデータでの動き
  • 折れ線グラフに載せたときの見え方
  • Power BI サービスでの動作、英語版での名称

参考

この記事で使った用語

Power BI Desktop
Windows で動く、レポートを作るためのアプリです。データの取り込みとモデルの作成、レポートの作成に向いています。

用語集をすべて見る