KEEPFILTERS
CALCULATE 関数または CALCULATETABLE 関数の評価中にフィルターを適用する方法を変更します。
構文
KEEPFILTERS(<expression>)
パラメーター
用語 | 定義 |
---|---|
expression | 任意の式。 |
戻り値
値のテーブル。
解説
これらの関数の標準動作をオーバーライドするには、コンテキスト CALCULATE 関数および CALCULATETABLE 関数内で KEEPFILTERS を使用します。
既定では、CALCULATE などの関数のフィルター引数は、式を評価するためのコンテキストとして使用されます。また、CALCULATE のフィルター引数により、同じ列のすべての既存のフィルターが置き換えられます。 CALCULATE のフィルター引数によって影響を受ける新しいコンテキストは、フィルター引数の一部として指定された列に対する既存のフィルターにのみ影響を与えます。 CALCULATE またはその他の関連する関数の引数で指定されたもの以外の列に対するフィルターは、有効のまま変更されずに保持されます。
KEEPFILTERS 関数を使用すると、この動作を変更できます。 KEEPFILTERS を使用すると、現在のコンテキストの既存のフィルターがフィルター引数の列と比較され、これらの引数の積集合が式を評価するためのコンテキストとして使用されます。 1 つの列に対する実質的な影響は、両方の引数セットが適用されることです。CALCULATE で使用されるフィルター引数と KEEPFILTER 関数の引数のフィルターの両方が適用されます。 つまり、CALCULATE フィルターによって現在のコンテキストが置き換えられる一方で、KEEPFILTERS によって現在のコンテキストにフィルターが追加されます。
この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。
例
次の例では、CALCULATE 式または CALCULATETABLE 式の一部として KEEPFILTERS 関数を使用する一般的なシナリオを示します。
最初の 3 つの式では、比較に使用される単純なデータが取得されます。
ワシントン州のインターネット販売。
ワシントン州とオレゴン州のインターネット販売 (両方の州が組み合わされています)。
ワシントン州とブリティッシュ コロンビア州のインターネット販売 (両方の地域が組み合わされています)。
4 番目の式では、ワシントン州とオレゴン州のインターネット販売が計算される一方で、ワシントンとブリティッシュ コロンビアのフィルターが適用されます。
その次の式では、ワシントンとオレゴンのインターネット販売が計算されますが、KEEPFILTERS が使用されます。ワシントンとブリティッシュ コロンビアのフィルターは、前のコンテキストに含まれています。
EVALUATE ROW(
"$$ in WA"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
)
, "$$ in WA and OR"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, "$$ in WA and BC"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA and OR ??"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
,'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA !!"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
, KEEPFILTERS('Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
)
この式がサンプル データベースの AdventureWorks DW に対して評価されると、次の結果が得られます。
列 | [値] |
---|---|
[$$ in WA] | $ 2,467,248.34 |
[$$ in WA and OR] | $ 3,638,239.88 |
[$$ in WA and BC] | $ 4,422,588.44 |
[$$ in WA and OR ??] | $ 3,638,239.88 |
[$$ in WA !!] | $ 2,467,248.34 |
注意
上記の結果は、演習に利用するため、単一行ではなくテーブルに書式設定されています。
まず、[$$ in WA and OR ??] 式を確認します。 外側の CALCULATE 式にワシントンとブリティッシュ コロンビアのフィルターが含まれるため、この式によって、ワシントンとオレゴンの販売の値がどのように返されるかが気になるかもしれません。 その答えとしては、フィルターが同じ列に適用されるため、CALCULATE の既定の動作によって 'Geography'[State Province Code] の外側のフィルターがオーバーライドされ、独自のフィルター引数に置き換えられます。
次に、式 [$$ in WA !!] を確認します。 引数フィルターにオレゴンが含まれ、外側の CALCULATE 式にワシントンとブリティッシュ コロンビアのフィルターが含まれるため、この式によって、ワシントンのみの販売の値がどのように返されるかが気になるかもしれません。 その答えとしては、KEEPFILTERS によって CALCULATE の既定の動作が変更され、追加のフィルターが追加されます。 フィルターの積集合が使用されるため、外側のフィルター 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC") がフィルター引数 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR" に追加されます。 両方のフィルターが同じ列に適用されるため、結果として得られるフィルター 'Geography'[State Province Code]="WA" は、式を評価するときに適用されるフィルターです。