CALCULATE
platí pro:počítaný sloupecPočítaná tabulkaMeasure vizuálu
Vyhodnotí výraz v upraveném kontextu filter.
Poznámka
K dispozici je také funkce CALCULATETABLE. Provádí přesně stejné funkce, except upravuje kontext filter použitý u výrazu, který vrací objekt tabulky tabulky.
Syntax
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parametry
Semestr | Definice |
---|---|
expression |
Výraz, který se má vyhodnotit. |
filter1, filter2,… |
(Volitelné) Logické výrazy or výrazy tabulky, které definují filters, orfilter modifikační funkce. |
Výraz použitý jako parametr first je v podstatě stejný jako measure.
Filters může být:
- Logické výrazy filter
- Výrazy filter tabulky
- Filter funkce úprav
Pokud existuje více filters, lze je vyhodnotit pomocí AND (&&
) logického operátoru, což znamená, že podmínky all musí být TRUE
, or logickým operátorem OR (||
), což znamená, že lze true.
Logické výrazy filter
Logický výraz filter je výraz, který se vyhodnotí jako TRUE
orFALSE
. Existuje několik pravidel, která musí dodržovat:
- Mohou odkazovat na sloupce z jedné tabulky.
- Nemůžou odkazovat na míry.
- Nemůžou použít vnořenou funkci CALCULATE.
Od verze Power BI Desktopu ze září 2021 platí také toto:
- Nemůžou používat funkce, které prohledávají or vracejí tabulku, pokud nejsou předány jako argumenty agregačním funkcím.
-
mohou obsahovat agregační funkci, která vrací skalární value. Například
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Výraz table filter
Výraz tabulky filter použije objekt tabulky jako filter. Může se jednat o odkaz na tabulku modelu, ale s větší pravděpodobností se jedná o funkci, která vrací objekt tabulky. Pomocí funkce FILTER můžete použít složité filter podmínky, včetně těch, které nelze definovat pomocí logického výrazu filter.
modifikační funkce Filter
Filter modifikační funkce umožňují provádět více než jednoduše přidávat filters. Poskytují vám další ovládací prvek při úpravě filter kontextu.
Funkce | Účel |
---|---|
REMOVEFILTERS | Odeberte allfilters, orfilters z jednoho or více sloupců tabulky, or ze all sloupců jedné tabulky. |
ALL 1, ALLEXCEPT, ALLNOBLANKROW | Odeberte filters z jednoho or více sloupců or ze sloupců all jedné tabulky. |
KEEPFILTERS | Přidejte filter bez odebrání existujících filters ve stejných sloupcích. |
USERELATIONSHIP | Zapojte neaktivní relaci mezi related sloupci, v takovém případě se aktivní relace automaticky stane neaktivní. |
CROSSFILTER | Upravte filter směr (z obou do jednoho, or z jednoho na oba) or relaci zakažte. |
1 funkce ALLand se její varianty chovají jako modifikátory filterand jako funkce, které vracejí objekty tabulky. If nástroj podporuje funkci REMOVEFILTERS, je lepší ji použít k odebrání filters.
Vrácení value
value, který je výsledkem výrazu.
Poznámky
Pokud jsou k dispozici výrazy filter, funkce CALCULATE upraví kontext filter tak, aby evaluate výrazu. Pro každý výraz filter existují dva možné standardní výsledky, pokud je výraz filternot zabalený do funkce KEEPFILTERS:
- If sloupce (tabulkyor) nejsou v kontextu filter, pak se do filters výrazu přidají nové filter kontextu evaluate.
- If sloupce (tabulkyor) už jsou v kontextu filter, stávající filters se přepíší novým filters tak, aby evaluate výraz CALCULATE.
Funkce CALCULATE použitá bez filters dosáhne konkrétního požadavku. Přemísí kontext řádku na filter kontext. Vyžaduje se, když se výraz (not modelu measure), který sumarizuje data modelu, musí vyhodnotit v kontextu řádku. K tomuto scénáři může dojít ve vzorci počítaného sloupce or při vyhodnocení výrazu ve funkci iterátoru. Všimněte si, že když se measure modelu používá v kontextu řádku, je přechod kontextu automatický.
Tato funkce je not podporována pro použití v režimu DirectQuery při použití v počítaných sloupcích or pravidla zabezpečení na úrovni řádků (RLS).
Příklady
Následující tabulka Salesmeasure definice vytvoří výsledek výnosů, ale pouze pro produkty, které mají modrou barvu.
Příklady v tomto článku lze použít s modelem sample Adventure Works DW 2020 Power BI Desktop. Pokud chcete model získat, přečtěte simodelu
Blue Revenue =
CALCULATE(
SUM(Sales[Sales Amount]),
'Product'[Color] = "Blue"
)
Kategorie | Sales Amount | Modré výnosy |
---|---|---|
Příslušenství | 1 272 057,89 Kč | 165 406,62 Kč |
Kola | 94 620 526,21 Kč | 8 374 313,88 Kč |
Oděv | 2 117 613,45 Kč | 259 488,37 Kč |
Součásti | 11 799 076,66 Kč | 803 642,10 Kč |
celkem | 109 809 274,20 | 9 602 850,97 USD |
Funkce CALCULATE vyhodnotí sum tabulky SalesSales Amount (Částka prodeje) sloupec v upraveném kontextu filter. Do filter tabulky se přidá nový Product sloupec Barva –or– filter přepíše všechny filter, které už jsou u sloupce použité.
Následující definice tabulky Salesmeasure vytvoří poměr prodeje oproti prodeji pro prodejní kanály all.
Kanál | Sales Amount | Revenue % Total Channel |
---|---|---|
Internet | 29 358 677,22 Kč | 26,74% |
Distributor | 80 450 596,98 Kč | 73,26% |
celkem | 109 809 274,20 | 100.00% |
Revenue % Total Channel =
DIVIDE(
SUM(Sales[Sales Amount]),
CALCULATE(
SUM(Sales[Sales Amount]),
REMOVEFILTERS('Sales Order'[Channel])
)
)
Funkce DIVIDE vydělí výraz, který sčítá tabulku SalesSales Amount column value (v kontextu filter) stejným výrazem v upraveném kontextu filter. Je to CALCULATE funkce, která upravuje kontext filter pomocí funkce REMOVEFILTERS, což je filter modifikátorová funkce. Odebere filters ze sloupce Sales Order table Channel.
Následující Customer table calculated column definition klasifikuje zákazníky do třídy věrnosti. Jedná se o velmi jednoduchý scénář: Když jsou výnosy vytvořené zákazníkem nižší než 2500 USD, jsou klasifikovány jako Nízké; jinak jsou high.
Customer Segment =
IF(
CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
"Low",
"High"
)
V tomto příkladu je kontext řádku převeden na kontext filter. Označuje se jako kontextový přechod. Funkce ALLEXCEPT odebere filters ze sloupců tabulky allCustomerexcept sloupec CustomerKey.