Udostępnij za pośrednictwem


ZACHOWAJFILERY

Dotyczy: Obliczanie kolumny obliczeniowej tabeli Obliczeniowej Obliczenie wizualizacji

Modyfikuje sposób stosowania filtrów podczas obliczania funkcji CALCULATE lub CALCULATETABLE.

Składnia

KEEPFILTERS(<expression>)  

Parametry

Termin Definicja
wyrażenie Dowolne wyrażenie.

Wartość zwracana

Tabela wartości.

Uwagi

  • Aby zastąpić standardowe zachowanie tych funkcji, należy użyć funkcji KEEPFILTERS w kontekście CALCULATE i CALCULATETABLE.

  • Domyślnie argumenty filtru w funkcjach, takich jak CALCULATE, są używane jako kontekst do obliczania wyrażenia, a jako takie argumenty filtru dla funkcji CALCULATE zastępują wszystkie istniejące filtry w tych samych kolumnach. Nowy kontekst zastosowany przez argument filtru dla funkcji CALCULATE wpływa tylko na istniejące filtry w kolumnach wymienionych jako część argumentu filtru. Filtry w kolumnach innych niż wymienione w argumentach funkcji CALCULATE lub innych powiązanych funkcji pozostają w mocy i niezwiązane.

  • Funkcja KEEPFILTERS umożliwia modyfikowanie tego zachowania. W przypadku używania funkcji KEEPFILTERS wszystkie istniejące filtry w bieżącym kontekście są porównywane z kolumnami w argumentach filtru, a przecięcie tych argumentów jest używane jako kontekst do obliczania wyrażenia. Efekt netto dla dowolnej kolumny polega na tym, że oba zestawy argumentów mają zastosowanie: zarówno argumenty filtru używane w funkcji CALCULATE, jak i filtry w argumentach funkcji KEEPFILTER. Innymi słowy, podczas gdy filtry CALCULATE zastępują bieżący kontekst, funkcja KEEPFILTERS dodaje filtry do bieżącego kontekstu.

  • Ta funkcja nie jest obsługiwana w trybie DirectQuery w przypadku użycia w kolumnach obliczeniowych lub regułach zabezpieczeń na poziomie wiersza.

Przykład

W poniższym przykładzie przedstawiono niektóre typowe scenariusze, które pokazują użycie funkcji KEEPFILTERS w ramach formuły CALCULATE lub CALCULATETABLE.

Pierwsze trzy wyrażenia uzyskują proste dane do użycia w porównaniach:

  • Sprzedaż internetowa dla stanu Waszyngton.

  • Sprzedaż internetowa dla stanów Waszyngtonu i Oregonu (oba stany połączone).

  • Sprzedaż internetowa dla stanu Waszyngton i prowincji Kolumbii Brytyjskiej (oba regiony połączone).

Czwarte wyrażenie oblicza sprzedaż internetową dla Waszyngtonu i Oregonu, a filtr dla Waszyngtonu i Kolumbii Brytyjskiej jest stosowany.

Następne wyrażenie oblicza sprzedaż internetową dla Waszyngtonu i Oregonu, ale używa metody KEEPFILTERS; filtr dla Waszyngtonu i Kolumbii Brytyjskiej jest częścią poprzedniego kontekstu.

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

Po obliczeniu tego wyrażenia względem przykładowej bazy danych AdventureWorks DW zostaną uzyskane następujące wyniki.

Kolumna Wartość
[$$ w usłudze WA] $ 2,467,248,34
[$$ w usługach WA i OR] $ 3,638,239,88
[$$ w WA i BC] $ 4,422,588,44
[$$ w WA i OR ??] $ 3,638,239,88
[$$ w WA !!] $ 2,467,248,34

Uwaga

Powyższe wyniki zostały sformatowane w tabeli, zamiast jednego wiersza, dla celów edukacyjnych.

Najpierw sprawdź wyrażenie [$$ w usługach WA i OR ??]. Możesz się zastanawiać, jak ta formuła może zwrócić wartość sprzedaży w Waszyngtonie i Oregonie, ponieważ zewnętrzne wyrażenie CALCULATE zawiera filtr dla Waszyngtonu i Kolumbii Brytyjskiej. Odpowiedź polega na tym, że domyślne zachowanie funkcji CALCULATE zastępuje filtry zewnętrzne w obszarze "Geography"[State Province Code] i zastępuje własne argumenty filtru, ponieważ filtry mają zastosowanie do tej samej kolumny.

Następnie sprawdź wyrażenie [$$ w WA !!]. Możesz się zastanawiać, jak ta formuła może zwrócić wartość sprzedaży w Waszyngtonie i nic innego, ponieważ filtr argumentu zawiera Oregon i zewnętrzne wyrażenie CALCULATE zawiera filtr w Waszyngtonie i Kolumbii Brytyjskiej. Odpowiedź brzmi: KEEPFILTERS modyfikuje domyślne zachowanie funkcji CALCULATE i dodaje dodatkowy filtr. Ponieważ używane jest przecięcie filtrów, teraz zewnętrzny filtr 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="BC") jest dodawany do argumentu filtru 'Geography'[State Province Code]="WA" || 'Geography'[State Province Code]="OR",. Ponieważ oba filtry dotyczą tej samej kolumny, wynikowy filtr "Geography"[State Province Code]="WA" jest filtrem zastosowanym podczas obliczania wyrażenia.

Funkcje filtrowania
CALCULATE, funkcja
CALCULATETABLE, funkcja