移動平均

Power BI Desktopのクイックメジャー

気象庁のサイトから取得した、札幌市の日毎平均気温を利用しました。
同サイトからCSVをダウンロードし、「Power BI Desktop」にインポートしました。

気象庁のサイトから取得したデータを元に作成。札幌市の平均気気温。Power BI Desktopを使用
2021年10月22日から2022年10月22日までのデータを取得。グラフでは2022年1月付近から表示

フィールド」→「新しいクイックメジャー」を選びます。

「新しいクイックメジャー」を選択

計算」から「移動平均」を選び、以下のように設定しました(7日間移動平均の例)。

移動平均のクイックメジャーを設定

移動平均のグラフを重ねました。

平均気温と7日間移動平均のグラフ

移動平均のDAX(Data Analysis Expressions)

新しいクイックメジャー」を実行すると、DAXが生成されます。

平均気温(℃) 移動平均 2 = 
IF(
	ISFILTERED('sapporo_temp_data'[年月日]),
	ERROR("タイム インテリジェンスのクイック メジャーは、Power BI が指定する日付階層またはプライマリの日付列でのみグループ化またはフィルターできます。"),
	VAR __LAST_DATE = LASTDATE('sapporo_temp_data'[年月日].[Date])
	RETURN
		AVERAGEX(
			DATESBETWEEN(
				'sapporo_temp_data'[年月日].[Date],
				DATEADD(__LAST_DATE, -6, DAY),
				__LAST_DATE
			),
			CALCULATE(SUM('sapporo_temp_data'[平均気温(℃)]))
		)
)

DATEADD(__LAST_DATE, -6, DAY)」が集計範囲の中で一番新しい日付と、その後ろの「6日間」を意味します。
「-6」を変更することで移動平均の期間を変更できます。

DAX改

DATESBETWEEN」は紙指定した期間のテーブルを返します。

DATESBETWEEN(<dates>, <start_date>, <end_date>)
DATESBETWEEN 関数 (DAX) - DAX
詳細については、以下をご覧ください。DATESBETWEEN

同様の機能を持つ「DATESINPERIOD」に置き換えてみました。

DATESINPERIOD(<dates>, <start_date>, <number_of_intervals>, <interval>)

「end_date」を指定せず、期間は「7」とします。

平均気温(℃) 移動平均 2a = 
IF(
	ISFILTERED('sapporo_temp_data'[年月日]),
	ERROR("タイム インテリジェンスのクイック メジャーは、Power BI が指定する日付階層またはプライマリの日付列でのみグループ化またはフィルターできます。"),
	VAR __LAST_DATE = LASTDATE('sapporo_temp_data'[年月日].[Date])
	RETURN
		AVERAGEX(
			DATESINPERIOD(
				'sapporo_temp_data'[年月日].[Date],
				__LAST_DATE, -7, DAY	
			),
			CALCULATE(SUM('sapporo_temp_data'[平均気温(℃)]))
		)
)
DATESINPERIOD 関数 (DAX) - DAX
詳細については、以下をご覧ください。DATESINPERIOD
「DATESBETWEEN」を使用した移動平均グラフ(上)と「DATESINPERIOD」を使ったグラフ(下)

ふと気になり、「CALCULATE」関数を先頭にした場合を試してみました。
(実際にはうまくいかず、何度もトライ&エラーを繰り返しています)

平均気温(℃) 移動平均 2c = 
	VAR __LAST_DATE = LASTDATE('sapporo_temp_data'[年月日].[Date])
	RETURN
		CALCULATE(DIVIDE(SUM('sapporo_temp_data'[平均気温(℃)]), 7),
			DATESBETWEEN(
				'sapporo_temp_data'[年月日].[Date],
				DATEADD(LASTDATE('sapporo_temp_data'[年月日].[Date]), -6, DAY),
				__LAST_DATE
			)
		)

「7日間の合計値を7で割る」という式に対し、「DATESBETWEEN」を使いフィルターをかけました。

CALCULATE 関数 (DAX) - DAX
詳細については、以下をご覧ください。CALCULATE

表示期間調整

今回使った式では、未来の日付分まで集計されていました。
10月22日が最新の日付の場合、その日を開始日とした7日間移動平均まで計算(10月28日までプロット)しているようです。
平均気温(℃)が空白でない範囲飲み表示」と設定することで対処しました。

最新日付の先まで集計(濃い色のグラフ)
「フィルター」で「平均気温(℃)」が「空白でない範囲を表示」と設定
「フィルターを適用」すると未来分が非表示になる
タイトルとURLをコピーしました