【DAX入門】ALL系関数の使い分け完全ガイド(ALL / ALLSELECTED / ALLEXCEPT)
Power BIやExcel Power Pivotでデータ分析を行う際、ALL系関数はフィルター制御の要となる重要な関数群です。本記事では、実務で頻繁に使われる3つの関数(ALL/ALLSELECTED/ALLEXCEPT)の違いを、具体例とともに徹底解説します。
ALL関数の基本構文と動作
ALL(<テーブル名>) // テーブル全体のフィルター解除
ALL(<列名>) // 指定列のフィルター解除
主な特徴
- 指定したテーブル/列の全てのフィルターを解除[1][5]
- スライサーやページレベルのフィルターも無視[5][7]
- 全体集計や絶対的な比率計算に最適
実例:カテゴリ別売上比率
カテゴリ比率 =
DIVIDE(
SUM(売上[金額]),
CALCULATE(SUM(売上[金額]), ALL(商品[カテゴリ]))
)
ALLSELECTED関数の特殊な挙動
ALLSELECTED(<テーブル名>) // ユーザー選択範囲を保持
主な特徴
- ビジュアルやスライサーでのユーザー選択を保持[2][7]
- 外部フィルターの影響を受ける[5][9]
- 相対的な比率計算や部分集計に有用
実例:選択範囲内での比率
選択内比率 =
DIVIDE(
SUM(売上[金額]),
CALCULATE(SUM(売上[金額]), ALLSELECTED(商品[カテゴリ]))
)
ALLEXCEPT関数の効率的な活用
ALLEXCEPT(<テーブル名>, <保持列>) // 指定列以外のフィルター解除
主な特徴
- 指定した列のフィルターを明示的に保持[2][5]
- グループ集計を維持しながら全体値を参照可能
- 多次元分析時に威力を発揮
実例:月別カテゴリ比率
月別比率 =
DIVIDE(
SUM(売上[金額]),
CALCULATE(
SUM(売上[金額]),
ALLEXCEPT(売上, 売上[月])
)
)
3関数の比較表
関数 | フィルター解除範囲 | 外部フィルター影響 | 主な用途 |
---|---|---|---|
ALL | 完全解除 | 無視 | 絶対的な全体値 |
ALLSELECTED | ユーザー選択範囲を除く | 影響を受ける | 相対的な部分集計 |
ALLEXCEPT | 指定列以外を解除 | 無視 | グループ維持した分析 |
実践的な使い分けポイント
1. ダッシュボード全体のKPI表示
総売上 = CALCULATE(SUM(売上[金額]), ALL(売上))
2. スライサー連動する部分集計
地域別シェア =
DIVIDE(
SUM(売上[金額]),
CALCULATE(SUM(売上[金額]), ALLSELECTED(地域))
)
3. 階層構造のある分析
部門別比率 =
CALCULATE(
SUM(売上[金額]),
ALLEXCEPT(売上, 売上[事業部])
)
よくある落とし穴と回避策
-
意図しないフィルター解除
→ 列指定で最小限のフィルター解除を心がける[2][5] -
ALLSELECTEDの外部フィルター依存
→ スライサーの設定状態を常に確認[7][9] -
パフォーマンス低下
→ テーブル全体より列指定を優先[3][5]
応用テクニック
複合フィルター制御
複合比率 =
DIVIDE(
SUM(売上[金額]),
CALCULATE(
SUM(売上[金額]),
ALL(商品[カテゴリ]),
ALLSELECTED(地域[都道府県])
)
)
動的フィルター連携
動的比率 =
VAR CurrentValue = SUM(売上[金額])
VAR TotalValue = CALCULATE(SUM(売上[金額]), ALLSELECTED())
RETURN DIVIDE(CurrentValue, TotalValue)
まとめ
- ALL:完全なフィルター解除で「絶対値」取得
- ALLSELECTED:ユーザー操作を尊重した「相対値」計算
- ALLEXCEPT:特定の次元を維持した「階層型」分析
実際のプロジェクトでは、これらの関数を組み合わせて使用するケースが多くなります。フィルターコンテキストを意識しながら、目的に応じた適切な関数選択を心がけましょう。