Power BIでDAXを学び始めると、多くの人が最初にぶつかるのが「フィルター評価」と「行評価」です。
SUM関数やCALCULATE関数、SUMX関数などの動きを理解するためには、この2つの考え方を避けて通ることはできません。
実際に、
- なぜCALCULATEで結果が変わるのか
- なぜSUMXで正しい結果が計算できるのか
- なぜ同じDAX式でも想定外の値になるのか
といった疑問の多くは、フィルター評価と行評価を理解することで解決できます。
この記事では実際のサンプルデータを使いながら、
✅ フィルター評価(Filter Context)
✅ 行評価(Row Context)
✅ CALCULATEによるルール変更
✅ SUMXが行単位で計算できる理由
について、初心者にも分かりやすく解説します。
目次
この記事で分かること
✓ フィルター評価とは何か
✓ 行評価とは何か
✓ フィルター評価と行評価の違い
✓ CALCULATE関数で何が変わるのか
✓ SUMX関数が必要になる理由
✓ DAXでよくある計算ミスの原因
フィルター評価
Power BIのレポート画面では常にフィルター評価の影響を受けます
この点は常に意識しておく必要があります
例えば、次のようなデータがあったとします

こちらのデータをマトリックスで表示すると次のようになります

こちらのマトリックスの行にカラーを入れてみます

こちらは行単位で青、赤、緑のフィルターが適用されています

上の画像では、スライサーのフィルターが適用されています
このように、レポート画面ではフィルターの影響を常に受けるわけですが、DAXも同様です
但し、CALCULATEをDAX式で活用するとルールが変わります
試しに、青色の金額を抽出するCALCULATE関数でメジャーを書いてみます
Color_BLUE = CALCULATE(SUM(myTable[金額]),’myTable'[カラー]=”青”)

スライサーのフィルターを解除した上で、上記のメジャーをマトリックスに配置してみます

マトリックスの行単位での色別のフィルターは解除され、全て同じ値/6,600になっています
今度は、スライサーのフィルターを適用してみます

DAX外のフィルターはきちんと適用されているのが分かります
今度はメジャーにKEEPFILTERS関数を適用してみます

今度は、行単位での色別のフィルターが適用されています
以上、レポート画面では常にフィルターの影響を受ける点とCALCULATE関数を使うとルールが変わる点は常に意識しておきましょう!
行評価
フィルター評価と同じくらい重要で、フィルター評価より難解なのが行評価です
こちらは、明確にフィルター評価と区別して理解しましょう
例えば、次のようなデータがあるとします

こちらのデータから、行毎に値1と値2を乗算する列を作成してみます

次に値1x値2の列を合計する列を作成します

では上の画像と同じ「55」を算出するメジャーを、新しく作成した列をつかわないまま作成するにはどうしたらいいでしょう?
次のように式を書くと、突拍子もない数字になります

これはSUM関数が列自体を計算対象にしているからです
では、ここでSUMX関数を使用してみましょう!

expressionの箇所が「行評価」になっています

SUMX関数を使うと、テーブル「myNum」の1行1行を計算して合計するので正しい数字が出ています
これが行評価となります
行評価では、新しい列の作成と同じように1行1行を対象とするので、フィルター評価とは明確に区別する必要があります
ちなみにCALCULATE関数を使用すると、フィルター評価と同じようにルールが変わります

今回は、隣の列全体を合計するのではなく、1行1行の合計値を算出しています
このCALCULATE関数を使うとルールが変わる点は常に頭に入れておきましょう!










コメントを残す