PowerBI/PowerPivot(以下、総称してDAXと呼びます)におけるコンテキスト(行コンテキスト、フィルターコンテキスト)のネストについて書きました。今回は、フィルターコンテキストを無視する方法(ALL関数の使い方)について少し書いてみます。
暗黙的なフィルターを意識する
次のようなメジャーを定義します。
[定価]列を評価し、1万円以上の定価を持つ商品数をカウントするメジャーです。
[1万円以上の商品数] =
COUNTROWS(
FILTER('商品',
[定価] > 10000
)
)
この場合、メジャーはフィルターコンテキストで評価されるため、スライサーなどの選択によって、値は変化します。また、それぞれの商品カテゴリ別に、商品数がカウントされていることが分かります。(これは暗黙的にカテゴリ別フィルターがかかっているという捉え方ができます)
ALL関数でフィルターコンテキストをクリアする
ここで、上記のメジャーを次のように変えてみます。
[1万円以上の商品数] =
COUNTROWS(
FILTER(ALL('商品'),
[定価] > 10000
)
)
最初の式と変わっている点は、ALL('商品')となっているところです。ALL関数は、すべてのフィルターをクリアし、引数として指定された表全体もしくは列全体を返します。ここでは「商品」テーブル全体をフィルターを削除したうえで返しています。その結果、[1万円以上の商品数]は全て20となりました。
さきほど「暗黙的にカテゴリ別フィルターがかかっている」と書きました。この暗黙的にかかっているフィルターがクリアされ、全商品を評価対象とした数値=20が各行に挿入されています。
このように、ALL関数は、コンテキストのネスト状況に関わらず、全てのフィルターをクリアします。この原理を理解しておくと、ALL関数を使いこなせるようになるはずです。ALL関数によって、常にテーブル全体を評価するため、例えば常に合計値を表示する列やセルを作りたい場合などに便利です。個別値のとの比較用の列を作ったりする際にも使えます。
また、これらの動作は、フィルターコンテキストと行コンテキストの動作原理が分かっていると、よりスムーズに理解できると思います。このあたりもぜひ習得しておくことをおすすめします。