フィルター修飾子関数を使用する
CALCULATE
関数を使用する場合、フィルター変更関数を渡すことができます。これによって実現できることはフィルターの追加だけではありません。
フィルターを削除する
フィルター コンテキストからフィルターを削除するには、REMOVEFILTERS
DAX 関数を CALCULATE
フィルター式として使用します。 1 つ以上の列から、または 1 つのテーブルのすべての列からフィルターを削除することができます。
注意
REMOVEFILTERS
関数は比較的新しいものです。 DAX の以前のバージョンでは、ALL
DAX 関数、または ALLEXCEPT
および ALLNOBLANKROW
DAX 関数などのバリアントを使用してフィルターを削除していました。 これらの関数は、フィルター修飾子としても、個別の値のテーブル オブジェクトを返す関数としても動作します。 ここでは、これらの関数について説明します。それらを使用してフィルターを削除するドキュメントや数式の例を見つけられる可能性が高いためです。
次の例では、Revenue (収益) メジャーを評価する新しいメジャーを Sales (売上) テーブルに追加しますが、そのために Sales Territory (販売区域) テーブルからフィルターを削除します。 小数点以下 2 桁の通貨としてメジャーを書式設定します。
Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))
次に、レポートの [ページ 2] にあるマトリックスの視覚エフェクトに、Revenue Total Region (地域の収益合計) メジャーを追加します。 マトリックスの視覚エフェクトは、Sales Territory テーブルの行を基にした 3 つの列でグループ化されています。Group (グループ)、Country (国)、Region (地域) です。
Revenue Total Region (地域の収益合計) の値が同じであることに注目してください。 これは合計収益の値です。
この結果だけでは役に立ちませんが、比率の分母として使用すると、総計に占める割合が計算されます。 そのため、Revenue Total Region (地域の収益合計) メジャー定義を次の定義で上書きします (この新しい定義でメジャー名が変更され、2 つの変数が宣言されます。メジャーは、必ず小数点以下 2 桁のパーセンテージとして書式設定してください。)
Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory')
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalRegionRevenue
)
マトリックスの視覚エフェクトに Revenue % Total Region (地域の収益合計 (%)) の値が表示されることを確認してください。
次に別のメジャーを作成します。今回は、地域の収益を国の収益で割った比率を計算します。
このタスクを完了する前に、Southwest (南西部) 地域の Revenue % Total Region (地域の収益合計 (%)) 値が 22.95% であることに注目してください。 このセルのフィルター コンテキストを調べます。 データ ビューに切り替え、[フィールド] ペインで Sales Territory (販売区域) テーブルを選択します。
次の列フィルターを適用します。
- Group (グループ) - North America (北米)
- Country (国) - United States (米国)
- Region (地域) - Southwest (南西部)
フィルターを選択すると、テーブルが 1 行に絞り込まれることに注目してください。 次に、国の収益に対する地域の収益の比率を作成するという新しい目標を検討しながら、Region (地域) 列からフィルターをクリアします。
現在、5 行が存在し、各行は国 United States (米国) に属していることに注目してください。 そのため、Region (地域) 列のフィルターをクリアし、Country (国) 列と Group (グループ) 列のフィルターを残すと、地域の国に対する新しいフィルター コンテキストが作成されます。
次のメジャー定義では、列からフィルターをクリアまたは削除する方法に注目します。 DAX ロジックで、Revenue % Total Region (地域の収益合計 (%)) メジャー式に加えられるのはわずかでささいな変更です。次は、REMOVEFILTERS
関数を使用して、Sales Territory (販売区域) テーブルのすべての列ではなく、Region (地域) 列からフィルターを削除します。
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
Revenue % Total Country (国の収益合計 (%)) メジャーを Sales (売上) テーブルに追加し、小数点以下 2 桁のパーセンテージとして書式設定します。 マトリックスの視覚エフェクトに新しいメジャーを追加します。
United States (米国) の地域の値を除き、すべての値が 100% であることに注目してください。 その理由は、Adventure Works 社では、United States (米国) に地域があるのに対し、他の国にはないためです。
注意
表形式モデルは、不均一な階層 (深さが可変である階層) をサポートしません。 そのため、一般的な設計手法として、階層の下位レベルで親 (または他の先祖) の値を繰り返すことがあります。 たとえば、Australia (オーストラリア) には地域がないため、国/地域の値が地域名として繰り返されます。 常に、空白ではなく、意味のある値を格納することをお勧めします。
次の例が最後に作成するメジャーです。 Revenue % Total Group (グループの収益合計 (%)) メジャーを追加し、小数点以下 2 桁のパーセンテージとして書式設定します。 次に、マトリックスの視覚エフェクトに新しいメジャーを追加します。
Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS(
'Sales Territory'[Region],
'Sales Territory'[Country]
)
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalGroupRevenue
)
Sales Territory (販売区域) テーブルの Region (地域) および Country (国) の各列からフィルターを削除すると、メジャーによって地域の収益がグループの収益の比率として計算されます。
フィルターを保持する
KEEPFILTERS
DAX 関数を CALCULATE
関数のフィルター式として使用すると、フィルターを保持することができます。
このタスクを実行する方法を確認するには、レポートの [ページ 1] に切り替えます。 次に、KEEPFILTERS
関数を使用するように Revenue Red (赤の収益) メジャー定義を変更します。
Revenue Red =
CALCULATE(
[Revenue],
KEEPFILTERS('Product'[Color] = "Red")
)
テーブルの視覚エフェクトで、Revenue Red (赤の収益) 値が 1 つだけ存在することに注目してください。 その理由は、ブール フィルター式に、Product (製品) テーブルの Color (色) 列の既存のフィルターが保持されているためです。 赤以外の色が空白である理由は、これらの 2 つのフィルターに対してフィルター コンテキストとフィルター式が組み合わされているためです。 黒色と赤色は交差しており、両方が同時に TRUE
になることはないため、式はどの製品行でもフィルター処理されません。 両方の赤フィルターが同時に TRUE
になる可能性のみがあります。それが、1 つの Revenue Red (赤の収益) 値が表示される理由です。
非アクティブなリレーションシップを使用する
非アクティブ モデル リレーションシップでは、USERELATIONSHIP
DAX 関数をフィルター式として CALCULATE
関数に渡した場合にのみ、フィルターを伝達できます。 この関数を使用して非アクティブなリレーションシップを操作すると、アクティブなリレーションシップは自動的に非アクティブになります。
非アクティブなリレーションシップを使用して出荷日ごとに Revenue (収益) メジャーを計算するメジャー定義の例を確認してください。
Revenue Shipped =
CALCULATE (
[Revenue],
USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)
リレーションシップの動作を変更する
式が評価されるときのモデル リレーションシップの動作を変更するには、CROSSFILTER
DAX 関数をフィルター式として CALCULATE
関数に渡します。 これは高度な機能です。
CROSSFILTER
関数を使用すると、フィルターの方向を (両方から 1 つに、1 つから両方に) 変更し、リレーションシップを無効にすることもできます。