CALCULATE 関数について学習する
このユニットを終えるまでに、CALCULATE 関数が Power BI で最も汎用性のある関数の 1 つであることがよくわかるでしょう。
大まかに言えば、行コンテキストとフィルター コンテキストを制御できます。 CALCULATE 関数を使用すると、フィルターを追加したり、オフにしたり、更新したりすることができます。 1 つの関数に多くの機能があります。
CALCULATE でフィルターを追加する
まず、CALCULATE 関数を使用してフィルターを追加する方法について説明します。
前のデータ テーブルの総売上は次のとおりです。
Total Sales = SUM( [Sales Amount] )
また、総売上のフィルター処理バージョンもあります。ここでは、総売上を評価し、Airplane フィルター コンテキストを適用しています。
Airplane Sales = CALCULATE( [Total Sales], 'Product Details'[ItemGroup] = "Airplane" )
ヒント
Tableau との対応: 次のコード スニペットは、Tableau で同じ計算を行う方法を示したものです: Airplane Sales = IF [ItemGroup] = "Airplane" THEN SUM([Sales Amount] ELSE 0 END)
CALCULATE でフィルターを無視する
次に、CALCULATE 関数を使用してフィルターを無視する方法について説明します。
上のデータ テーブルでは、州ごとの売上合計が 1 つの列に示され、次の列にすべての地域の売上合計が示されています。 この列は、合計に対する各州 (つまり行) の割合について分析を行う場合に役立ちます。
DAX で全体に対する比率を計算する最も一般的な方法は、ALL 関数を使用することです。
Total Sales All Geo = CALCULATE( [Total Sales], ALL( Geography ) )
上のコードでは、Geography テーブルを参照してそのすべての値を含めています。フィルター コンテキストを絞り込んではいません。
ヒント
Tableau との対応: 次のコード スニペットは、EXCLUDE LOD 式を使用して、Tableau で同じ計算を行う方法を示したものです: Total Sales All Geo = { EXCLUDE [State], [City] : SUM([Total Sales]) }
別の無視フィルターの例は、次のようになります。
前のテーブルでは、州別の総売上があり、全地域の総売上があり (すべての地域フィルターが除外されています)、最後に、すべての州の売上合計がありますが、都市フィルターはまだ適用されています。
図によると、Alexandria という市は複数の州に存在します。 そのため、Alexandria 市がある州の総売上だけを確認する必要があります。
Total Sales All States = CALCULATE( [Total Sales], ALL( Geography[State] ) )
ヒント
Tableau との対応: これは、EXCLUDE LOD 式を使用して、Tableau で同じ計算を行う方法を示したものです。 この LOD 式は、細分性が別の式とは異なることがわかります。 この式の場合、ビューから除外するのは州と都市ではなく、州とする必要があります: Total Sales All States = { EXCLUDE [State] : SUM([Total Sales]) }
CALCULATE でフィルターを更新する
CALCULATE 関数の有用性を示す最後のチュートリアルでは、フィルターを更新します。
上のデータ テーブルには、全体の総売上 (年を無視)、視覚エフェクトのスライサーによって適用されたフィルター コンテキストで取得された総売上があり、最後の列には 2018 年の総売上のみが示されています。
"2018 Sales" 列を取得するには、次のように記述する必要があります。
2018 Sales = CALCULATE( [Total Sales], DATE[Year] = 2018 )
ヒント
Tableau との対応: 興味深いのは、Tableau にはこれと直接比較できるものがないらしいことです。 Tableau でこれを行うには、フィールドの複製、補助データ ソースの取り込み、または各列に対する計算の実行が必要になります。
この CALCULATE のユニットで確認した内容をまとめておきます。
任意の式を最初の引数として指定できます。
式では、ページのすべてのフィルター コンテキスト (視覚エフェクトのスライサー) が調べられます。
フィルターが存在する場合は追加されます。
フィルター リストにページ コンテキストと同じフィルターが既に存在する場合は、それをオーバーライドします。
上記のことがすべて行われた後、最終的に式が評価されます。
注意
もちろん、これは、操作の順序を実際に理解するために答を確認する必要がないということではありません。 "フィルターが取り消されたかどうか" を自分で確認する必要があります。