• 12.10.2017
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 2

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.

5/5 - (3 votes)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

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

  1. 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

  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *