Základy jazyka DAX v Power BI Desktop
Tento článek je určený pro uživatele, kteří s Power BI Desktopem teprve začínají. Jde o jednoduchý a rychlý úvod, ve kterém se dozvíte, jak používat Data Analysis Expressions (DAX) k řešení řady základních výpočtů a k analýze dat. V tomto článku najdete vysvětlení některých pojmů, řadu úkolů, které si můžete vyzkoušet, a prověrku znalostí, ve které si můžete otestovat, co jste se naučili. Až si tento článek projdete, měli byste chápat nejdůležitější základní principy DAX.
Co je DAX?
DAX je kolekce funkcí, operátorů a konstant, které se dají používat ve vzorcích nebo výrazech k výpočtům a vrácení jedné nebo více hodnot. Jednoduše řečeno – DAX vám pomáhá získávat nové informace z dat, která už máte ve svém modelu.
Proč je DAX tak důležitý?
Je snadné vytvořit nový soubor Power BI Desktopu a naimportovat do něj data. Můžete dokonce vytvořit sestavy, pomocí kterých získáte cenné informace, bez použití vzorců DAX. Ale co když budete potřebovat analyzovat procento růstu podle jednotlivých kategorií produktů a pro různé rozsahy kalendářních dat? Nebo co když budete chtít vypočítat meziroční růst v porovnání s tržními trendy? Vzorce DAX takové i mnohé jiné možnosti nabízejí. Když se naučíte vytvářet efektivní vzorce DAX, můžete díky tomu efektivněji využívat svoje data. Když takto získáte potřebné informace, můžete začít řešit skutečné obchodní problémy, které ovlivňují celkové výsledky firmy. To jsou možnosti, které vám Power BI díky DAX dává.
Požadavky
Možná už umíte vytvářet vzorce v Microsoft Excelu. Díky tomu můžete snadněji pochopit DAX, ale i když žádné zkušenosti s vytvářením excelových vzorců nemáte, po seznámení se základními principy popsanými v tomto článku můžete hned začít vytvářet vzorce DAX a řešit reálné úkoly z oblasti business intelligence.
Zaměříme se na objasnění toho, jak se vzorce DAX používají ve výpočtech, konkrétně v mírách a počítaných sloupcích. Měli byste znát práci s Power BI Desktopem, umět importovat data, přidávat pole do sestavy a měli byste chápat také základní principy měr a počítaných sloupců.
Ukázkový sešit
Nejlepším způsobem, jak se DAX naučit, je vytvořit několik základních vzorců, použít je s reálnými daty a podívat se na výsledky. V příkladech a úkolech používáme soubor Contoso Sales Sample for Power BI Desktop (Ukázka prodeje Contoso pro Power BI Desktop). Tento ukázkový soubor je stejný jako v kurzu: Vytvoření vlastních měr v Power BI Desktop článku.
Můžeme začít!
Seznámíme se s JAZYKEM DAX kolem tří základních konceptů: Syntaxe, funkce a kontext. V rámci DAX se setkáváme také s dalšími důležitými pojmy, ale když pochopíte tyto tři pojmy, budete mít ten nejlepší základ, na kterém můžete stavět svoje další znalosti a dovednosti při práci s DAX.
Syntax
Než začnete vytvářet svoje vlastní vzorce, nejprve se podíváme na syntaxi vzorců DAX. Syntaxe zahrnuje různé prvky, kterými jsou vzorce tvořené nebo – jednoduše řečeno – je to způsob zápisu vzorce. Tady je například jednoduchý vzorec DAX pro míru:

Tento vzorec obsahuje následující prvky syntaxe:
A. Název míry Total Sales (Celkový prodej)
B. Operátor znaménka rovná se (=), který označuje začátek vzorce Při výpočtu vrátí výsledek.
C. Funkce DAX SUM, která sečte všechna čísla ve sloupci Sales[SalesAmount] S funkcemi se podrobněji seznámíme později.
D. Závorky (), do kterých se uzavírá výraz obsahující jeden nebo více argumentů Většina funkcí vyžaduje alespoň jeden argument. Argument předává funkci hodnotu.
E. Odkazovaná tabulka Sales (Prodej)
F. Odkazovaný sloupec [SalesAmount] v tabulce Sales (Prodej). Díky tomuto argumentu funkce SUM pozná, ve kterém sloupci má sečíst hodnoty.
Když se snažíte porozumět vzorci DAX, často pomůže, když si jednotlivé prvky převedete do každodenního jazyka, ve kterém přemýšlíte a mluvíte. Tuto funkci například můžete číst takto:
Pro míru s názvem Total Sales (Celkový prodej), vypočítat (=) SUM (SOUČET) hodnot ve sloupci [SalesAmount] (Částka prodeje) v tabulce Sales (Prodej).
Když tuto míru přidáte do sestavy, vypočítá a vrátí hodnoty sečtením částek prodeje pro každé další pole, které zahrneme, například Cell Phones in the USA (Mobilní telefony v USA).
Možná si myslíte, že tato míra dělá stejnou věc, jako kdybych chtěla přidat pole SalesAmount do sestavy? No, jo. Existuje ovšem dobrý důvod, proč bychom měli vytvořit vlastní míru, která sečte hodnoty z pole SalesAmount – můžeme ji totiž použít jako argument v dalších vzorcích. Teď se vám to může zdát trochu matoucí, ale až proniknete hlouběji do tajů práce se vzorci DAX, umožní vám pochopení této míry, aby vaše vzorce a modely byly efektivnější. Dále uvidíte, že se míra Total Sales (Celkový prodej) později objeví jako argument v dalších vzorcích.
Probereme si ještě pár dalších věcí ohledně tohoto vzorce. Použili jsme funkci SUM. Funkce jsou předem zapsané vzorce, které usnadňují složité výpočty a manipulace s čísly, daty, časem, textem a dalšími položkami. S funkcemi se podrobněji seznámíme později.
Všimli jste si také, že před sloupcem s názvem [SalesAmount] je tabulka Sales, do které tento sloupec patří. Tento název se označuje jako plně kvalifikovaný název sloupce – v něm je před názvem sloupce název tabulky. Sloupce odkazované ve stejné tabulce nevyžadují, aby byl název tabulky obsažený ve vzorci. Díky tomu můžou být dlouhé vzorce odkazující na mnoho sloupců kratší a snadněji čitelné. Je ale vhodné zahrnout název tabulky do vzorců měr, a to i v případě, že je ve stejné tabulce.
Poznámka
Pokud název tabulky obsahuje mezery, vyhrazená klíčová slova nebo nepovolené znaky, je potřeba uzavřít název tabulky do jednoduchých uvozovek. Do uvozovek je třeba také uzavřít názvy tabulek, pokud obsahují znaky mimo rozsah alfanumerických znaků ANSI – bez ohledu na to, jestli vaše národní prostředí tuto sadu znaků podporuje, nebo ne.
Je důležité, aby vzorce měly správnou syntaxi. Pokud syntaxe není správná, ve většině případů se vrátí chyba syntaxe. Jindy může být syntaxe správná, ale vrácené hodnoty nemusejí být takové, jaké očekáváte. Editor DAX v Power BI Desktopu obsahuje návrhy. Jde o funkci, která slouží k vytváření syntakticky správných vzorců tím, že vám pomáhá vybrat správné elementy.
Vytvořme si jednoduchý vzorec. Tento úkol vám pomůže lépe pochopit syntaxi vzorců a to, jak vám funkce návrhů na řádku vzorců může pomoct.
Úkol: Vytvoření vzorce míry
Stáhněte si a otevřete soubor Contoso Sales Sample for Power BI Desktop (Ukázka prodeje Contoso pro Power BI Desktop).
V zobrazení sestavy v seznamu polí klikněte pravým tlačítkem na tabulku Sales (Prodej) a potom vyberte Nová míra.
Na řádku vzorců nahraďte Measure tak, že zadáte nový název míry – Previous Quarter Sales (Prodej za předchozí čtvrtletí).
Za znaménko rovná se zadejte prvních pár písmen CAL a pak dvakrát klikněte na funkci, kterou chcete použít. V tomto vzorci chcete použít funkci CALCULATE.
Funkci CALCULATE použijeme k vyfiltrování hodnot, které chceme sečíst, podle argumentu, který předáme do funkce CALCULATE. Takové funkce se označují jako vnořené. Funkce CALCULATE má minimálně dva argumenty. První je výraz, který se má vyhodnotit, a druhý je filtr.
Za levou závorku ( pro funkci CALCULATE zadejte SUM a pak další levou závorku (.
Teď předáme argument do funkce SUM.
Začněte psát Sal a pak vyberte Sales[SalesAmount] a zadejte pravou závorku ).
To je první argument výrazu pro naši funkci CALCULATE.
Zadejte čárku (,) a za ní mezeru, abyste zadali první filtr, a pak zadejte PREVIOUSQUARTER.
Funkci časového měřítka PREVIOUSQUARTER použijete k vyfiltrování výsledků součtu SUM podle předchozího čtvrtletí.
Za levou závorku ( pro funkci PREVIOUSQUARTER zadejte Calendar[DateKey].
Funkce PREVIOUSQUARTER má jeden argument – sloupec obsahující souvislý rozsah kalendářních dat. V našem případě to je sloupec DateKey v tabulce Calendar.
Uzavřete oba argumenty předané do funkce PREVIOUSQUARTER a funkce CALCULATE zadáním dvou pravých závorek )).
Vzorec by teď měl vypadat takto:
Previous Quarter Sales = CALCULATE(SUM(Sales[SalesAmount]), PREVIOUSQUARTER(Calendar[DateKey]))
Vyberte značku
zaškrtnutí na řádku vzorců nebo stisknutím klávesy Enter ověřte vzorec a přidejte ho do tabulky Sales (Prodej).
Zvládli jste to! Právě jste pomocí DAX vytvořili složitou míru a nebylo to zrovna snadné. Tento vzorec vypočítá celkový prodej za předchozí čtvrtletí v závislosti na filtrech použitých v sestavě. Pokud například vložíme salesAmount a novou míru Prodeje z předchozí čtvrtletí z tabulky Prodej do skupinového sloupcového grafu, pak z tabulky Kalendář přidáme jako průřez rok a vybereme 2011 a pak jako další průřez přidáme QuarterOfYear a vybereme 4, získáme graf takto:

Mějte na paměti, že ukázkový model obsahuje pouze malé množství prodejních dat od 1. 1. 2011 do 19. 19. 2013. Pokud vyberete rok nebo čtvrtletí, kdy salesAmount nejde sečíst, nebo vaše nová míra nemůže vypočítat prodejní data pro aktuální nebo předchozí čtvrtletí, nezobrazí se žádná data pro dané období. Pokud například vyberete rok 2011 pro Rok a 1 pro QuarterOfYear, nezobrazí se žádná data pro předchozí čtvrtletí prodeje, protože pro čtvrtý čtvrtletí 2010 nejsou žádná data.
Právě jste se seznámili s několika důležitými aspekty vzorců DAX:
Tento vzorec obsahoval dvě funkce. Funkce časového měřítka PREVIOUSQUARTER je vnořená jako argument předaný do funkce filtrování CALCULATE.
Vzorce DAX můžou obsahovat až 64 vnořených funkcí. Není příliš pravděpodobné, že by nějaký vzorec tolik vnořených funkcí skutečně obsahoval. V praxi by asi bylo obtížné takový vzorec vytvořit a vyladit, a i přes to by asi nefungoval příliš rychle.
V tomto vzorci jsme také použili filtry. Filtry zužují to, co se má vypočítat. V tomto případě jste vybrali jeden filtr jako argument, který je vlastně výsledkem další funkce. S filtry se podrobněji seznámíte později.
Použili jste funkci CALCULATE. To je jedna z nejúčinnějších funkcí v DAX. Až budete vytvářet modely a složitější vzorce, budete tuto funkci pravděpodobně často používat. I když na podrobnější rozbor funkce CALCULATE v tomto článku není prostor, až se s DAX blíže seznámíte, věnujte této funkci náležitou pozornost.
Syntaxe – rychlý kvíz
K čemu slouží toto tlačítko na řádku vzorců?

Co vždy ohraničuje název sloupce ve vzorci DAX?
Odpovědi najdete na konci tohoto článku.
Functions
Funkce jsou předdefinované vzorce, které provádějí výpočty pomocí specifických hodnot (nazývaných argumenty) v určitém pořadí nebo struktuře. Argumenty můžou být jiné funkce, jiný vzorec, výrazy, odkazy na sloupce, čísla, text, logické hodnoty, jako je TRUE nebo FALSE, nebo konstanty.
DAX obsahuje následující kategorie funkcí: funkce data a času, funkce časového měřítka, informační funkce, logické funkce, matematické funkce, statistické funkce, textové funkce, funkce pro nadřazené a podřízené položky a jiné funkce. Pokud znáte funkce v Excelu, mnoho funkcí v DAX se vám bude zdát podobných. Funkce DAX jsou ovšem jedinečné v následujících aspektech:
Funkce DAX vždy odkazuje na úplný sloupec nebo tabulku. Pokud chcete použít jenom konkrétní hodnoty z tabulky nebo sloupce, můžete do vzorce přidat filtry.
Pokud výpočty potřebujete přizpůsobit řádek po řádku, DAX nabízí funkce umožňující použít aktuální hodnotu řádku nebo související hodnotu jako typ argumentu, abyste mohli provádět výpočty, které se liší podle kontextu. S kontextem se podrobněji seznámíte později.
DAX obsahuje mnoho funkcí, které vrací tabulku, nikoli hodnotu. Tabulka se nezobrazí, ale slouží k zadávání vstupních dat do dalších funkcí. Můžete například načíst tabulku a potom v ní vypočítat jedinečné hodnoty nebo vypočítat dynamické součty ve vyfiltrovaných tabulkách nebo sloupcích.
Součástí DAX je řada funkcí časového měřítka. Tyto funkce umožňují definovat nebo vybrat rozsahy kalendářních dat a provádět na jejich základě dynamické výpočty. Můžete například porovnat součty v paralelních časových obdobích.
V Excelu je oblíbená funkce SVYHLEDAT. Funkce DAX na rozdíl od funkce SVYHLEDAT v Excelu nepřijímají buňku ani oblast buněk jako odkaz. Funkce DAX ale jako odkaz přijímají sloupec nebo tabulku. Je třeba mít na paměti, že v Power BI Desktopu pracujete s relačním datovým modelem. Vyhledávání hodnot v jiné tabulce je snadné a ve většině případů k tomu nemusíte vytvářet žádný vzorec.
Jak vidíte, pomocí funkcí v DAX můžete vytvářet výkonné vzorce. A to jsme si zatím prošli jenom úplné základy funkcí. Až se s DAX lépe seznámíte, budete moct vytvářet vzorce pomocí mnoha různých funkcí. Jedním z nejlepších zdrojů, ze kterého můžete čerpat podrobné informace o funkcích DAX, je článek Informace o funkcích jazyka DAX.
Funkce – rychlý kvíz
- Na co funkce vždy odkazuje?
- Může vzorec obsahovat více než jednu funkci?
- Kterou kategorii funkcí byste použili ke zřetězení dvou textových řetězců do jednoho?
Odpovědi najdete na konci tohoto článku.
Kontext
Kontext je jedním z nejdůležitějších pojmů v DAX, které je třeba pochopit. V DAX existují dva typy kontextu – kontext řádku a kontext filtru. Nejprve se podíváme na kontext řádku.
Kontext řádku
Kontext řádku je asi nejsnadnější si představit jako aktuální řádek. Použije se vždy, když má vzorec funkci, která používá filtry k identifikaci jednoho řádku v tabulce. Tato funkce v podstatě použije kontext řádku pro každý řádek v tabulce, kterou filtruje. Tento typ kontextu řádku se nejčastěji uplatňuje pro míry.
Kontext filtru
Pochopení kontextu filtru může být trochu obtížnější, než tomu bylo u kontextu řádku. Nejjednodušší je představit si kontext filtru jako jeden nebo více filtrů použitých ve výpočtu, který určuje výsledek nebo hodnotu.
Kontext filtru nenahrazuje kontext řádku, spíše se používá spolu s kontextem řádku. Pokud chcete například dále zúžit hodnoty pro zahrnutí do výpočtu, můžete použít kontext filtru, který nejen určuje kontext řádku, ale také určuje konkrétní hodnotu (filtr) v tomto kontextu řádku.
Na kontext filtru se můžete snadno podívat v sestavách. Když například přidáte TotalCost (Celkové náklady) do vizualizace a potom přidáte Year (Rok) a Region (Oblast), definujete kontext filtru, který vybere podmnožinu dat na základě daného roku nebo oblasti.
Proč je kontext filtru pro DAX tak důležitý? Vzhledem k tomu, že kontext filtru lze nejsnáze použít přidáním polí do vizualizace, lze kontext filtru použít také ve vzorci DAX tak, že definujete filtr pomocí funkcí, jako jsou ALL, RELATED, FILTER, CALCULATE, podle relací a dalších měr a sloupců. Podívejme se například na následující vzorec v míře s názvem Store Sales (Prodej v obchodě):

Abychom tento vzorec lépe pochopili, můžeme si ho rozložit na jednotlivé prvky (podobně jako ostatní vzorce).
Tento vzorec obsahuje následující prvky syntaxe:
A. Název míry Store Sales (Prodej v obchodě)
B. Operátor znaménka rovná se (=), který označuje začátek vzorce
C. Funkce CALCULATE, která vyhodnotí výraz jako argument v kontextu, který se mění podle zadaných filtrů
D. Závorky (), do kterých se uzavírá výraz obsahující jeden nebo více argumentů
E. Míra [Total Sales] (Celkový prodej) ve stejné tabulce jako výraz. Míra Total Sales má vzorec: =SUM(Sales[SalesAmount]).
F. Čárka (,), která odděluje první argument výrazu od argumentu filtru
G. Plně kvalifikovaný odkazovaný sloupec Channel[ChannelName]. To je náš kontext řádku. Každý řádek v tomto sloupci určuje kanál, jako je Store nebo Online.
H. Konkrétní hodnota Store jako filtr To je náš kontext filtru.
Tento vzorec zajišťuje, že se vypočítají jen hodnoty prodeje definované mírou Total Sales jen pro řádky ve sloupci Channel[ChannelName] s hodnotou Store jako filtrem.
Dokážete si tedy představit, jak velké možnosti definování kontextu filtru v rámci vzorce nabízí. Možnost odkazovat na konkrétní hodnotu v související tabulce je jen jedním z takových příkladů. Nedělejte si starosti, pokud kontextu hned plně neporozumíte. Až budete vytvářet vlastní vzorce, potom kontext lépe pochopíte a poznáte, proč je v DAX tak důležitý.
Kontext – rychlý kvíz
- Které dva typy kontextu znáte?
- Co je kontext filtru?
- Co je kontext řádku?
Odpovědi najdete na konci tohoto článku.
Souhrn
Teď už chápete základní principy nejdůležitějších pojmů v DAX a můžete začít vytvářet vlastní vzorce DAX pro míry. DAX může být celkem složité se naučit. Máte ale k dispozici mnoho zdrojů informací, ze kterých můžete čerpat. Po přečtení tohoto článku a vyzkoušení několika vlastních vzorců můžete získat podrobnější informace o dalších pojmech a vzorcích v DAX, pomocí kterých můžete řešit skutečné obchodní problémy. Můžete využít mnoho zdrojů informací. Nejdůležitějším je článek Informace o jazyce Data Analysis Expressions (DAX).
Vzhledem k tomu, že se DAX používá už několik let v jiných nástrojích Microsoft BI (jako je například Power Pivot nebo tabulkové modely Analysis Services), najdete mnoho užitečných informací. Další informace můžete najít také v knihách, dokumentech white paper a na blozích specialistů z Microsoftu i dalších odborníků na BI. Můžete také začít na wikiwebu DAX Resource Center na TechNetu.
Rychlý kvíz – odpovědi
Syntaxe:
- Ověří a zadá míru do modelu.
- Hranaté závorky [].
Funkce:
- Tabulka a sloupec
- Ano. Vzorec může obsahovat až 64 vnořených funkcí.
- Textové funkce
Kontext:
- Kontext řádku a kontext filtru
- Jeden nebo více filtrů ve výpočtu, který určuje jednu hodnotu
- Aktuální řádek