Power BI・DaxのREMOVEFILTERS() について

Power BIのDAX新関数「REMOVEFILTERS()」について、わかりやすいように説明していきたいと思います。
既存のALL() 関数との違いや使いどころなどに触れながら解説しますので、ぜひ参考にしてみてください。


1. REMOVEFILTERS() とは?

1.1 機能概要

REMOVEFILTERS() は、DAX(= Data Analysis Expressions) で使用できる新しい関数で、指定したテーブルや列にかかっているフィルターを取り除く(リセットする)という役割があります。

  • :
    DAX
    Total Sales All Products REMOVEFILTERS() =
    CALCULATE([Total Sales], REMOVEFILTERS(Products))

    この式は、Products テーブルにかかったフィルターをすべて取り除き、全ての製品の売上合計を計算するように指示するものです。

1.2 従来のALL() 関数との関係

実は、REMOVEFILTERS() が登場する前から、DAX には ALL() という関数があり、同様にフィルターを削除して計算できました。したがって、次の 2 つの式は、基本的には同じ結果を返します。

DAX
-- REMOVEFILTERS() を使用
Total Sales All Products REMOVEFILTERS() =
CALCULATE([Total Sales], REMOVEFILTERS(Products))
— ALL() を使用
Total Sales All Products ALL() =
CALCULATE([Total Sales], ALL(Products))

両者は、いずれも「Products テーブルに対するフィルターを解除し、すべての製品を対象に [Total Sales] を集計する」という処理を行います。


2. REMOVEFILTERS() を導入する背景

2.1 シンタックスシュガー (Syntax Sugar)

プログラミングの世界ではよく「シンタックスシュガー」という言葉が使われます。
これは、既存の機能をよりわかりやすい構文や記述方法で使えるようにしたものを指します。

  • ALL()
    • すでに存在する機能で、「指定したテーブルや列のフィルターを取り除く」目的で長らく使われてきました。
  • REMOVEFILTERS()
    • 新たに追加された関数で、「フィルターを外す」という処理をより直感的に表現します(まさに「remove filters」という名前)。

つまり、REMOVEFILTERS() は ALL() と同等の機能を、より直接的な表現で実行できるようにしたものだと言えます。

2.2 学習しやすくなる可能性

DAXを学ぶユーザーにとって、

  • ALL(Products) よりも
  • REMOVEFILTERS(Products)

のほうが「どんなことをしようとしているのか」を日本語的・英語的な感覚で理解しやすい場合もあるでしょう。
「フィルターを取り除く」という意図が名前にそのまま現れているため、初心者でも意味を直感的に把握しやすいという利点があります。


3. 具体的な使用例

3.1 集計の文脈

たとえば、特定の条件でセグメントされた売上を表示しているビジュアルで、「全製品のトータル」を比較として同時に表示したいケースを考えましょう。そんなとき、以下のような式を用いて、

  • 「ビジュアル上の他のフィルターは効かせたまま」
  • 「ただし製品テーブルだけはフィルターを解除」
    という処理を実現できます。
DAX
Total Sales All Products =
CALCULATE(
[Total Sales],
REMOVEFILTERS(Products)
)

これにより、セグメント別の数値と、全体の売上が同じレポート上で比較しやすくなります。

3.2 比較: REMOVEFILTERS() vs. ALL()

ほぼ同じ意味合いですが、可読性やチームメンバーの好みに応じて、いずれを使うかを決めるとよいでしょう。

DAX
-- REMOVEFILTERS() 版
Total Sales All Products =
CALCULATE([Total Sales], REMOVEFILTERS(Products))
— ALL() 版
Total Sales All Products =
CALCULATE([Total Sales], ALL(Products))

いずれも結果は同じで、計算において Products テーブルのフィルターを強制的に外すという動きをします。


4. 注意点や活用のコツ

4.1 すべてのテーブル・列に適用する場合

REMOVEFILTERS()ALL() と同様に、引数に指定したテーブル・列だけのフィルターを解除します。
「レポート全体のすべてのフィルターを解除したい!」という場合は、テーブル名または列名の指定に注意してください。

  • 例: 全テーブルのフィルターを外す
    DAX
    CALCULATE([Total Sales], REMOVEFILTERS())

    (※Power BIバージョンによってはすべてのフィルターを外すための明示的な書き方は異なる場合があります。)

4.2 ALLEXCEPT() との違い

ALL() / REMOVEFILTERS() は指定したテーブルや列のフィルターをまるごと解除しますが、ALLEXCEPT() は「指定した列“以外”のフィルターを外す」という、もう少しややこしい動きをします。フィルター制御が複雑になる場合は、ALLEXCEPT() も組み合わせて学ぶと良いでしょう。

4.3 過度に多用しない

あまりにも多用すると、意図せずフィルターが解除されてしまい、ダッシュボードの整合性や可読性が下がる可能性があります。「どのテーブル/列のフィルターを解除したいのか」を明確にし、必要な箇所だけに適用するのがベストです。


5. まとめ

  • REMOVEFILTERS() は、DAXの既存関数 ALL() と同じく、指定したテーブルや列にかかっているフィルターを解除する機能を持ちます。
  • “フィルターを取り除く” という意図が関数名で明確に示されているため、学習面・可読性の面で優位な場合があります。
  • どちらを使っても計算結果は同じですが、プロジェクトやチームメンバーのスキルセットに合わせて使い分けるとよいでしょう。

最後に、DAXの表現はチーム内外で共有する際の可読性がとても重要です。REMOVEFILTERS() の登場によって、より直感的なコードが書けるようになりました。
何をしたいのか」が即座に分かる関数名は、ミスの防止やメンテナンス性向上にもつながるので、ぜひ一度試してみて、自分やチームにフィットするかどうかを確かめてみてください。

関連記事

    • テスト
    • 2019.09.22

    テスト

カテゴリー

アーカイブ