CALCULATE

Dotyczy:kolumna obliczeniowatabela obliczeniowaMiarawizualizacji

Oblicza wyrażenie w zmodyfikowanym kontekście filtru.

Nuta

Istnieje również funkcja CALCULATETABLE. Wykonuje dokładnie te same funkcje, z wyjątkiem modyfikacji kontekstu filtru zastosowanego do wyrażenia zwracającego obiekt tabeli .

Składnia

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Parametry

Termin Definicja
expression Wyrażenie do oceny.
filter1, filter2,… (Opcjonalnie) Wyrażenia logiczne lub wyrażenia tabeli definiujące filtry lub funkcje modyfikujące filtr.

Wyrażenie używane jako pierwszy parametr działa jak miara.

Filtry mogą być następujące:

  • Wyrażenia filtru warunkowego
  • Wyrażenia filtru tabeli
  • Funkcje modyfikacji filtru

Jeśli używasz wielu filtrów, możesz je ocenić przy użyciu operatora logicznego AND (&&), co oznacza, że wszystkie warunki muszą mieć TRUEwartość , lub przez OR operator logiczny (||), co oznacza, że warunek może być spełniony. Aby uzyskać więcej informacji, zobacz DAX operatory > logiczne.

Wyrażenia filtru warunkowego

Filtr wyrażenia warunkowego jest wyrażeniem, które daje w wyniku TRUE lub FALSE. Musi ona być zgodna z kilkoma regułami:

  • Może odwoływać się do kolumn z pojedynczej tabeli.

  • Nie może odwoływać się do miar.

  • Nie może używać funkcji zagnieżdżonej CALCULATE .

  • Nie może używać funkcji, które skanują lub zwracają tabelę, chyba że zostaną przekazane jako argumenty do funkcji agregacji.

  • Może zawierać funkcję agregacji, która zwraca wartość skalarną. Przykład:

    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Wyrażenie filtru tabeli

Filtr wyrażeń tabeli stosuje obiekt tabeli jako filtr. Może to być odwołanie do tabeli modelu, ale najprawdopodobniej jest to funkcja zwracająca obiekt tabeli. Za pomocą FILTER funkcji można stosować złożone warunki filtrowania, w tym te, których nie można zdefiniować za pomocą wyrażenia filtru logicznego.

Funkcje modyfikujące filtr

Funkcje modyfikujące filtr umożliwiają wykonywanie więcej niż tylko dodawanie filtrów. Zapewniają one dodatkową kontrolę podczas modyfikowania kontekstu filtru.

Funkcja Cel
REMOVEFILTERS Usuń wszystkie filtry lub filtry z co najmniej jednej kolumny tabeli lub ze wszystkich kolumn pojedynczej tabeli.
ALL 1, , ALLEXCEPTALLNOBLANKROW Usuń filtry z co najmniej jednej kolumny lub ze wszystkich kolumn pojedynczej tabeli.
KEEPFILTERS Dodaj filtr bez usuwania istniejących filtrów w tych samych kolumnach.
USERELATIONSHIP Angażowanie nieaktywnej relacji między powiązanymi kolumnami, w tym przypadku aktywna relacja automatycznie staje się nieaktywna.
CROSSFILTER Zmodyfikuj kierunek filtrowania (zarówno z jednej, jak i z pojedynczej do obu) lub wyłącz relację.

1 funkcja ALL i jego warianty zachowują się zarówno jako modyfikatory filtrów, jak i funkcje zwracające obiekty tabeli. Jeśli narzędzie obsługuje REMOVEFILTERS funkcję, użyj jej do usunięcia filtrów.

Wartość zwracana

Wartość, która wynika z wyrażenia.

Uwagi

  • Po podaniu wyrażeń filtru CALCULATE funkcja modyfikuje kontekst filtru w celu oceny wyrażenia. Dla każdego wyrażenia filtru istnieją dwa standardowe wyniki, gdy wyrażenie filtru KEEPFILTERS nie jest opakowane w funkcję:

    • Jeśli kolumny lub tabele nie znajdują się w kontekście filtru, nowe filtry są dodawane do kontekstu filtru w celu oceny wyrażenia.
    • Jeśli kolumny lub tabele znajdują się już w kontekście filtru, istniejące filtry są zastępowane przez nowe filtry do oceny CALCULATE wyrażenia.
  • CALCULATE Użycie funkcji bez filtrów osiąga określone wymaganie. Przenosi kontekst wiersza do kontekstu filtru. To przejście jest wymagane, gdy wyrażenie (a nie miara modelu), które podsumowuje dane modelu, musi być oceniane w kontekście wiersza. Ten scenariusz może wystąpić w formule kolumny obliczeniowej lub w przypadku obliczenia wyrażenia w funkcji iteratora. Jeśli używasz miary modelu w kontekście wiersza, przejście kontekstu jest automatyczne.

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

Przykłady

Przykłady w tym artykule mogą być używane z przykładowym modelem Adventure Works DW 2020 Power BI Desktop. Aby uzyskać model, zobacz DAX przykładowy model.

Poniższa definicja miary tabeli Sales generuje wynik przychodu, ale tylko dla produktów, które mają kolor niebieski.

Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
Kategoria Kwota sprzedaży Niebieski przychód
Akcesoria $1,272,057,89 165 406,62 USD
Rowery 94 620 526,21 USD $8,374,313,88
Odzież $2,117,613.45 259 488,37 USD
Składniki 11 799 076,66 USD 803 642,10 USD
łączna $109,809,274,20 $9,602,850,97

Funkcja CALCULATE oblicza sumę tabeli SalesSales Amount w zmodyfikowanym kontekście filtru. Nowy filtr zostanie dodany do tabeli ProductColor — lub filtr zastępuje wszystkie filtry, które zostały już zastosowane do kolumny.

Poniższa definicja miary tabeli Sales generuje stosunek sprzedaży w stosunku do sprzedaży dla wszystkich kanałów sprzedaży.

Revenue % Total Channel =
DIVIDE (
    SUM ( Sales[Sales Amount] ),
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        REMOVEFILTERS ( 'Sales Order'[Channel] )
    )
)
Kanał Kwota sprzedaży Przychód % łączny kanał
Internet $29,358,677,22 26.74%
Sprzedawcy 80 450 596,98 USD 73.26%
łączna $109,809,274,20 100.00%

Funkcja DIVIDE dzieli wyrażenie sumujące tabelę SalesSales Amount wartość kolumny (w kontekście filtru) przy użyciu tego samego wyrażenia w zmodyfikowanym kontekście filtru. Jest to funkcja CALCULATE, która modyfikuje kontekst filtru przy użyciu funkcji REMOVEFILTERS, która jest funkcją modyfikatora filtrów. Usuwa filtry z tabeli Sales OrderChannel kolumny.

W poniższej tabeli Customer definicja kolumny obliczeniowej klasyfikuje klientów do klasy lojalnościowej. Jest to bardzo prosty scenariusz: gdy przychody generowane przez klienta są mniejsze niż 2500 USD, są one klasyfikowane jako Low; w przeciwnym razie są high.

Customer Segment =
IF (
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        ALLEXCEPT ( Customer, Customer[CustomerKey] )
    ) < 2500,
    "Low",
    "High"
)
Segment klienta Liczba klientów Kwota sprzedaży
High 4,637 $102,670,663.09
Low 13,848 $7,138,611.11
łączna 18,485 $109,809,274,20

W tym przykładzie kontekst wiersza jest konwertowany na kontekst filtru. Jest to nazywane przejściem kontekstu . Funkcja ALLEXCEPT usuwa filtry ze wszystkich kolumn tabeli Customer z wyjątkiem kolumny CustomerKey.