TableauのLOD計算のような計算をPower BIでできないかと思い、調べてみたところ、DAXのALLEXCEPT関数を利用することできました。
データ
以下のような表形式データがあったとして、areaの平均amountと各レコードのamountの比を求めてチャート上に出力したい場合に、TableauであればLOD計算が利用できると思います。
今回は上の表のデータを例にareaごとの平均amountを算出してみます。
ALLEXCEPT関数
DAXのALLEXCEPT関数を利用することで実現できました。
Microsoft社のドキュメントの説明文を画像で引用します。
パラメーター”列”に「コンテキストフィルターに保持する必要がある列」を追加しておくため、TableauであればFIXEDに指定する列と同じ列を追加することで、同様の動きが実現できます。
Power BIでの実装
Power BI Desktopで前出のデータ(test.csvに保存)を読み込み、以下のとおり、area_avg_amountというメジャーを追加しました。ALLEXCEPT関数でエリアを除くすべてのフィルターを排除したテーブルを作り、CALCULATE関数でそのテーブルから平均amountを計算というような動作のようです。
テーブルに表示してみると、area_avg_amountにはareaごとのamountの平均値が出力されています。
実施したいことはできました。