KEEPFILTERS

Ändert die Anwendung von Filtern bei der Auswertung einer CALCULATE- oder CALCULATETABLE-Funktion.

Syntax

KEEPFILTERS(<expression>)  

Parameter

Begriff Definition
expression Beliebiger Ausdruck.

Rückgabewert

Eine Tabelle mit Werten.

Bemerkungen

  • Sie verwenden KEEPFILTERS innerhalb der CALCULATE- und CALCULATETABLE-Funktionen, um das Standardverhalten dieser Funktionen außer Kraft zu setzen.

  • Filterargumente in Funktionen wie CALCULATE werden standardmäßig als Auswertungskontext des Ausdrucks verwendet. Daher ersetzen Filterargumente für CALCULATE alle vorhandenen Filter für die gleichen Spalten. Der neue Kontext, der vom Filterargument für CALCULATE betroffen ist, bezieht sich nur auf vorhandene Filter für Spalten, die als Teil des Filterarguments erwähnt werden. Filter für andere Spalten, als die in den Argumenten von CALCULATE oder anderen verwandten Funktionen genannten, bleiben in Kraft und unverändert.

  • Mit der KEEPFILTERS-Funktion können Sie dieses Verhalten ändern. Wenn Sie KEEPFILTERS verwenden, werden alle im aktuellen Kontext vorhandenen Filter mit den Spalten in den Filterargumenten verglichen, und die Schnittmenge dieser Argumente wird als Kontext für die Auswertung des Ausdrucks verwendet. Der Nettoeffekt für eine Spalte ist, dass beide Argumentensätze gelten: sowohl die in CALCULATE verwendeten Filterargumente als auch die Filter in den Argumenten der KEEPFILTER-Funktion. Anders ausgedrückt: Während CALCULATE-Filter den aktuellen Kontext ersetzen, fügt KEEPFILTERS dem aktuellen Kontext Filter hinzu.

  • Die Verwendung dieser Funktion im DirectQuery-Modus wird nicht unterstützt, wenn sie in berechneten Spalten oder RLS-Regeln (Row-Level Security) eingesetzt wird.

Beispiel

Das folgende Beispiel führt Sie durch einige gängige Szenarios, die die Verwendung der KEEPFILTERS-Funktion als Teil einer CALCULATE- oder CALCULATETABLE-Formel veranschaulichen.

Die ersten drei Ausdrücke erhalten einfache Daten, die für Vergleiche verwendet werden können:

  • „Internet Sales“ für den Staat Washington.

  • „Internet Sales“ für die Staaten Washington und Oregon (beide Staaten kombiniert).

  • „Internet Sales“ für den Staat Washington und die Provinz British Columbia (beide Regionen kombiniert).

Mit dem vierten Ausdruck werden die „Internet Sales“ für Washington und Oregon berechnet, während der Filter für Washington und British Columbia angewendet wird.

Mit dem nächsten Ausdruck werden die „Internet Sales“ für Washington und Oregon berechnet, aber die KEEPFILTERS-Funktion verwendet. Der Filter für Washington und British Columbia ist Teil des vorherigen Kontexts.

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"  
      )  
)  

Wenn dieser Ausdruck für die Beispieldatenbank AdventureWorks DW ausgewertet wird, werden die folgenden Ergebnisse zurückgegeben.

Spalte Wert
[$$ in WA] USD 2.467.248,34
[$$ in WA and OR] USD 3.638.239,88
[$$ in WA and BC] USD 4.422.588,44
[$$ in WA and OR ??] USD 3.638.239,88
[$$ in WA !!] USD 2.467.248,34

Hinweis

Die obigen Ergebnisse wurden zu Schulungszwecken in einer Tabelle statt einer einzelnen Zeile formatiert.

Überprüfen Sie zuerst den Ausdruck [$$ in WA and OR ??]. Sie werden sich vielleicht fragen, wie diese Formel den Wert für Umsätze in Washington und Oregon zurückgeben konnte, da der äußere Ausdruck CALCULATE einen Filter für Washington und British Columbia enthält. Die Antwort ist, dass das Standardverhalten von CALCULATE die äußeren Filter in „'Geography'[State Province Code]“ außer Kraft setzt und die eigenen Filterargumente ersetzt, da die Filter für die gleiche Spalte gelten.

Überprüfen Sie als Nächstes den Ausdruck [$$ in WA !!]. Sie werden sich vielleicht fragen, wie diese Formel den Wert für Umsätze in Washington und sonst nichts zurückgeben konnte, da der Argumentfilter Oregon und der äußere Ausdruck CALCULATE einen Filter für Washington und British Columbia enthält. Die Antwort ist, dass KEEPFILTERS das Standardverhalten von CALCULATE ändert und einen zusätzlichen Filter hinzufügt. Da die Schnittmenge der Filter verwendet wird, wird nun der äußere Filter 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC") zum Filterargument 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR" hinzugefügt. Da sich beide Filter auf dieselbe Spalte beziehen, ist der resultierende Filter 'Geographie'[State Province Code]="WA" der Filter, der bei der Auswertung des Ausdrucks angewendet wird.

Filterfunktionen
CALCULATE-Funktion
CALCULATETABLE-Funktion