Power BIのDAX(Data Analysis Expressions)では、データを集計したり、フィルタリングのコントロールを行うために「ALL」や「ALLSELECTED」などの関数を利用します。
これらの関数は、フィルタリングの影響を解除したり、特定の範囲だけをフィルタリングしたりする場面で役立ちます。
ALL関数
ALL関数は、指定された列やテーブルから全てのフィルターを解除します。
つまり、フィルタリングによって制限されているデータセットをリセットし、全データを対象に計算を行います。
書式
ALL(<Table>)
ALL(<Column>)
使用例
次のような売上データがあるとします。
フィルタリングで「商品A」を選択した場合、通常は商品Aの売上(100)だけが表示されます。
しかし、ALL関数を使って計算すると、全ての商品の売上が計算の対象になります。
売上合計 = SUM(Sales[売上])
全体売上 = CALCULATE(SUM(Sales[売上]), ALL(Sales[商品]))
以下のようにメジャーを作成しました。
以下のとおり、「全体売上」では、フィルタが適用されていても全商品の売上(100 + 150 + 200 = 450)が表示されます。
ALLSELECTED関数
ALLSELECTED関数は、ユーザーが行った選択範囲のフィルタを保持しながら、それ以外のフィルタを解除します。
これにより、ページ内の他のビジュアルで選択した範囲を考慮した結果を得ることができます。
書式
ALLSELECTED(<Table>)
ALLSELECTED(<Column>)
使用例
「商品B」を選択した状態で、ユーザーが別のビジュアルで他の商品も選択している場合、その選択範囲を維持しながら計算できます。
売上選択範囲合計 = CALCULATE(SUM(Sales[売上]), ALLSELECTED(Sales[商品]))
この場合、他のビジュアルで「商品A」と「商品B」が選択されている場合、その選択範囲の合計売上(100 + 150)が表示されます。
ALLとALLSELECTEDの違い
- ALL
指定したテーブルや列のすべてのフィルタを無効化し、全データに基づいて計算を行います。 - ALLSELECTED
現在の選択状態(ページ内のビジュアルの選択を含む)を維持しつつ、フィルタリングを一部解除します。
関連する他の関数
- REMOVEFILTERS
REMOVEFILTERS
は、特定の列やテーブルからフィルタを削除する際に使用されます。ALL
と似ていますが、REMOVEFILTERS
はフィルターを「削除」するという意味合いが強く、他の関数と組み合わせることが一般的です。売上フィルタ解除 = CALCULATE(SUM(Sales[売上]), REMOVEFILTERS(Sales[商品]))
- FILTER
FILTER
は、テーブルや列のデータを特定の条件に基づいてフィルタリングする関数です。ALL
やALLSELECTED
とは異なり、フィルタを「解除」するのではなく、むしろ「追加」するのに使われます。特定商品売上 = CALCULATE(SUM(Sales[売上]), FILTER(Sales, Sales[商品] = "A"))
CALCULATE関数
本記事で登場しているCALCULATE関数の使い方も記載しておきます。
CALCULATE関数の基本的な役割
CALCULATE関数は、指定した「式」に基づいて集計を行い、その際に「条件に基づくフィルタ」を適用して結果を返します。
式を評価する際に適用するフィルタを動的に変更できる点が特徴です。
書式
CALCULATE(<式>, <フィルタ1>, <フィルタ2>, ...)
<式>
: 計算したい式(例えば、SUM
やAVERAGE
などの集計関数を使います)。<フィルタ>
: 集計時に適用するフィルタ条件(FILTER
関数や、直接条件を指定できます)。
CALCULATEの使用例
基本的なSUM関数との組み合わせ
売上テーブルから特定の商品の売上合計を取得する場合、CALCULATE関数を使ってフィルタを適用します。
商品A売上 = CALCULATE(SUM(Sales[売上]), Sales[商品] = "A")
この式は、Sales
テーブルの商品
列が「A」である行に対して、売上
列の合計を計算します。
複数のフィルタの適用
複数のフィルタを適用して計算を行うことも可能です。例えば、特定の商品と特定の地域の売上を集計する場合です。
商品A_地域X売上 = CALCULATE(SUM(Sales[売上]), Sales[商品] = "A", Sales[地域] = "X")
この場合、商品A
かつ地域X
に対する売上合計が計算されます。
CALCULATEとフィルタ修正
CALCULATE関数は、既存のフィルタを上書き、またはフィルタを追加・削除するために使用できます。
ALL関数との組み合わせ
ALL関数と組み合わせて、特定のフィルタを解除しつつ集計することができます。例えば、地域にかかわらず商品の売上を計算する場合です。
全地域の商品A売上 = CALCULATE(SUM(Sales[売上]), Sales[商品] = "A", ALL(Sales[地域]))
この式では、地域に関するフィルタが解除され、商品Aの全地域に対する売上が集計されます。
まとめ
- ALLは、指定したテーブルや列のフィルタを全て解除して全体のデータを集計します。
- ALLSELECTEDは、選択されたフィルタを考慮しながらも、指定された列やテーブルにおける一部のフィルタを解除します。
- 他に、フィルタを削除するためのREMOVEFILTERSや、フィルタを追加するためのFILTERも組み合わせて使うことができます。