ブログ

Power BIのフィルター設定とは CALCULATE関数の使い方と注意点を分かりやすく解説

#Power BI #使い方 #注意点 #フィルター #CALCULATE関数

積極採用中
セミナー情報

Power BIでDAXを使い始めると、CALCULATEという関数を目にする機会がとても多くなります。便利な関数である一方で、「思った値が出ない」「スライサーが効かない」といった疑問を感じたことがある方も多いのではないでしょうか。

例えば、

  • 「CALCULATEを使ったらスライサーが反映されなくなった」
  • 「集計結果が合わない理由が分からない」

といったケースはDAXを学び始めた人がよくつまずくポイントです。その原因は、CALCULATEが「コンテキスト(文脈)」を操作する特別な関数だからです。仕組みを理解しないまま使うと、外部のフィルターを上書きしてしまい、意図しない結果になることがあります。

本記事では、CALCULATEの基本的な考え方と注意点を整理し、初心者でも混乱しにくい使い方を解説していきます。
読み終わるころには「なぜその値になるのか」を理解し、安心してCALCULATEを使えるようになるはずです。

CALCULATE関数の概要


CALCULATE関数は、DAXの中でも特に使用頻度が高く、集計結果を大きく左右する重要な関数です。
まずはCALCULATEがどのような役割を持つのか、基本的な考え方を整理します。

基本構文

CALCULATE関数は、DAXの中でも特に重要な関数であり、「コンテキストを操作できる唯一の関数」といわれます。
基本構文は以下のとおりです。

  • :評価したい計算式(例:SUM、COUNTなど)
  • :適用するフィルター条件。1つ以上指定可能

役割はシンプルで、「計算式を評価し、指定したフィルターを適用する」 ことにあります。

典型的な利用例

  • 特定商品だけの売上を集計する
  • 特定期間だけの合計を算出する

例えば、Power BI公式サンプルデータ「Sales」を使って、商品が「A」の売上を計算する場合は以下のように記述できます。

このメジャーをテーブルビジュアルに配置すると、「Product=A」(エスプレッソ)の売上だけを集計して表示することができます。

CALCULATEは、単に条件を追加するのではなく、既存のフィルターコンテキストを上書きするのが特徴です。そのため、スライサーなどの外部フィルターが無視される場合があり、これが初心者や中級者にとって大きなつまずきとなります。

Power BIにおけるコンテキストとCALCULATE関数の関係


CALCULATEを理解するには、「コンテキスト(文脈)」の仕組みを避けて通れません。
ここでは、Power BIで計算結果が決まる背景とCALCULATEの関係を解説します。

コンテキストの種類

Power BIにおける計算結果は、コンテキスト(文脈) によって変わります。
CALCULATEを正しく理解するためには、まずこのコンテキストの違いを押さえておく必要があります。

行コンテキスト

各行に対して評価される文脈です。
例えば、以下のようにSUMXで1行ずつ計算する場合に適用されます。

このとき、Sales[Quantity] や Sales[UnitPrice] は「その行の値」として評価されます。

フィルターコンテキスト

ビジュアルのスライサーやページレベルフィルターなど、外部から与えられる条件の文脈です。
例えば「Product=Aだけを表示する」という条件は次のように書けます。

この場合、Product=A がフィルターコンテキストとして作用し、「Aの売上」だけが返ります。

CALCULATEがコンテキストに与える影響

CALCULATE関数は、指定したフィルターを既存のフィルターコンテキストに追加または上書きします。
この挙動により、以下のような現象が起こります。

  • 外部で指定したスライサーやフィルターが無視される
  • 新しいフィルターによって、元々のコンテキストが完全に置き換わる

その結果、「スライサーでBを選んでいるのに、CALCULATEでAを指定したためAの値(エスプレッソ)が返る」といったケースが発生します。

コンテキスト変換の注意点

さらにCALCULATEの内部では「行コンテキストがフィルターコンテキストに変換される」という仕組みがあります。この仕組みは初心者・中級者が特につまずきやすい部分です。
例:CALCULATE(SUM(Sales[Sales]), Sales[Quantity] > 1)
このとき、Sales[Quantity] > 1 という「行ごとの条件」がフィルターコンテキストとして評価され直します。
この仕組みを理解していないと「思った通りのフィルターが効かない」と感じやすくなります。

まとめポイント

  • CALCULATEはフィルターコンテキストを操作する特殊な関数
  • 行コンテキストはCALCULATE内でフィルターコンテキストに変換される
  • 仕様を知らないと「外部フィルターが無視された」と誤解しやすい

CALCULATEでよくあるつまずき


CALCULATEは便利な反面、「スライサーが効かない」「値が合わない」と感じやすい関数です。
初心者が特につまずきやすい代表的なパターンを見ていきます。

パターン1:外部フィルターが無視される

CALCULATEを使うと、外部のスライサーやビジュアルで指定した条件が無視されることがあります。
例として、以下のように「Product=A」の売上を計算するメジャーを作成します。

このメジャーをテーブルに配置すると、スライサーで「Product=B(カフェラテ)」を選んでも「Product=A(エスプレッソ)」の売上が返されます。

これはCALCULATEが「外部のフィルターコンテキストを上書きし、Product=Aで固定しているためです。

パターン2:FILTER関数との組み合わせで混乱

次に、FILTER 関数を使った例です。

この式は「数量が1より大きい売上」を返しますが、内部の動作は直感的ではありません。

FILTER 内の Sales[Quantity] > 1 は「行コンテキスト」で評価され、それが「フィルターコンテキスト」に変換されてからCALCULATEに渡されます。このコンテキスト変換を理解していないと、なぜその結果になるのか混乱してしまいます。

よくある誤解まとめ

  • CALCULATEはフィルターを「追加」するのではなく「上書き」することがある
  • FILTERを組み合わせると「行コンテキスト→フィルターコンテキスト変換」が発生する
  • この仕組みを理解していないと「スライサーが効かない」「意図しない値が出る」と感じやすい

CALCULATEを正しく使うための注意点


CALCULATEを安全に使いこなすためには、いくつか押さえておきたいポイントがあります。ここでは、意図しない集計結果を防ぐための考え方を整理します。

「上書き」と「追加」の違いを理解する

CALCULATEで条件を指定した場合、その条件は外部のフィルターを 上書き するのか、追加 されるのかを理解しておく必要があります。

上書きの例

外部で「Product=B」を選んでいても、Product=Aで固定されます。

追加の例

複数条件を組み合わせる場合は追加的に作用することもあります。

KEEPFILTERSを活用する

外部フィルターを残したまま条件を指定したい場合には、KEEPFILTERSを利用します。

この場合、「スライサーでProduct=B(カフェラテ)を選んでいる」かつ「Product=A(エスプレッソ)」という条件が両方適用されるため、結果は空白(該当なし)になります。

これにより、「外部フィルターも尊重した形」で制御できます。

FILTERで柔軟な条件指定を行う

複雑な条件を指定する場合は、FILTERを明示的に使うのが有効です。

このようにすると「金額が1000を超える売上だけを集計」といった条件を自在に指定できます。

開発時のチェック方法

CALCULATEを使ったメジャーは、スライサーやフィルターを切り替えながら「値がどう変わるか」を確認することで、フィルターが上書きされているのか、追加されているのかを判断できます。

例えば、以下のような手順で確認すると、挙動を理解しやすくなります。

  • スライサーやフィルター条件を変えて値の動きを確認する
  • VARを使ってメジャーを段階的に分解し、途中の値を確認する
  • 意図通りに動かない場合は「フィルターが上書きされたのか/追加されたのか」を疑う

スライサーを切り替えながら値を確認することで、CALCULATEによるフィルターの上書きか、KEEPFILTERSによる条件保持かを判断できます。

Power BI CALCULATE関数の使い方まとめと注意点

ここまで、CALCULATE 関数の基本構文と役割、そして計算結果が変わる理由である「コンテキスト(文脈)」について解説してきました。

CALCULATEは、Power BIで集計や条件付き分析を行ううえで欠かせないDAX関数で、特に フィルターコンテキストを操作できるという点が最大の特徴です。この特性によって、商品別・期間別といった基本的な切り口はもちろん、「特定条件に合致した売上だけを集計する」「外部条件を踏まえたうえで追加条件をかける」といった、実務でよくある分析も柔軟に実現できます。

CALCULATEを理解できるかどうかで、メジャーの表現力は大きく変わります。一方で、便利だからこそ “思った通りにならない” 体験も増えます。代表的なのが「スライサーが効かない」「数値が合わない」といった違和感です。

多くの場合これはエラーではなく、CALCULATEが既存の外部フィルターを上書き/置き換える挙動を持つことが原因です。
つまり、CALCULATE を使うときは「どのフィルターが残り、どのフィルターが置き換わるのか」を意識することが重要になります。

KEEPFILTERSを使って外部フィルターを尊重するのか、FILTERを使って条件を明示的に組み立てるのか、といった選択も結果に直結します。そこで最後に、本記事のポイントを振り返りながら、実務でつまずきを減らすための注意点を チェックリスト形式 で整理します。

CALCULATE関数を使うときのチェックリスト

  • フィルター上書きの仕組みを理解しているか
  •   → 外部スライサーや条件が効かないときは、上書きの仕様によるものかを確認

  • 外部フィルターを残す場合はKEEPFILTERSを使っているか
  •   → 外部条件を消さずに追加条件を適用したいときに有効

  • FILTER関数を適切に活用できているか
  •   → 複雑な条件や範囲指定はFILTERを併用することで対応可能

  • メジャーを分解して検証しているか(VARを活用)
  •   → 中間値を確認しながら挙動を理解することができる

まとめポイント

  • CALCULATEはコンテキスト(集計条件)を変更できる特別な関数
  • 値が想定と違う場合、多くはエラーではなくCALCULATEの仕様が原因
  • KEEPFILTERSやFILTERを組み合わせることで、意図した集計結果に近づけられる
  • 「なぜこの結果になったのか」を言葉で説明できるようになることが、CALCULATE理解の第一歩

<Power BIハンズオンセミナー>
弊社ではPower BIをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら

<Power BIの導入支援>
弊社ではPower BIの導入支援を行っています。ぜひお気軽にお問い合わせください。
>>Power BIの導入支援の詳細はこちら

<PowerBIの入門書を発売中!>
弊社ではPower BIの導入から基本的な使い方・活用方法の基礎などをわかりやすく解説した書籍も販売しています。
>>目次も公開中!書籍の詳細はこちら

CONTACT
お問い合わせ

ご相談やご依頼、病院マスタなどについてのお問い合わせはこちらのお問い合わせフォームから。

サービスなどについてのお問い合わせ 病院マスタについてのお問い合わせ

メールお問い合わせ