はじめに
ビジュアルのデータポイントを選択したときの、メジャーのフィルターコンテキストを見ていく➀の続きです。
続きですが、ここだけ読んでも問題ないと思います。(データモデルだけはここでは割愛しますので➀をご確認ください)
前回同様、今回もビジュアルクリック時のフィルターがメジャーにどのように働くかを図を書いて見ていきます。
ビジュアルのデータポイントを選ぶ
テーブル➀➁に表示させるメジャーを変えましたが、以下の説明には問題ないと思いますのでご了承ください。
ALL()関数のはたらき
「165~169㎝の身長の女性」をクリックしてみます。(↓図1)
クリックしても、テーブル➀赤く囲った集計結果は変わりません。
以下のようなDAX式によって集計されています。(↓図2)
ALL()関数を使うと、引数に指定したテーブルによる外部フィルターが外されます。
よって、日本語で書くと以下のように表現できます。(↓図3)
つまり、某グラフのどこをクリックしても集計結果は変わりません。
「男性の平均身長」「女性の平均身長」が集計され続けます。
ALLEXCEPT()関数のはたらき
次に、ALLEXCEPT()関数を使ったメジャーの集計結果を見てみます。(↓図4)
ここでは、'身長表'テーブルの[身長(ビン)]フィールドのフィルターだけを残し、それ以外の外部フィルターは外しています。
クリック時にフィルターとしてはたらくのは、ALLEXCEPTで指定した[身長(ビン)]だけです。
逆に、外された外部フィルターはgender[性別]フィールドですが、
メジャーのDAX式の中で gender[性別Key] = 1
とフィルター指定されていますので、「165~169㎝の男性の平均身長」が集計されます。
試しに、データポイントで男性も選んでも、同様の結果になります。(↓図5)
ALLSELECTED()関数のはたらき
最後に、ALLSELECTED()関数を使ったメジャーの集計結果を見てみます。(↓図6)
ここでは、'身長表'テーブルの[身長(ビン)]フィールドのフィルターだけを外し、それ以外の外部フィルターは残しています。
クリック時にフィルターとしてはたらかないのは、ALLSELECTEDで指定した[身長(ビン)]だけです。
逆に、残された外部フィルターはgender[性別]フィールドですから、
メジャーのDAX式の中で gender[性別Key] = 1
とフィルター指定されていますので、「男性であり女性である人の平均身長」が集計されます。
集計結果が空白ということは、そんな人はいないというわけです。
では、データポイントを男性にしてクリックし直すと、以下のようになります。(↓図7)
順当に考えると、「男性の平均身長」が出るはずですが…。結果は違いますね。[身長(ビン)]のフィルターがはたらいているように思えます。
外部フィルターがはたらかない、別のテーブルに落とし込んでみます。(↓図8)
ALL列、ALLEXCEPT列、ALLSELECTED列は、それぞれ上記で使ったメジャー(男性の平均身長の類)をいれています。
外部フィルターがはたらかないところでは、「男性の平均身長」を集計しています。
つまり、外部フィルターがはたらくところでは、それが適用される、というわけです。(↓図9)
よって先ほどの図6の解説「男性であり女性である人の平均身長」、
正しくは「男性であり女性であり165~169㎝の人の平均身長」(そんな人はいませんので変わらず空白ですが)といえます。
おわりに
➀から含め、自分なりに外部フィルターの影響をシンプルなメジャーを使ってひも解いてみました。
解釈に間違い等あれば、ご指摘お願いします。
CALCULATE内のフィルターを含めると、フィルターコンテキストへの理解は十分ではありませんが、今後も引き続き勉強していきます。