ついにPower BIで移動平均を出すための関数が登場!WINDOW関数とは?
目次
Power BI には、DAX を用いた高度なデータモデリングや分析を可能にする多くの関数が用意されており、
その数は非常に多岐にわたります。
今回ご紹介する「WINDOW関数」は、テーブルの中から特定の行や列の範囲(ウィンドウ)を定義し、
その範囲に対して集計や移動平均などの計算を行う関数です。
「名前は聞いたことがあるけれど、使い方がいまいちピンとこない」
「移動平均など範囲指定を使った計算をしたいが、どう定義すればいいか分からない」といった声も多く聞かれます。
本記事では、そうした疑問を解消すべく、WINDOW関数の基本的な使い方と、
実際の移動平均の計算例をわかりやすく解説していきます。
WINDOW関数とは?
WINDOW関数は、指定した範囲(ウィンドウ)の行または列に対して、
平均・合計・順位付けなどの計算を実行できる関数です。
特に、移動平均やトレンド分析のように「前後の行も含めた集計」が必要なケースで効果を発揮します。
この関数は比較的新しいDAX関数であり、Power BI の機能拡張とともに登場しました。
これまでは複数の関数を組み合わせて記述する必要があった移動平均などの処理が、WINDOW関数によりシンプルかつ高速に記述できるようになりました。
また、パフォーマンス面でも最適化が進んでおり、
大規模なデータセットに対しても安定して処理を実行できる設計となっています。
WINDOW関数で実行できる計算は以下のようなものがあります。
WINDOW関数で実行できること
WINDOW関数を使うことで、指定した行範囲(ウィンドウ)に対して
以下のような集計や分析を行うことができます。
- 移動平均・トレンドの算出:前後のデータを指定して平均を出すなど、時系列の変化を捉える計算に対応
- 累積集計の実行:範囲内のデータを積み上げて、累計値を求める処理が可能
- 順位・パーセンタイルの計算:データの並び順に応じた順位付けや、全体に対する位置づけを求める
- グループ単位での集計処理:特定の列でパーティション(分割)し、グループごとに範囲を定義して集計が可能
これらは一例にすぎません。他の DAX 関数(例:CALCULATE、AVERAGE、SUM など)
と組み合わせることで、より柔軟で高度な分析が可能になります。
WINDOW関数の使い方
WINDOW関数の詳細は以下のリンク先に記載されています。ここでは簡単に説明と補足をさせていただきます。
https://learn.microsoft.com/ja-jp/dax/window-function-dax
WINDOWS関数の構文は以下の通りです。
WINDOW(
from,
[from_type],
to,
[to_type],
<relation>,
<orderBy>,
<blanks>,
<partitionBy>
)
少し引数が多く見えるかもしれませんが、実際によく使うのは from、to、orderBy あたりです。
以下に、移動平均などでよく使われるシーンをイメージしながら、主要な引数の意味を整理します。
<from>:範囲の開始位置を指定します。
たとえば「前日と当日」を対象にしたい場合は、前日が -1 になります。相対的な位置を数字で指定します。
<from_type>:開始位置の指定方法を選びます。REL(現在の行からの相対位置)か、
ABS(テーブル内の絶対位置)を指定でき、何も指定しなければ REL が使われます。
<to>:範囲の終了位置です。fromと同じく相対か絶対で指定でき、たとえば当日は 0 になります。
<to_type>:終了位置の指定方法を REL か ABS で指定します(省略可能で、デフォルトは REL)。
<relation>:集計の対象となるテーブルを指定します。
省略も可能ですが、明示的に ALL(テーブル名) などを指定することで、フィルターの影響を除外できます。
<orderBy>:行をどの順序で並べて範囲を作るかを指定します。
一般的には Date 列などの時系列を基準にします。
<blanks>:空白値の扱い方を定義します。たとえば KEEP を指定すると、
並び替えに空白を含めたまま扱います。省略可能です。
<partitionBy>:計算をグループ単位で分けたい場合に使います
(例:「商品グループごとに移動平均を計算したい」といったケース)
この引数に列を指定することで、グループごとに独立した集計が可能になります。
WINDOW関数の使用方法については以上です。
ここでは実際にWINDOW関数を使用しますので、使用方法はそちらでもご理解いただけると思います。
それではWINDOW関数を使用して移動平均を計算してみましょう。
WINDOW関数を使って、移動平均を計算しよう。
WINDOW関数を使用して、①売上の移動平均、➁商品グループ毎の移動平均の計算を実行します。
今回はWINDOW関数の使用方法をわかりやすくするため、データと移動平均の計算は簡易的な内容となっております。
↓Date(日付)、商品グループ、商品ID、売上の列をもったテーブルを使用します。
以降、以下のテーブルは”Sales”と記載させていただきます。
①売上の移動平均
まず、売上の移動平均を算出します。今回使用する列は‘Date’と‘売上’です。
↓ゴールは表のとおり、‘Date’列と‘売上’列から移動平均を求めます。
例えば以下の赤枠の移動平均’1,800’を求めるためには ①(1,400)+➁(2,200)を行数で割ります。
では、実際にメジャーを作成して、2日間(前日+当日)の移動平均を求めてみましょう。
Power BI Desktop 上で「新しいメジャー」を作成し、以下の DAX を入力します。
移動平均 = CALCULATE(
AVERAGE(Sales[売上]),
WINDOW(
-1, REL, // from:前日
0, REL, // to:当日
ALL(Sales[Date]) // relation:全期間の Date に対して
)
)
この式は以下のような意味になります。
- AVERAGE(Sales[売上]):売上列の平均値を計算する
- WINDOW(-1, REL, 0, REL, …):現在の行から「前日〜当日」の範囲を定義(相対位置)
- ALL(Sales[Date]):フィルターコンテキストを除去して、全体の日付を対象にする
- 全体を CALCULATE() で囲むことで、「指定したウィンドウ範囲」に対して平均計算を実行
このように、WINDOW 関数を使えば、従来よりもシンプルな構文で移動平均を記述することができます。
作成した移動平均のメジャーを表で確認すると以下の表のとおり計算が実行されていることがわかります。
↓2023年4月2日の移動平均は1,800に対し、2023年4月1日~2日の平均値は1,800ですので、狙い通り計算できていますね。
➁商品グループ毎の移動平均
次は商品グループ毎の移動平均を計算していきましょう。
手順は①売上の移動平均と同じですが、商品グループ毎の情報が必要になりますので、 ‘商品グループ’の列の追加と計算への反映をしなければなりません。
↓ゴールは表のとおり、移動平均(’移動平均2’列)が商品グループ毎に算出します。
例えば以下の赤枠の移動平均’2,300’を求めるためには ①(2,200)+➁(2,400)を行数で割ります。
商品グループ毎の移動平均は以下の記述となります。①売上の移動平均で作成したメジャーと区別するため、メジャーの名称は“移動平均2”とさせていただきます。
以下が、商品グループごとの移動平均を求める DAX 式です:
移動平均2 = CALCULATE(
AVERAGE(Sales[売上]),
WINDOW(
-1, REL,
0, REL,
ALL(Sales[Date], Sales[商品グループ]),
ORDERBY(Sales[Date], ASC),
PARTITIONBY(Sales[商品グループ])
)
)
各商品グループごとに移動平均を算出するため、
PARTITIONBY を使用してグループ単位に範囲を分けています。
あわせて ORDERBY(Sales[Date], ASC) によって、日付順に処理が行われるよう並び順を指定しています。
ここでも、from=-1(前日)〜to=0(当日)の2日間を対象に、各商品グループ単位での移動平均が計算されます。
ALL(Sales[Date], Sales[商品グループ]) によってフィルターコンテキストを外し、
全体から正しく範囲を選べるようにしています。
↓作成した移動平均2のメジャーを表で確認すると以下の表のとおり計算が実行されていることがわかります。
商品グループ列の“A”、2023年4月4日の移動平均2が2,300に対し、2023年4月1日と2023年4月4日の平均が2,300となっていますね。狙い通り移動平均の算出ができています。
WINDOW関数を使用して、①売上の移動平均、➁商品グループ毎の移動平均の計算をしてみました。
今回は移動平均の算出にAVERAGE関数を使用しましたが、累積値などを求めたい場合には SUM など他の関数に置き換えて使うことも可能です。
また、from および to の引数も、目的に応じて範囲を変更することで、柔軟な集計設定が行えます。
Power BIではWINDOW関数を他の機能で代替することが可能ですが、複雑な処理が必要となります。今回のWINDOW関数の使用例からWINDOW関数は非常に簡単な記述で計算ができています。
Power BI の WINDOW 関数の活用ポイントまとめ
WINDOW 関数は、行の範囲を定義するだけで、累積集計・移動平均・トレンド分析などを
簡潔な記述で実行できる強力な関数です。
本記事では、以下の2つの実例を通じてその使い方を解説しました。
- 売上の移動平均(前日+当日)
- 商品グループごとの移動平均
WINDOW 関数では、範囲の開始・終了位置(from/to)、対象テーブルや列、
ソート順、グループ化(パーティション)といった要素を引数として指定するだけで、
これまで複雑だった集計処理もシンプルに実装可能です。
WINDOW 関数は、時系列分析やグループ別傾向の把握において、実務に直結する有用な関数です。
<Power BIハンズオンセミナー>
弊社ではPower BIをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら
<Power BIの導入支援>
弊社ではPower BIの導入支援を行っています。ぜひお気軽にお問い合わせください。
>>Power BIの導入支援の詳細はこちら
<PowerBIの入門書を発売中!>
弊社ではPower BIの導入から基本的な使い方・活用方法の基礎などをわかりやすく解説した書籍も販売しています。
>>目次も公開中!書籍の詳細はこちら