次の方法で共有


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

手記

上記の結果は、教育目的で 1 行ではなくテーブルに書式設定されました。

まず、式を調べ、[$$ 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" は式を評価するときに適用されるフィルターです。

関数CALCULATE 関数CALCULATETABLE 関数 をフィルター処理する