DAX SUM a SUMX – Jak sčítat v jazyce DAX pro Power BI?

Jistě jste si všimli, že v DAX existují funkce podobné těm z Excelu (viz článek zde). Oproti Excel funkcím má ale DAX jednu zvláštnost. Některé agregační funkce mají další podobnou funkci, která končí na X – například SUM a SUMX nebo COUNT a COUNTX. Často dávají tyto funkce stejné výsledky a není na první pohled jednoduché identifikovat rozdíl. Máme tu tedy menší Hamletovskou otázku.

Agregační funkce – Agregátory (SUM) a Iterátory (SUMX) v DAX

SUM a SUMX jsou agregační funkce provádějící součet (v metrikách), které  v DAXu můžeme ještě dále rozdělit do 2 sexy znějících kategorií – Agregátory a Iterátory. Zatímco SUM (a její sestry COUNT apod.) patří do kategorie tzv. agregátorů (aggregators), tak SUMX je v DAX naopak iterátorem. Co to vlastně znamená?

1) DAX funkce SUM jako Agragátor

Všechny agregátory včetně SUM fungují tak, že provedou agregeraci přes celý sloupec (column). Když se podíváme na syntaxi funkce, tak je vidět že argumentem funkce je vždy pouze 1 parametr, kterým je <sloupec>.

Syntaxe SUM:

Z toho vyplývá, že do argumentu funkce tedy není možné napsat nějaký výraz (expression), např. nelze udělat SUM(X * Y). Vždy se jedná o agregaci nějakého sloupce.

DAX SUM

2) DAX funkce SUMX – jako Iterátor sčítá řádek po řádku

SUMX je funkce, která má více možností pro využítí. X funkcím říkáme iterátory, protože neagregují celý sloupec jako třeba SUM, ale iterují po jednotlivých řádcích. Funkce navíc dokáže přijmout výraz jako argument, podívejme se na syntaxi:

Argumentem funkce je tabulka a expression (může být sloupec nebo výraz). Díky tomu, že funkce přijímá expression a navíc dochází k iteraci po jednotlivých řádcích tabulky, nabízí funkce navíc 2 důležité výhody:

  • Chceme-li reportovat z tabulky, kde se musí metrika nejprve spočítat, tak nemusíme zakládat nový sloupec (calculated column). Můžeme rovnou použít SUMX
  • Díky expression dostáváme nové možnosti, jak pracovat s různými operacemi typu podmínky (filtry), apod. Jinými slovy můžeme použítí funkce podmínit.

Funkce má ale 1 zásadní nevýhodu – tím že iteruje, tak je daleko pomalejší než její kolegyně SUM. Je vhodné používat SUMX pouze v případech kdy je to opravdu potřeba.

Srovnání SUM a SUMX na příkladu v Power BI

Podívejme se na pár příkladů vzorců obou funkcí přímo v Power BI. Budeme pracovat v prostředí se 3 tabulkami (Tržby, Teritoria a Kalendář).

FactInternetSales obsahuje informace o prodejích výrobků, jejich jednotkové ceny, náklady a množství. V tabulce FactInternetSales vytvořím 2 nové metriky a výsledek vizualizujem tak, že si zobrazíme tržby přes teritoria:

  • Tržby celkem SUM = SUM(FactInternetSales[Tržby])
  • Tržby celkem jako SUMX = SUMX(FactInternetSales;FactInternetSales[UnitPrice] * FactInternetSales[Quantity])

Prozatím jediný rozdíl mezi funkcemi je v tom, že jsem mohl v SUMX sčítat pomocí výrazu FactInternetSales[UnitPrice] * FactInternetSales[Quantity]. Jinak je výsledek stejný.

Přidáme další sloupec Tržby Rok 2013 – A to je přesně situace, kdy už musím použít funkci SUMX. Chcisi totiž ve sloupci zobrazit pouze tržby roku 2013 a agregování tímto podmiňuju (viz vzorec na obrázku). Tržby, které nesplňují podmínku na sečteny nejsou. Funkce RELATED, kterou jsem po podmínku použil je popsána v článku zde.

Rozdíl SUM a SUMX v jazyce DAX

Na závěř ještě Power BI dashboard vyrobený v Power BI desktop aplikaci. Report si můžete zvětšit přes tlačítko ve spodní části reportu vpravo.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.