DAXのCALCULATEを図解|フィルターが変わる仕組みを理解する

DAXのCALCULATEを図解|フィルターが変わる仕組みを理解するの記事アイキャッチ ビジネススキル

CALCULATEはDAXの中心的な関数ですが、『条件付きSUMのようなもの』と覚えるだけでは応用できません。CALCULATEは、現在のフィルターコンテキストを変更し、その新しい条件で式を評価します。商品色を青へ限定する、地域フィルターを外して全体比を作る、現在期間を前年へ移す処理も同じ考え方です。この記事では、追加・上書き・削除の3つの動きと、つまずきやすいコンテキスト遷移まで図解します。

この記事でできるようになること

  • フィルターコンテキストとCALCULATEの役割を説明できる
  • フィルターの追加・上書き・削除を式で使い分けられる
  • KEEPFILTERS、REMOVEFILTERS、行コンテキスト遷移を検算できる
  1. 先に結論:CALCULATEは計算式より先に評価環境を作り替える
  2. フィルターコンテキストとは何か
    1. ピボットのセルごとに条件がある
    2. 基本メジャーを小さく作る
  3. CALCULATEを理解する6ステップ
    1. 手順1:第1引数の式を単独で検算する
    2. 手順2:セルのフィルターコンテキストを把握する
    3. 手順3:どの列のフィルターを変えるか決める
    4. 手順4:ブールフィルターの結果を確認する
    5. 手順5:REMOVEFILTERSとKEEPFILTERSを使い分ける
    6. 手順6:総計・明細・スライサーで検算する
  4. CALCULATEの基本パターン
    1. 色を青へ上書きする
    2. 色フィルターを削除して全体比を作る
    3. 既存条件との交差を保つ
  5. CALCULATEを検算する方法
  6. CALCULATEでつまずく原因
    1. フィルターが追加ではなく置き換わる
    2. ALLでフィルターを消しすぎる
    3. FILTERを多用して式が読めない
    4. 計算列で値が固定される
  7. CALCULATEとFILTERの役割を分ける
  8. 実務で継続運用するためのポイント
    1. メジャー名と表示形式を統一する
    2. 検算用ピボットテーブルを残す
    3. 定義とモデル変更を記録する
  9. よくある質問
      1. CALCULATEを日本語で一言にすると?
      2. CALCULATEをフィルターなしで使う意味は?
      3. ALLとREMOVEFILTERSはどちらを使いますか?
  10. UdemyでDAX・Power Pivotをさらに学びたい方へ
    1. 1.Microsoft Excel – Power Pivot, Power Query, DAX 入門講座
    2. 2.3時間でDAXの基礎を徹底解説 Power BIでのレポート作成のレベルをあげる!
    3. 3.【Power Pivot】大量データを瞬時に集計・分析!DAX関数&ダッシュボード作成実践講座
  11. まとめ:現在条件・変更列・再評価の順に読む

先に結論:CALCULATEは計算式より先に評価環境を作り替える

CALCULATE([売上], '商品'[色] = "青")は、現在のセルへ『色=青』という条件を適用し、その環境で[売上]を再評価します。主役はSUMではなく、フィルターの変更です。

同じ列に既存フィルターがあれば、通常は新しい条件で上書きされます。KEEPFILTERSで交差させたり、REMOVEFILTERSで特定フィルターを削除したりできます。

現在のセルとCALCULATE後で、残る条件を比較してください。

DAXのCALCULATEが年と地域の条件を残し商品色のフィルターだけを赤から青へ変更する図
図1: CALCULATEが対象列のフィルターを変更して式を再評価する

指定していない年・地域のフィルターは残ります。『すべての条件を消してから青を計算する』わけではない点が重要です。

覚え方

CALCULATEは『式を、変更後のフィルターコンテキストで評価する』関数です。まず現在の条件を書き出し、どの列を追加・上書き・削除するかを考えます。

フィルターコンテキストとは何か

ピボットのセルごとに条件がある

ピボットテーブルで行に地域、列に年を置くと、各セルは『東日本かつ2026年』のような条件を持ちます。スライサー、レポートフィルター、行・列見出し、関係を通じた条件が組み合わさります。

メジャーはセルごとにその条件で再評価されます。[売上]という同じ式でも、東日本のセル、2026年のセル、総計セルでは対象行が違います。

CALCULATEはこの現在条件を受け取り、一部を変えてから式を評価します。現在条件を意識せず式だけ読むと、同じ式が場所によって違う値を返す理由を説明できません。

フィルターの動き 代表例 結果
追加 色=青が未選択 青条件を加える
上書き 色=赤のセルで色=青 青へ置き換える
保持・交差 KEEPFILTERS(色=青) 既存条件との共通部分
削除 REMOVEFILTERS(色) 色に関係ない合計

基本メジャーを小さく作る

まず[売上]、[数量]、[粗利]などの基本メジャーを作り、CALCULATEの第1引数から参照します。長い集計式と複雑なフィルターを同時に書くと、原因を切り分けにくくなります。

商品、日付、地域などのディメンションテーブルからフィルターするのが基本です。ファクト表の属性を直接使う場合と結果が異なることがあるため、モデルの関係を確認します。

CALCULATEの前後で、データを絞る条件がどの順に届くかを追います。

ピボットやスライサーの現在フィルターをDAXのCALCULATEが変更し関係を通じて売上明細を絞り直す流れ
図2: 現在フィルターをCALCULATEが変更して明細を絞り式を再評価する

CALCULATEが直接データを書き換えるわけではありません。対象行を決めるフィルター環境を変え、その環境でメジャーを計算し直します。

CALCULATEを理解する6ステップ

式を読む順番を、現在条件から結果までに分けます。

DAXのCALCULATEが現在フィルターを受け取り対象列の条件を変更し関係を通じて売上を再評価する図
図3: 現在のフィルターを確認し、変更条件を適用して式を再評価する

実際の内部評価にはさらに細かな規則がありますが、まず『現在条件→変更→再評価』の3段階で読むと、多くのメジャーを説明できます。

手順1:第1引数の式を単独で検算する

CALCULATEへ渡す[売上]をピボットへ置き、現在の行・列で正しい値か確認します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

基本式が誤っているとフィルターを直しても結果は合いません。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

総計と代表セルを元データへ照合します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順2:セルのフィルターコンテキストを把握する

年、月、商品、地域、スライサーなど、現在セルへ適用される条件を書き出します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

CALCULATEが何を変えるかは、変更前の状態によって決まります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

総計セルと明細セルで条件がどう違うか確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順3:どの列のフィルターを変えるか決める

色、カテゴリ、年など、式のフィルター引数が参照する列を特定します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

同じ列の既存フィルターは通常上書きされ、別列の条件は残ります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

意図せずテーブル全体をフィルターしていないか確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順4:ブールフィルターの結果を確認する

'商品'[色] = "青"など、単一テーブル列の条件を適用します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

簡単な条件はFILTERより直接指定した方が意図と処理が分かりやすい場合があります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

赤を選んだセル、色未選択セル、総計で値を比較します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順5:REMOVEFILTERSとKEEPFILTERSを使い分ける

全体比では対象列のフィルターを削除し、既存条件と交差させたい場合はKEEPFILTERSを使います。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

上書き、交差、削除ではビジネス上の意味が異なります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

スライサー選択時の分母や共通部分が期待どおりか確認します。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

手順6:総計・明細・スライサーで検算する

同じメジャーを色別、地域別、年別、総計へ置き、各フィルター状態で結果を比較します。 ここで大切なのは、画面上で一度だけ正しい結果を作ることではなく、翌月の更新でも同じ条件が再現されるように、操作を適用したステップとして残すことです。

1つのセルだけでは偶然正しく見えることがあります。 Power Queryは上から順に処理を実行するため、列名やデータ型を整える位置が後続処理の安定性を左右します。目的が分かるステップ名へ変更しておくと、引き継ぎ時にも判断しやすくなります。

最低でも既存フィルターなし、同列の別値、別列フィルターありをテストします。 更新後はプレビューの数行だけで判断せず、行数、null件数、合計値など、変換前に決めた基準と照合してください。

CALCULATEの基本パターン

売上メジャーを再利用し、フィルター変更だけを式へ表します。

色を青へ上書きする

現在の色選択にかかわらず青色商品の売上を返す基本例です。

青色売上 :=
CALCULATE (
    [売上],
    '商品'[色] = "青"
)

年や地域のフィルターは残り、商品[色]のフィルターが青へ変わります。色=赤のセルでも青色売上を返す点を確認します。

色フィルターを削除して全体比を作る

現在売上を、色に関係しない同じ年・地域の売上で割ります。

色構成比 :=
DIVIDE (
    [売上],
    CALCULATE (
        [売上],
        REMOVEFILTERS ( '商品'[色] )
    )
)

商品テーブル全体ではなく色列だけを解除するため、カテゴリなど別列のフィルターを維持できます。分母の範囲を意図に合わせます。

既存条件との交差を保つ

既存の色フィルターへ青条件を交差させます。

青色売上_交差 :=
CALCULATE (
    [売上],
    KEEPFILTERS ( '商品'[色] = "青" )
)

色=赤のセルでは赤と青の共通部分がないため空白になります。上書きとの違いを比較するとKEEPFILTERSを理解しやすくなります。

現在の色 通常の青条件 KEEPFILTERSの青条件
未選択 青売上 青売上
青売上 青売上
青売上 空白

同じ色列への条件でも、上書き・交差・削除で残る行が変わります。

DAXのCALCULATEでフィルターを上書き、KEEPFILTERSで交差、REMOVEFILTERSで削除するデータの動き
図4: CALCULATEの上書き・交差・削除と維持される別列条件

関数名の違いは構文上の差ではなく、最終的に残る売上行の集合の差として確認します。

CALCULATEを検算する方法

検算用ピボットへ[売上]と変更後メジャーを並べ、対象列を行へ置きます。色別なら赤、青、総計の3行で比較し、上書きと交差の違いを見ます。

フィルター削除では、削除した列だけが分母から外れているかを確認します。カテゴリや年まで外れていないか、スライサーを切り替えて比較します。

式の結果を6つの観点で確認します。

DAXのCALCULATEで基本メジャーと現在フィルター、変更対象列、上書き、フィルター削除、総計セルを検算する図
図5: CALCULATEの基本式、現在条件、対象列、上書き、削除、総計を確認する

総計は表示行を足し上げるとは限らず、総計のフィルターコンテキストで式が再評価されます。各セルの条件を説明できるかが検算の中心です。

DAX Studioなどの外部ツールを使わなくても、小さなピボットテーブルで条件を1つずつ追加すれば多くの問題を切り分けられます。複雑な式ほど検算用メジャーを分けます。

CALCULATEでつまずく原因

フィルターが追加ではなく置き換わる

赤色を選んでいるのに青色売上が表示されます。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

同じ色列へのブールフィルターは既存条件を通常上書きします。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

交差が目的ならKEEPFILTERSで包みます。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

未選択、青、赤の3状態を比較します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

ALLでフィルターを消しすぎる

色構成比の分母が商品カテゴリや他の条件まで無視します。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

列ではなく商品テーブル全体へALLやREMOVEFILTERSを使っています。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

解除したい列だけを指定します。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

カテゴリスライサーを変えて分母が変化するか確認します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

FILTERを多用して式が読めない

単純な等価条件でも長いFILTER式になり、意図が分かりません。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

ブールフィルターで書ける条件をテーブルフィルターにしています。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

単一列の簡単な条件は直接指定し、複雑な行条件だけFILTERを使います。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

変更前後で同じ結果になる代表条件を照合します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

計算列で値が固定される

ピボットの選択を変えても期待した動的結果になりません。 この状態で更新を続けると、見た目は完成していても集計軸が分裂したり、明細が欠落したりするため、結果だけを手直ししてはいけません。

メジャーではなく計算列へCALCULATEを書いています。 原因を特定するときは、エラーが見えた最終ステップから戻るのではなく、値が初めて想定外になったステップを探します。

分析結果はメジャーで作り、計算列は行ごとの固定属性に限定します。 修正ルールは元データを直接書き換えるのではなく、クエリの変換または管理可能なマスター表として残します。

スライサー変更でメジャーが再評価されることを確認します。 修正後は正常行だけでなく、例外行が0件になったか、または意図した監査表へ分離されたかまで確認します。

ディメンションからファクトへ条件が流れる基本形です。

商品スライサーの選択が商品テーブルから商品番号の関係を通じて売上明細とメジャーへ伝わる図
図6: 商品スライサーの条件がリレーションを通じて売上メジャーへ伝わる

CALCULATEで商品テーブルを絞ると、その条件は関係を通じて売上へ伝わります。関係の向きや非アクティブ状態も結果を左右します。

CALCULATEとFILTERの役割を分ける

CALCULATEはフィルターコンテキストを変更して式を評価します。FILTERは条件に合う行だけのテーブルを返します。複雑な条件テーブルが必要なときにFILTERをCALCULATEの引数として使います。

単純な列=値はCALCULATEへ直接書くと、どの列を上書きするか読みやすくなります。複数列やメジャー条件、上位条件などではFILTERが必要になる場合があります。

目的 書き方 ポイント
単一列の等価条件 CALCULATE([売上], 色=”青”) 意図が明確
複雑な行条件 CALCULATE([売上], FILTER(…)) 対象テーブルを意識
既存条件と交差 KEEPFILTERS 上書きしない
条件を削除 REMOVEFILTERS 列範囲を限定

フィルター引数を増やすと通常ANDで組み合わされます。OR条件や別テーブルをまたぐ条件は、データモデルの設計やFILTERするテーブルの粒度を確認します。

実務で継続運用するためのポイント

メジャー名と表示形式を統一する

DAXメジャーには、値の定義が分かる名前と表示形式を設定します。金額、数量、率、指数を区別し、同じ『前年比』でも差額、成長率、前年を100とした指数のどれかを名称から判断できるようにします。

基本メジャー、期間比較、比率、表示用メジャーをフォルダーまたは命名規則で整理します。式の中へ同じ集計を繰り返さず、検算済みの基本メジャーを参照すると、定義変更の影響範囲を小さくできます。

検算用ピボットテーブルを残す

完成ダッシュボードとは別に、日付、商品、地域などを自由に置ける小さな検算用ピボットを残します。基本値と派生値を同時に表示し、総計、代表明細、フィルターなし、単一選択の状態を比較します。

メジャーが正しく見える1つのセルだけを確認せず、境界日、空白、0、未一致、複数選択などの条件をテストします。DAXはセルのフィルターコンテキストで再評価されるため、テストケースを変えることが式の品質確認になります。

定義とモデル変更を記録する

メジャーの目的、分子、分母、対象期間、空白時の扱い、参照テーブルを一覧にします。リレーション、日付テーブル、列名を変更した場合は、関係するメジャーとピボットの検算結果を記録します。

数値の定義は式だけでは伝わりません。利用者が同じ言葉を別の意味で使わないよう、レポート上の注記とメジャー定義をそろえ、変更後は主要数値を確定済みレポートへ照合します。

よくある質問

CALCULATEを日本語で一言にすると?

『フィルター条件を変更して式を計算し直す関数』です。単なる条件付き合計ではなく、任意のメジャーや式を再評価できます。

CALCULATEをフィルターなしで使う意味は?

行コンテキストをフィルターコンテキストへ移すコンテキスト遷移に使われます。計算列や反復子内で必要になる場合がありますが、メジャー参照では自動的に起こる場面もあります。

ALLとREMOVEFILTERSはどちらを使いますか?

フィルター削除の意図だけなら、使用環境でサポートされる場合はREMOVEFILTERSが読みやすいです。ALLはテーブルを返す関数としても働くため、式全体の目的で選びます。

UdemyでDAX・Power Pivotをさらに学びたい方へ

CALCULATEはDAXの中心となる関数です。フィルターコンテキストの変化をサンプルレポートで繰り返し確認すると理解が安定します。

記事の内容を動画と演習で復習したい方へ、関連性の高いUdemy講座を3つ選びました。

1.Microsoft Excel – Power Pivot, Power Query, DAX 入門講座

こんな方におすすめ

ExcelでPower Query、Power Pivot、DAXがどう連携するのかを、レポート作成の流れに沿って学びたい方に向いています。

2.3時間でDAXの基礎を徹底解説 Power BIでのレポート作成のレベルをあげる!

こんな方におすすめ

CALCULATE、前年比、累計、SUMXなど、この記事群で扱うDAXの考え方と基本関数を集中して学びたい方に向いています。

3.【Power Pivot】大量データを瞬時に集計・分析!DAX関数&ダッシュボード作成実践講座

こんな方におすすめ

Excel Power PivotでデータモデルとDAXを組み合わせ、実務の集計やダッシュボード作成まで進みたい方に向いています。

Udemyは動画の再生速度を調整でき、必要な箇所を繰り返し確認できます。価格は講座やセール時期によって変わるため、申込み前に講座ページの内容、対応環境、最新価格をご確認ください。

※本記事にはアフィリエイトリンクが含まれます。リンク経由で申込みがあった場合、運営者に報酬が発生することがあります。

まとめ:現在条件・変更列・再評価の順に読む

CALCULATEは、現在のフィルターコンテキストを受け取り、指定した条件を追加・上書き・削除して、第1引数の式を再評価します。

基本メジャーを小さく作り、現在セルの条件と変更対象列を書き出すと、上書き・KEEPFILTERS・REMOVEFILTERSの違いを説明できます。

総計、同じ列の別値、別列スライサーを使って検算し、分母やフィルター解除の範囲が業務上の問いと一致することを確認してください。

ビジネススキルの人気オンラインコース

コメント

タイトルとURLをコピーしました