Udostępnij za pośrednictwem


CALCULATE

Dotyczy:kolumna obliczeniowatabela obliczeniowaMeasureobliczenia wizualne

Oblicza wyrażenie w zmodyfikowanym kontekście filter.

Nuta

Istnieje również funkcja CALCULATETABLE. Wykonuje dokładnie te same funkcje, except modyfikuje kontekst filter zastosowany do wyrażenia zwracającego obiekt tabeli .

Składnia

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

Parametry

Termin Definicja
expression Wyrażenie do obliczenia.
filter1, filter2,… (Opcjonalnie) Wyrażenia warunkowe or wyrażenia tabeli, które definiują filters, orfilter funkcje modyfikatora.

Wyrażenie używane jako parametr first jest zasadniczo takie samo jak measure.

Filters mogą być następujące:

  • Wyrażenia filter warunkowe
  • Wyrażenia filter tabeli
  • funkcje modyfikacji Filter

Jeśli istnieje wiele , można je ocenić przy użyciuoperatora logicznego () , co oznacza, że warunki muszą być , przez operator logiczny (), co oznacza, że jeden warunek może być .

Wyrażenia filter warunkowe

Wyrażenie logiczne filter jest wyrażeniem, które daje TRUEorFALSE. Istnieje kilka reguł, które muszą przestrzegać:

  • Mogą odwoływać się do kolumn z jednej tabeli.
  • Nie mogą odwoływać się do miar.
  • Nie mogą używać zagnieżdżonej funkcji CALCULATE.

Począwszy od wersji programu Power BI Desktop z września 2021 r., obowiązują również następujące elementy:

  • Nie mogą używać funkcji, które skanują or zwracają tabelę, chyba że są przekazywane jako argumenty do funkcji agregacji.
  • mogą zawierać funkcję agregacji zwracającą valueskalarną . Na przykład
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Wyrażenie filter tabeli

Wyrażenie tabeli filter stosuje obiekt tabeli jako filter. Może to być odwołanie do tabeli modelu, ale najprawdopodobniej jest to funkcja zwracająca obiekt tabeli. Możesz użyć funkcji FILTER, aby zastosować złożone warunki filter, w tym te, których nie można zdefiniować za pomocą wyrażenia logicznego filter.

funkcje modyfikatora Filter

Filter funkcje modyfikatora umożliwiają wykonywanie więcej niż tylko dodawanie filters. Zapewniają one dodatkową kontrolę podczas modyfikowania kontekstu filter.

Funkcja Cel
REMOVEFILTERS Usuń allfilters, orfilters z jednej or więcej kolumn tabeli, or z kolumn all pojedynczej tabeli.
ALL 1, ALLEXCEPT, ALLNOBLANKROW Usuń filters z jednej or większej liczby kolumn, or z kolumn all pojedynczej tabeli.
KEEPFILTERS Dodaj filter bez usuwania istniejących filters w tych samych kolumnach.
USERELATIONSHIP Angażowanie nieaktywnej relacji między kolumnami related, w tym przypadku aktywna relacja automatycznie stanie się nieaktywna.
CROSSFILTER Zmodyfikuj kierunek filter (od obu do jednego, or z pojedynczego do obu) or wyłączyć relację.

1 funkcja ALLand jej warianty zachowują się jako modyfikatory filterand jako funkcje zwracające obiekty tabeli. If funkcja REMOVEFILTERS jest obsługiwana przez narzędzie, lepiej użyć jej do usunięcia filters.

Zwracanie value

value, który jest wynikiem wyrażenia.

Uwagi

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

    • If kolumny (tabeleor) nie są w kontekście filter, a nowe filters zostaną dodane do kontekstu filter w celu evaluate wyrażenia.
    • If kolumny (tabeleor) znajdują się już w kontekście filter, istniejące filters zostaną zastąpione przez nowe filters w celu evaluate wyrażenia CALCULATE.
  • Funkcja CALCULATE używana bez filters osiąga określone wymaganie. Przenosi kontekst wiersza na kontekst filter. Jest to wymagane, gdy wyrażenie (not modelu measure), które podsumowuje dane modelu, należy ocenić w kontekście wiersza. Ten scenariusz może wystąpić w formule kolumny obliczeniowej or po obliczeniu wyrażenia w funkcji iteratora. Należy pamiętać, że gdy model measure jest używany w kontekście wiersza, przejście kontekstu jest automatyczne.

  • Ta funkcja jest not obsługiwana do użycia w trybie DirectQuery w przypadku użycia w kolumnach obliczeniowych or reguł zabezpieczeń na poziomie wiersza.

Przykłady

Poniższa tabela Salesmeasure generuje wynik przychodu, ale tylko w przypadku produktów, które mają kolor niebieski.

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

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 filter. Do tabeli filter jest dodawana nowa Productkolumna Color —or— filter zastępuje wszystkie filter, które zostały już zastosowane do kolumny.

Poniższa tabela Salesmeasure tworzy stosunek sprzedaży w stosunku do sprzedaży dla kanałów sprzedaży all.

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%
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

Funkcja DIVIDE dzieli wyrażenie sumujące tabelę SalesSales Amount kolumny value (w kontekście filter) przy użyciu tego samego wyrażenia w zmodyfikowanym kontekście filter. Jest to funkcja CALCULATE, która modyfikuje kontekst filter przy użyciu funkcji REMOVEFILTERS, która jest funkcją modyfikatora filter. Usuwa z tabeli Sales Order Channel 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"
)

W tym przykładzie kontekst wiersza jest konwertowany na kontekst filter. Jest to nazywane przejściem kontekstu . Funkcja usuwa z kolumn tabeli customer customer kolumny CustomerKey.

funkcje kontekstu wierszawiersza