見出し画像

Power BI - メジャーの式の中で変数を設定する方法(VARとRETURN)

メジャーを作成していると、

「メジャーの式の中で参照している特定の部分だけ変数にしたい」と
思うことがあると思います。

別の記事(DAXで移動平均を計算する)にさらっとDAX式を書いていたのですが、
暫く使わないと、一瞬「どうやって書くんだったっけ?」となるので、
備忘のために変数の定義方法についてのみ、ここに書くことにしました。


具体例1:DAX関数の引数となる「数値」を可変にしたいとき

例えば、12カ月平均の売上高を計算するメジャー(Measure)を作って、

Measure = DIVIDE ( SUM ( 'Sales'[Amount]) ,12 )

棒グラフに適用した後に、

画像1

「ドリルダウンして四半期平均を見たいときもあるので、
”12”(月数)という固定値で式を作るのではなく、
分母となる月数は、変数として設定しておきたい」
と思うことがあります。

この場合は、'VAR' と 'RETURN' を式中に入れて、"12"の部分を変数化できます。
(※ちなみに、実務上は変数にHard Number(固定値)を充てることはないと思います。SELECTEDVALUE()関数等でスライサーと連動させるのが一般的だと思います)

Measure2 =
VAR denominator = 12  //← ココ!
RETURN DIVIDE ( SUM ( financials[ Sales] ), denominator )

最初はこんなポイントに違和感を持つかもしれないですが、それでいいんです。
1.「=」の後ろにすぐ、VAR(変数の宣言)を書く
2.「VAR」で変数を宣言した後は、特に「, (カンマ)」などを入れず、RETURN(結果の書き始め)と書いて、続けて式を書く

要するに、変数を宣言したいときは
イコール(=)の後ろに、VAR~RETURNをサンドイッチする!
と覚えておけば位と思います。

変数を設定するときのDAX式の中身イメージ

※ みどりの部分:変数がない場合のメジャーの構成要素
※ あおの部分:変数を設定した場合に、追加されるメジャーの構成要素


具体例2:数値ではなく、「文字列」を変数として使用したいとき

例えば、こんなデータテーブルを扱ってレポートを作るケースで、

画像3

きいろの列(Segment、Country、Product、Discount Band)で、
どんどんフィルターされていって、
ピンクの列(Sales)の集計値を確認されるとします。

集計対象のデータが絞り込まれていくイメージはこんな感じです。

画像4

ここまでスライサーを見やすくしていたら、
あえて、「現在の絞り込み条件」を表示する必要はないのですが、、
実務上はもっと絞り込み項目自体が多くて、
複雑になってくる場合もあるので、
一旦このまま説明を続けます・・

やりたいことのイメージは、
みどり色の点線部分に「現在選択中の項目」を出力することです。

画像5

スライサーでは、Segment、Country、Product、Discount Bandの4つの列を使用しているので、4つのメジャーを作成します。

Measure_Segment = 
VAR selectedSegment = SELECTEDVALUE(financials[Segment]) 
RETURN "Segment: "& 
        IF(ISBLANK(selectedSegment), 
                "All Segment", 
                selectedSegment)

Measure_Country = 
VAR selectedCountry = SELECTEDVALUE(financials[Country]) 
RETURN "Country: "& 
        IF(ISBLANK(selectedCountry), 
        "All Coiuntry", 
        selectedCountry)

Measure_Product = 
VAR selectedProduct = SELECTEDVALUE(financials[Product]) 
RETURN "Product: "& 
        IF(ISBLANK(selectedProduct), 
        "All Product", 
        selectedProduct)

Measure_DiscountBand = 
VAR selectedDiscountBand = SELECTEDVALUE(financials[Discount Band]) 
RETURN "Discount Band: "& 
        IF(ISBLANK(selectedDiscountBand), 
        "All Discount Band", 
        selectedDiscountBand)

メジャーを作成したら、
レポート画面右の視覚化>「テーブル」を挿入して、
そこに作成したメジャーを入れていきます。

画像6

これで、現在適用しているフィルターが、
メジャーを通じて一覧で表示されるようになりました。


追記: 複数個の変数を設定したいとき

1つのメジャーの中に、複数の変数を設定したい場合は、

変数を設定するごとに、「VAR」を書けば、複数個の変数を設定できます
(「,(カンマ)」で区切ったりするのではない点に留意です)

この記事が気に入ったらサポートをしてみませんか?