CALCULATEの第1引数をVARで定義する方法(DAX関数)
DAX関数に関する質問です。パワーピボットでの使用です。
以下の式に関して、質問2点ございます。
1.CALCULATE関数内の「AVERAGE('売上費用'[売上]」部分をVARにより冒頭で定義するには、どのようにすれば良いでしょうか。
2.DATESINPERIOD関数内の「'カレンダーテーブル'[日付]」部分をVARで定義するにはどうしたらよいでしょうか。
■式
売上平均:=
VAR MaxMonth = MAX('カレンダーテーブル'[月])
VAR MaxDate = MAX('カレンダーテーブル'[日付])
VAR Result =
SWITCH(
MaxMonth,
"3",CALCULATE(AVERAGE('売上費用'[売上]),DATESINPERIOD('カレンダーテーブル'[日付],MaxDate,-3,month)),
"6",CALCULATE(AVERAGE('売上費用'[売上]),DATESINPERIOD('カレンダーテーブル'[日付],MaxDate,-6,month)),
CALCULATE(AVERAGE('売上費用'[売上]),DATESINPERIOD('カレンダーテーブル'[日付],MaxDate,-9,month)))
Return Result
■1に関する補足
「VAR MaxDate = MAX('カレンダーテーブル'[日付])」の前に、
「VAR AverageSales = AVERAGE('売上費用'[売上])]」と記載し、CALCULATEの最初の引数をAverageSalesに置き換えてみましたが、求めたい平均の値にならず、クエリで取り込んだ月末の数値になります。
元データは毎月月末の日付で売上が入っています。
計算したいのは、月によって平均する期間(月数)を変更することです。本当は12か月分ありますが、試しで3月、6月、その他の月の3パターンでやっております。上記の式のままでしたら、意図する計算結果となります。
webで調べても分かりませんでした。
chatGPTで調べた結果は「全てのデータに対して平均値が計算され、期間毎にフィルタリングされた平均値が得られません。理由は、AVERAGE関数がVARの定義時点で全データに対して計算されるからです。」とのことでした。
それにも関わらず、例として下記の式は問題ないとの回答も出てきました。なぜ私の式は冒頭でVARで定義できないのか、分かりませんでした。
VAR totalSales = SUM(Sales[SalesAmount])
RETURN
CALCULATE(totalSales, 'Sales'[Year] = 2020)
■2に関する補足
DATESINPERIODの「'カレンダーテーブル'[日付]」も同様に試みたのですが、列しかしてできないとエラーが出てきませんでした。VARで定義することはできないでしょうか。
分かる方いらっしゃいましたら、教えていただけますでしょうか。
よろしくお願い申し上げます。