Power BI Desktopのクイックメジャー
気象庁のサイトから取得した、札幌市の日毎平均気温を利用しました。
同サイトからCSVをダウンロードし、「Power BI Desktop」にインポートしました。
「フィールド」→「新しいクイックメジャー」を選びます。
「計算」から「移動平均」を選び、以下のように設定しました(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
ふと気になり、「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日までプロット)しているようです。
「平均気温(℃)が空白でない範囲飲み表示」と設定することで対処しました。