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

Poslední aktualizace:

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.

DAX SUM a SUMX – Jak sčítat v jazyce DAX pro Power BI?
5 (100%) 3 vote[s]

Jmenuji se Honza Zedníček a nejčastěji se se mnou v civilu můžete potkat v kancelářích Kentico Software v Brně, kde působím jako BI Developer. Částečně pracuji také jako freelancer. Tuto práci dělám pro různé firmy již přes 5 let, ale Kentico je moje srdcovka ♡. Před tím jsem pracoval jako finanční controller třeba v Aero Vodochody a Sberbank nebo jako manažer dluhopisového programu v investiční skupině Unicapital. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti se snažím zapisovat na tento web - abych je nezapomněl (působením rumu ^^) a sloužily i někomu dalšímu. Nebojte se položit dotaz nebo reagovat do komentáře. Přihlašte se do naší nové Excel facebook skupiny Excel CZ/SK diskuse »

Category: DAX Nepropásněte Tags: ,

About Ing. Jan Zedníček - BI Developer, Finance controller

Jmenuji se Honza Zedníček a nejčastěji se se mnou v civilu můžete potkat v kancelářích Kentico Software v Brně, kde působím jako BI Developer. Částečně pracuji také jako freelancer. Tuto práci dělám pro různé firmy již přes 5 let, ale Kentico je moje srdcovka ♡. Před tím jsem pracoval jako finanční controller třeba v Aero Vodochody a Sberbank nebo jako manažer dluhopisového programu v investiční skupině Unicapital. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti se snažím zapisovat na tento web - abych je nezapomněl (působením rumu ^^) a sloužily i někomu dalšímu. Nebojte se položit dotaz nebo reagovat do komentáře. Přihlašte se do naší nové Excel facebook skupiny Excel CZ/SK diskuse »

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

  1. fdsf

    iterují po jednotlivých řádcích…slo by to vysvetlit co to znamena kdyz uz to je podtrzene? opravdu to je navod pro zacatecniky? Dale mi chybi priklad SUM vs SUMX z vaseho popisu se to pochopit opravdu ne

    Reply
  2. Honza Zedníček Post author

    naučit se Power BI vyžaduje určité vstupní znalosti dejme domu na úrovni pokročilého uživatele Excelu (kontingenční tabulky, funkce, základní makra). Pokud nevíte, co znamená slovo iterace tak se s Power BI na úrovni psaní funkcí netrapte, protože neporozumíte tomu, jak Power BI data zpracovává.

    Nelze očekávat, že se Power BI naučí každý a už vůbec ne s tímto Vaším přístupem, kdy si nejste schopen vyhledat z jiného zdroje termín, kterému nerozumíte. Začněte tím, že budete lépe pracovat s informačními zdroji…pak se vám budou i lépe učit nové věci.

    Hezký den
    Honza

    Reply

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.