Funkce CALCULATE je důležitým pomocníkem pro velké množství výpočtů pro ty z vás, kteří v Power BI nebo PowerPivot aktivně vzorcují. Pochopení toho, jak funkce funguje a jak se používá, není na první pohled úplně jednoduché. A od toho je tu tento článek.
Syntaxe funkce: CALCULATE( <expression>, <filter 1>, <filter 2>… )
- Expression: Prvním parametrem je výraz (expression), což je v drtivé většině případů nějaká agregační DAX funkce typu SUM, MIN, MAX, COUNTROWS nebo její kolegyně X funkce (např. SUMX)
- Filter 1 – Filter n: Dále zadáváme parametr typu filter. Filtrů můžeme zadat mnoho a aplikovat nějakou AND/OR logiku. Filtr může být zadán více způsoby:
- Jako jako jednoduchá podmínka typu Produkt = “auto” …
- ..nebo jako další funkce, nejčasteji table funkce FILTER, která funguje jako podmínka – omezí hodnoty, které do funkce calculate vstupují
Příklad funkce: Prodeje modrých aut = CALCULATE ( SUM ( Prodeje[Tržby] ), Produkty[BarvaProduktu] = “modrá” )
Upozornění: Výraz, který vložíme do prvního parametru, musí být vyhodnocen tak, aby výsledek byl vždy pouze 1 hodnota (value).. Výsledkem funkce není tabulka ale hodnota (value), proto používáme nejčastěji agregační funkce.
Funkce CALCULATE na příkladu v Power BI
Pojďme si funkci ukázat na několika případech v prostředí Power BI desktop. Budu pracovat se čtyřimi tabulkami, které obsahují tržby (FactInternetSales), Teritoria (Territories), Měny (DimCurrency) a Kalendář (DimDate) viz model.
Krok 1) Začnu jednoduše, přípravím si jednoduchý power BI report s tabulkou, do které budu postupně přidávat nové sloupce. Prozatím v tabulce nechám zobrazit Tržby po jednotlivých teritoriích:
Krok 2) V dalším sloupci (2), který si zobrazím mě zajímají celkové tržby, které byly realizovány v měně USD. No a poslední sloupec bude poměrem mezi oběma předchozími sloupci a bude říkat jaký je poměr mezi tržbami v USD oproti všem tržbám v %. Konečně přichází na řadu DAX funkce CALCULATE:
Vzorec Tržby zaplacené v USD:
Tržby zaplacené v USD :=
CALCULATE (
SUM ( FactInternetSales[Tržby celkem] ),
DimCurrency[CurrencyName] = "US Dollar"
)
Vzorec % USD/Tržby celkem:
% USD/Tržby celkem =
CALCULATE (
SUM ( FactInternetSales[Tržby celkem] ),
DimCurrency[CurrencyName] = "US Dollar"
)
/ SUM ( FactInternetSales[Tržby celkem] )
Výsledek (viz níže) je fajn a vidíme všechno co potřebujem, celkové prodeje, prodeje v USD a jejich poměr. Výsledek můžeme ještě doplnit nějakým grafem a je hotovo.
Na závěř ještě připojuju Power BI report. Zvětšit si ho můžete přes tlačítko v pravém dolním rohu