Přehled jazyka DAX

DaX (Data Analysis Expressions) je jazyk výrazů vzorců používaný ve službě Analysis Services, Power BI a Power Pivotu v Excelu. Vzorce DAX zahrnují funkce, operátory a hodnoty pro provádění pokročilých výpočtů a dotazů na data v souvisejících tabulkách a sloupcích v tabulkových datových modelech.

Tento článek obsahuje pouze základní úvod k nejdůležitějším konceptům jazyka DAX. Popisuje jazyk DAX, protože se vztahuje na všechny produkty, které ho používají. Některé funkce se nemusí vztahovat na určité produkty nebo případy použití. Projděte si dokumentaci k produktu popisující její konkrétní implementaci jazyka DAX.

Výpočty

Vzorce DAX se používají v mírách, počítaných sloupcích, počítaných tabulkách a zabezpečení na úrovni řádků.

Opatření

Míry jsou vzorce dynamického výpočtu, ve kterých se výsledky mění v závislosti na kontextu. Míry se používají v vytváření sestav, které podporují kombinování a filtrování dat modelu pomocí více atributů, jako je sestava Power BI nebo excelová kontingenční tabulka nebo kontingenční graf. Míry se vytvářejí pomocí řádku vzorců DAX v návrháři modelů.

Vzorec v míře může používat standardní agregační funkce automaticky vytvořené pomocí funkce Automatické shrnutí, například POČET nebo SUMA, nebo můžete definovat vlastní vzorec pomocí řádku vzorců DAX. Pojmenované míry lze předat jako argument jiným mírou.

Když nadefinujete vzorec pro míru v řádku vzorců, zobrazí funkce popisku náhled výsledků součtu v aktuálním kontextu, ale jinak výsledky nebudou okamžitě výstupem. Důvodem, proč nelze okamžitě zobrazit (filtrované) výsledky výpočtu, je to, že výsledek míry nelze určit bez kontextu. K vyhodnocení míry vyžaduje klientskou aplikaci pro vytváření sestav, která může poskytnout kontext potřebný k načtení dat relevantních pro každou buňku a následné vyhodnocení výrazu pro každou buňku. Tento klient může být kontingenční tabulkou nebo kontingenčním grafem Excelu, sestavou Power BI nebo výrazem tabulky v dotazu DAX v aplikaci SQL Server Management Studio (SSMS).

Bez ohledu na klienta se pro každou buňku ve výsledcích spustí samostatný dotaz. To znamená, že každá kombinace záhlaví řádků a sloupců v kontingenční tabulce nebo každý výběr průřezů a filtrů v sestavě Power BI vygeneruje jinou podmnožinu dat, na které se míra počítá. Například pomocí tohoto velmi jednoduchého vzorce míry:

Total Sales = SUM([Sales Amount])

Když uživatel umístí míru TotalSales do sestavy a potom umístí sloupec Product Category z tabulky Product (Kategorie produktu) do filtrů, vypočítá se součet sales Amount (Částka prodeje) a zobrazí se pro každou kategorii produktu.

Na rozdíl od počítaných sloupců zahrnuje syntaxe míry název míry před vzorcem. V uvedeném příkladu se název Total Sales zobrazí před vzorcem. Po vytvoření míry se název a jeho definice zobrazí v seznamu polí klientské aplikace pro vytváření sestav a v závislosti na perspektivách a rolích budou k dispozici pro všechny uživatele modelu.

Další informace najdete v následujících tématech:
Míry v Power BI Desktopu
Míry ve službě Analysis Services
Míry v Power Pivotu

Počítané sloupce

Počítaný sloupec je sloupec, který přidáte do existující tabulky (v návrháři modelů) a pak vytvoříte vzorec DAX, který definuje hodnoty sloupce. Pokud počítaný sloupec obsahuje platný vzorec DAX, hodnoty se počítají pro každý řádek hned po zadání vzorce. Hodnoty se pak ukládají v datovém modelu v paměti. Například v tabulce Kalendářní datum, když je vzorec zadán do řádku vzorců:

= [Calendar Year] & " Q" & [Calendar Quarter]

Hodnota pro každý řádek v tabulce se vypočítá tak, že vezme hodnoty ze sloupce Kalendářní rok (ve stejné tabulce Kalendářní rok), přidá mezeru a velké písmeno Q a pak přidá hodnoty ze sloupce Kalendářní čtvrtletí (ve stejné tabulce Kalendářní datum). Výsledek pro každý řádek v počítaném sloupci se vypočítá okamžitě a zobrazí se například jako 2017 Q1. Hodnoty sloupců se přepočítávají jenom v případě, že se tabulka nebo nějaká související tabulka zpracuje (aktualizuje) nebo se model uvolní z paměti a pak se znovu načte, například při zavření a opětovném otevření souboru Power BI Desktopu.

Další informace najdete v následujících tématech:
Počítané sloupce v Power BI Desktopu
Počítané sloupce ve službě Analysis Services
Počítané sloupce v Power Pivotu

Počítané tabulky

Počítaná tabulka je počítaný objekt založený na výrazu vzorce odvozeného ze všech nebo částí jiných tabulek ve stejném modelu. Místo dotazování a načítání hodnot do sloupců nové tabulky ze zdroje dat definuje vzorec DAX hodnoty tabulky.

Počítané tabulky můžou být užitečné v dimenzi role. Příkladem je tabulka Date (DatumObjednávky), ShipDate (Datum Expedice) nebo DueDate (Datum splatnosti) v závislosti na relaci cizího klíče. Když vytvoříte počítanou tabulku pro ShipDate explicitně, získáte samostatnou tabulku, která je k dispozici pro dotazy, stejně jako všechny ostatní tabulky. Počítané tabulky jsou také užitečné při konfiguraci filtrované sady řádků, podmnožinu nebo nadmnožinu sloupců z jiných existujících tabulek. To vám umožní zachovat původní tabulku beze změny při vytváření variant této tabulky pro podporu konkrétních scénářů.

Počítané tabulky podporují relace s jinými tabulkami. Sloupce v počítané tabulce obsahují datové typy, formátování a můžou patřit do kategorie dat. Počítané tabulky lze pojmenovat a zobrazit nebo skrýt stejně jako jakoukoli jinou tabulku. Počítané tabulky se přepočítávají, pokud se některá z tabulek, ze kterých načítá data, aktualizují nebo aktualizují.

Další informace najdete v následujících tématech:
Počítané tabulky v Power BI Desktopu
Počítané tabulky ve službě Analysis Services

Zabezpečení na úrovni řádků

V případě zabezpečení na úrovni řádků musí vzorec DAX vyhodnotit logickou podmínku PRAVDA/NEPRAVDA, která definuje, které řádky můžou vrátit výsledky dotazu členy konkrétní role. Například pro členy role Sales (Prodej) tabulka Customers (Zákazníci) s následujícím vzorcem DAX:

= Customers[Country] = "USA"

Členové prodejní role budou moct zobrazit data jenom pro zákazníky v USA a agregace, jako je suma, se vrátí jenom pro zákazníky v USA. Zabezpečení na úrovni řádků není v Power Pivotu v Excelu dostupné.

Při definování úrovně řádků pomocí vzorce DAX vytváříte povolenou sadu řádků. Tím se nezamítá přístup k jiným řádkům; nejsou jednoduše vráceny jako součást povolené sady řádků. Jiné role můžou povolit přístup k řádkům vyloučeným vzorcem DAX. Pokud je uživatel členem jiné role a zabezpečení na úrovni řádků této role umožňuje přístup k této konkrétní sadě řádků, může uživatel zobrazit data pro tento řádek.

Vzorce zabezpečení na úrovni řádků platí pro zadané řádky i související řádky. Pokud má tabulka více relací, filtry použijí zabezpečení pro aktivní relaci. Vzorce zabezpečení na úrovni řádků se protínají s jinými vzorci definovanými pro související tabulky.

Další informace najdete v následujících tématech:
Zabezpečení na úrovni řádků s využitím Power BI
Role ve službě Analysis Services

Dotazy

Dotazy DAX je možné vytvářet a spouštět v sadě SQL Server Management Studio (SSMS) a opensourcových nástrojích, jako je DAX Studio (daxstudio.org). Na rozdíl od vzorců výpočtu JAZYKA DAX, které je možné vytvářet pouze v tabulkových datových modelech, lze dotazy DAX spouštět také s multidimenzionálními modely Analysis Services. Dotazy DAX se často snadněji zapisují a efektivněji než dotazy MDX (Multidimensional Data Expressions).

Dotaz DAX je příkaz podobný příkazu SELECT v jazyce T-SQL. Nejzásadnější typ dotazu DAX je příkaz evaluate . Příklad:

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Vrátí v tabulce Výsledky pouze produkty s Sejf tyStockLevel menší než 200 ve vzestupném pořadí podle EnglishProductName.

Míry můžete vytvořit jako součást dotazu. Míry existují pouze po dobu trvání dotazu. Další informace najdete v dotazech DAX.

Receptury

Vzorce DAX jsou nezbytné pro vytváření výpočtů v počítaných sloupcích a mírách a zabezpečení dat pomocí zabezpečení na úrovni řádků. Pokud chcete vytvořit vzorce pro počítané sloupce a míry, použijte řádek vzorců v horní části okna návrháře modelů nebo editor DAX. Chcete-li vytvořit vzorce pro zabezpečení na úrovni řádků, použijte dialogové okno Správce rolí nebo Spravovat role. Informace v této části vám pomůžou začít porozumět základům vzorců DAX.

Základy vzorců

Vzorce DAX můžou být velmi jednoduché nebo poměrně složité. Následující tabulka uvádí několik příkladů jednoduchých vzorců, které je možné použít v počítaném sloupci.

Vzorec Definice
= TODAY() Vloží dnešní datum do každého řádku počítaného sloupce.
= 3 Vloží hodnotu 3 do každého řádku počítaného sloupce.
= [Column1] + [Column2] Přidá hodnoty ve stejném řádku [Sloupec1] a [Sloupec2] a vloží výsledky do počítaného sloupce stejného řádku.

Bez ohledu na to, jestli je vzorec, který vytvoříte, jednoduchý nebo složitý, můžete při vytváření vzorce použít následující kroky:

  1. Každý vzorec musí začínat symbolem rovná se (=).

  2. Můžete zadat nebo vybrat název funkce nebo zadat výraz.

  3. Začněte psát několik prvních písmen požadované funkce nebo názvu a funkce Automatické dokončování zobrazí seznam dostupných funkcí, tabulek a sloupců. Stisknutím klávesy TAB přidejte do vzorce položku ze seznamu automatického dokončování.

    Můžete také kliknout na tlačítko Fx a zobrazit seznam dostupných funkcí. Pokud chcete vybrat funkci z rozevíracího seznamu, zvýrazněte ji pomocí kláves se šipkami a kliknutím na OK přidejte funkci do vzorce.

  4. Argumenty funkce můžete zadat tak, že je vyberete z rozevíracího seznamu možných tabulek a sloupců nebo zadáte do hodnot.

  5. Zkontrolujte chyby syntaxe: Ujistěte se, že jsou všechny závorky zavřené a sloupce, tabulky a hodnoty jsou odkazovány správně.

  6. Stisknutím klávesy ENTER vzorec přijměte.

Poznámka

Jakmile do počítaného sloupce zadáte vzorec a vzorec se ověří, sloupec se naplní hodnotami. Stisknutím klávesy ENTER v míře uložíte definici míry s tabulkou. Pokud je vzorec neplatný, zobrazí se chyba.

V tomto příkladu se podíváme na vzorec v míře s názvem Days in Current Quarter:

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Tato míra slouží k vytvoření poměru porovnání mezi neúplným obdobím a předchozím obdobím. Vzorec musí vzít v úvahu podíl uplynulého období a porovnat ho se stejným podílem v předchozím období. V tomto případě [Days Current Quarter to Date]/[Days in Current Quarter] (Dny v aktuálním čtvrtletí) udává poměr uplynulý v aktuálním období.

Tento vzorec obsahuje následující prvky:

Prvek vzorce Popis
Days in Current Quarter Název míry.
= Znaménko rovná se (=) začíná vzorcem.
COUNTROWS COUNTROWS spočítá počet řádků v tabulce Kalendářní data.
() Levá a pravá závorka určuje argumenty.
DATESBETWEEN Funkce DATESBETWEEN vrátí kalendářní data mezi posledním datem pro každou hodnotu ve sloupci Date v tabulce Date.
'Date' Určuje tabulku kalendářních dat. Tabulky jsou v jednoduchých uvozovkách.
[Date] Určuje sloupec Date (Datum) v tabulce Date (Datum). Sloupce jsou v hranatých závorkách.
,
STARTOFQUARTER Funkce STARTOFQUARTER vrátí datum začátku čtvrtletí.
LASTDATE Funkce LASTDATE vrátí poslední datum čtvrtletí.
'Date' Určuje tabulku kalendářních dat.
[Date] Určuje sloupec Date (Datum) v tabulce Date (Datum).
,
ENDOFQUARTER Funkce ENDOFQUARTER
'Date' Určuje tabulku kalendářních dat.
[Date] Určuje sloupec Date (Datum) v tabulce Date (Datum).

Použití automatického dokončování vzorce

Funkce Automatické dokončování vám pomůže zadat platnou syntaxi vzorce tím, že vám poskytne možnosti pro každý prvek ve vzorci.

  • Automatické dokončování vzorce můžete použít uprostřed existujícího vzorce s vnořenými funkcemi. Text bezprostředně před kurzorem se použije k zobrazení hodnot v rozevíracím seznamu a veškerý text za kurzorem zůstane beze změny.

  • Funkce Automatické dokončování nepřidá pravou závorku funkcí nebo automaticky porovnává závorky. Musíte se ujistit, že každá funkce je syntakticky správná, nebo nemůžete vzorec uložit nebo použít.

Použití více funkcí ve vzorci

Funkce můžete vnořit, což znamená, že výsledky z jedné funkce použijete jako argument jiné funkce. Do počítaných sloupců můžete vnořit až 64 úrovní funkcí. Vnoření ale může ztížit vytváření nebo odstraňování potíží se vzorci. Mnoho funkcí je navržené tak, aby se používalo výhradně jako vnořené funkce. Tyto funkce vrací tabulku, kterou nelze přímo uložit jako výsledek; musí být zadaný jako vstup do funkce tabulky. Například funkce SUMX, AVERAGEX a MINX vyžadují jako první argument tabulku.

Funkce

Funkce je pojmenovaný vzorec ve výrazu. Většina funkcí má požadované a volitelné argumenty, označované také jako parametry, jako vstup. Při spuštění funkce se vrátí hodnota. JAZYK DAX obsahuje funkce, které můžete použít k provádění výpočtů pomocí kalendářních dat a časů, vytváření podmíněných hodnot, práci s řetězci, vyhledávání na základě relací a možnost iterace v tabulce k provádění rekurzivních výpočtů. Pokud znáte vzorce Excelu, bude mnoho z těchto funkcí vypadat velmi podobně; Vzorce DAX se ale liší následujícími důležitými způsoby:

  • 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 potřebujete přizpůsobit výpočty podle řádků, jazyk DAX poskytuje funkce, které umožňují použít aktuální hodnotu řádku nebo související hodnotu jako druh parametru k provádění výpočtů, které se liší podle kontextu. Informace o tom, jak tyto funkce fungují, najdete v části Kontext v tomto článku.

  • JAZYK DAX obsahuje mnoho funkcí, které vracejí tabulku, nikoli hodnotu. Tabulka se nezobrazuje v klientovi generování sestav, ale slouží k poskytování vstupu do jiných funkcí. Můžete například načíst tabulku a pak spočítat jedinečné hodnoty v ní nebo vypočítat dynamické součty ve filtrovaných tabulkách nebo sloupcích.

  • Funkce jazyka DAX zahrnují různé funkce časového měřítka. Tyto funkce umožňují definovat nebo vybrat rozsahy kalendářních dat a provádět dynamické výpočty na základě těchto dat nebo rozsahu. Můžete například porovnat součty napříč paralelními obdobími.

Agregační funkce

Agregační funkce vypočítají (skalární) hodnotu, jako je počet, součet, průměr, minimum nebo maximum pro všechny řádky ve sloupci nebo tabulce definované výrazem. Další informace najdete v tématu Agregační funkce.

Funkce pro datum a čas

Funkce data a času v jazyce DAX jsou podobné funkcím data a času v Microsoft Excelu. Funkce JAZYKA DAX jsou ale založené na datovém typu datetime počínaje 1. březnem 1900. Další informace najdete v tématu Funkce data a času.

Filtrovací funkce

Funkce filtru v jazyce DAX vracejí konkrétní datové typy, vyhledávají hodnoty v souvisejících přímkách a filtrují podle souvisejících hodnot. Vyhledávací funkce fungují pomocí tabulek a relací, jako je databáze. Funkce filtrování umožňují manipulovat s kontextem dat a vytvářet dynamické výpočty. Další informace najdete v tématu Funkce filtru.

Finanční funkce

Finanční funkce v jazyce DAX se používají ve vzorcích, které provádějí finanční výpočty, jako je čistá současná hodnota a míra výnosnosti. Tyto funkce se podobají finančním funkcím používaným v Microsoft Excelu. Další informace najdete v tématu Finanční funkce.

Informační funkce

Informační funkce se podívá na buňku nebo řádek zadaný jako argument a řekne vám, jestli hodnota odpovídá očekávanému typu. Například funkce ISERROR vrátí hodnotu TRUE, pokud hodnota, na kterou odkazujete, obsahuje chybu. Další informace najdete v tématu Informační funkce.

Logické funkce

Logické funkce fungují na výrazu, který vrací informace o hodnotách ve výrazu. Funkce PRAVDA například umožňuje zjistit, jestli výraz, který vyhodnocujete, vrátí hodnotu PRAVDA. Další informace najdete v tématu Logické funkce.

Matematické a trigonometrické funkce

Matematické funkce v jazyce DAX jsou velmi podobné matematickým a trigonometrickým funkcím Excelu. V číselných datových typech používaných funkcemi JAZYKA DAX existují některé menší rozdíly. Další informace najdete v tématu Matematické a trigační funkce.

Další funkce

Tyto funkce provádějí jedinečné akce, které nelze definovat žádnou z kategorií, do kterých patří většina ostatních funkcí. Další informace najdete v tématu Další funkce.

Funkce relací

Funkce relací v jazyce DAX umožňují vracet hodnoty z jiné související tabulky, určit konkrétní relaci, která se má použít ve výrazu, a určit směr křížového filtrování. Další informace najdete v tématu Funkce relace.

Statistické funkce

Statistické funkce vypočítají hodnoty související se statistickými rozděleními a pravděpodobností, jako je směrodatná odchylka a počet permutací. Další informace najdete v tématu Statistické funkce.

Textové funkce

Textové funkce v jazyce DAX jsou velmi podobné jejich protějškům v Excelu. Můžete vrátit část řetězce, vyhledat text v řetězci nebo zřetězení řetězcových hodnot. JAZYK DAX také poskytuje funkce pro řízení formátů kalendářních dat, časů a čísel. Další informace najdete v tématu Textové funkce.

Funkce časového měřítka

Funkce časového měřítka poskytované v jazyce DAX umožňují vytvářet výpočty, které používají integrované znalosti o kalendářích a datech. Pomocí rozsahů času a kalendářních dat v kombinaci s agregacemi nebo výpočty můžete vytvářet smysluplná porovnání ve srovnatelných časových obdobích pro prodej, inventář atd. Další informace najdete v tématu Funkce časového měřítka (DAX).

Funkce pro manipulaci s tabulkami

Tyto funkce vrací tabulku nebo manipulují s existujícími tabulkami. Pomocí funkce ADDCOLUMNS můžete například přidat počítané sloupce do zadané tabulky nebo můžete vrátit souhrnnou tabulku přes sadu skupin pomocí funkce SUMMARIZECOLUMNS. Další informace najdete v tématu Funkce pro manipulaci s tabulkami.

Proměnné

Proměnné ve výrazu můžete vytvořit pomocí funkce VAR. Var není technicky vzato funkce, jedná se o klíčové slovo pro uložení výsledku výrazu jako pojmenované proměnné. Tato proměnná se pak dá předat jako argument jiným výrazům míry. Příklad:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

V tomto příkladu lze funkci TotalQty předat jako pojmenovanou proměnnou jiným výrazům. Proměnné můžou být libovolného skalárního datového typu, včetně tabulek. Použití proměnných ve vzorcích DAX může být neuvěřitelně výkonné.

Datové typy

Data můžete importovat do modelu z mnoha různých zdrojů dat, které můžou podporovat různé datové typy. Při importu dat do modelu se data převedou na jeden z datových typů tabulkového modelu. Když se data modelu použijí při výpočtu, data se pak po dobu trvání a výstupu výpočtu převedou na datový typ DAX. Když vytvoříte vzorec DAX, termíny použité ve vzorci automaticky určí vrácený datový typ hodnoty.

JAZYK DAX podporuje následující datové typy:

Datový typ v modelu Datový typ v jazyce DAX Popis
Celé číslo 64bitová (osmibajtů) celočíselná hodnota 1, 2 Čísla, která nemají desetinná místa. Celá čísla můžou být kladná nebo záporná, ale musí být celá čísla mezi -9 223 372 036 854 775 808 (-2^63) a 9 223 372 036 854 775 807 (2^63-1).
Desetinné číslo 64bitová (osmibajtů) reálné číslo 1, 2 Reálná čísla jsou čísla, která můžou mít desetinná místa. Reálná čísla pokrývají širokou škálu hodnot:

Záporné hodnoty od -1,79E +308 do -2,23E -308

Nula

Kladné hodnoty od 2,23E -308 do 1,79E + 308

Počet významných číslic je však omezen na 17 desetinných míst.
Logická hodnota Logická hodnota Hodnota True nebo False.
Text Řetězec Datový řetězec znaků Unicode. Můžou to být řetězce, čísla nebo kalendářní data reprezentovaná v textovém formátu.
Date Datum/čas Kalendářní data a časy v přijaté reprezentaci data a času

Platná data jsou všechna kalendářní data po 1. březnu 1900.
Měna Měna Datový typ měny umožňuje hodnoty od -922 337 203 685 477,5808 do 922 337 203 685 477,5807 se čtyřmi desetinnými číslicemi pevné přesnosti.
Blank Prázdné je datový typ v jazyce DAX, který představuje a nahrazuje hodnoty null SQL. Prázdnou hodnotu můžete vytvořit pomocí funkce BLANK a otestovat prázdné hodnoty pomocí logické funkce ISBLANK.

Tabulkové datové modely také zahrnují datový typ Table jako vstup nebo výstup mnoha funkcí JAZYKA DAX. Například funkce FILTER přebírá tabulku jako vstup a výstupem jiné tabulky, která obsahuje pouze řádky, které splňují podmínky filtru. Kombinací tabulkových funkcí s agregačními funkcemi můžete provádět složité výpočty s dynamicky definovanými datovými sadami.

I když jsou datové typy obvykle nastavené automaticky, je důležité porozumět datovým typům a tomu, jak se používají zejména u vzorců DAX. Chyby ve vzorcích nebo neočekávaných výsledcích jsou například často způsobeny použitím konkrétního operátoru, který nelze použít s datovým typem zadaným v argumentu. Například vzorec = 1 & 2vrátí výsledek řetězce 12. Vzorec však = "1" + "2"vrátí celočíselnou hodnotu 3.

Kontext

Kontext je důležitý koncept, který je potřeba pochopit při vytváření vzorců DAX. Kontext je to, co umožňuje provádět dynamickou analýzu, protože výsledky vzorce se mění tak, aby odrážely aktuální výběr řádku nebo buňky a také všechna související data. Efektivní pochopení kontextu a použití kontextu je důležité pro vytváření vysoce výkonných, dynamických analýz a řešení problémů ve vzorcích.

Vzorce v tabulkových modelech lze vyhodnotit v jiném kontextu v závislosti na jiných prvcích návrhu:

  • Filtry použité v kontingenční tabulce nebo sestavě
  • Filtry definované ve vzorci
  • Relace zadané pomocí speciálních funkcí ve vzorci

Existují různé typy kontextu: kontext řádku, kontext dotazu a kontext filtru.

Kontext řádku

Kontext řádku si můžete představit jako "aktuální řádek". Pokud vytvoříte vzorec v počítaném sloupci, kontext řádku pro tento vzorec obsahuje hodnoty ze všech sloupců v aktuálním řádku. Pokud tabulka souvisí s jinou tabulkou, obsahuje obsah také všechny hodnoty z druhé tabulky, které souvisejí s aktuálním řádkem.

Předpokládejme například, že vytvoříte počítaný sloupec, = [Freight] + [Tax]který sečte hodnoty ze dvou sloupců, Nákladní a Daň ze stejné tabulky. Tento vzorec automaticky získá pouze hodnoty z aktuálního řádku v zadaných sloupcích.

Kontext řádku se také řídí všemi relacemi definovanými mezi tabulkami, včetně relací definovaných v počítaném sloupci pomocí vzorců JAZYKA DAX, aby bylo možné určit, které řádky v souvisejících tabulkách jsou přidružené k aktuálnímu řádku.

Například následující vzorec používá funkci RELATED k načtení daňové hodnoty ze související tabulky na základě oblasti, do které byla objednávka odeslána. Daňová hodnota se určuje pomocí hodnoty pro oblast v aktuální tabulce, vyhledáním oblasti v související tabulce a následným získáním sazby daně pro danou oblast ze související tabulky.

= [Freight] + RELATED('Region'[TaxRate])  

Tento vzorec získá sazbu daně pro aktuální oblast z tabulky Region a přidá ji k hodnotě sloupce Freight. Ve vzorcích DAX nemusíte znát ani zadávat konkrétní relaci, která spojuje tabulky.

Kontext více řádků

JAZYK DAX obsahuje funkce, které iterují výpočty v tabulce. Tyto funkce můžou mít více aktuálních řádků, z nichž každý má vlastní kontext řádku. Tyto funkce v podstatě umožňují vytvářet vzorce, které provádějí operace rekurzivně přes vnitřní a vnější smyčku.

Předpokládejme například, že váš model obsahuje tabulku Products (Produkty ) a tabulku Sales (Prodej ). Uživatelé můžou chtít projít celou tabulku prodejů, která je plná transakcí zahrnujících více produktů, a najít největší množství objednané pro každý produkt v každé transakci.

Pomocí jazyka DAX můžete vytvořit jeden vzorec, který vrátí správnou hodnotu, a výsledky se automaticky aktualizují pokaždé, když uživatel přidá data do tabulek.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

Podrobný příklad tohoto vzorce najdete v části EARLIER.

Funkce EARLIER ukládá kontext řádku z operace, která předchází aktuální operaci. Funkce se ukládá do paměti dvě sady kontextu: jedna sada kontextu představuje aktuální řádek pro vnitřní smyčku vzorce a další sada kontextu představuje aktuální řádek vnější smyčky vzorce. JAZYK DAX automaticky vychová hodnoty mezi těmito dvěma smyčkami, takže můžete vytvářet složité agregace.

Kontext dotazu

Kontext dotazu odkazuje na podmnožinu dat, která se implicitně načítají pro vzorec. Když uživatel například umístí míru nebo pole do sestavy, modul prozkoumá záhlaví řádků a sloupců, průřezy a filtry sestav a určí kontext. Potřebné dotazy se pak spustí proti datům modelu, aby se získala správná podmnožina dat, výpočty definované vzorcem a potom naplní hodnoty v sestavě.

Vzhledem k tomu, že se kontext mění v závislosti na tom, kam vzorec umístíte, můžou se také změnit výsledky vzorce. Předpokládejme například, že vytvoříte vzorec, který sečte hodnoty ve sloupci Profit (Zisk ) v tabulce Sales (Prodej ): = SUM('Sales'[Profit]). Pokud tento vzorec použijete v počítaném sloupci v tabulce Prodej , výsledky vzorce budou stejné pro celou tabulku, protože kontext dotazu pro vzorec je vždy celá datová sada tabulky Sales . Výsledky budou mít zisk pro všechny oblasti, všechny produkty, všechny roky atd.

Uživatelé ale obvykle nechtějí vidět stejný výsledek stovkykrát, ale místo toho chtějí získat zisk pro konkrétní rok, konkrétní zemi, konkrétní produkt nebo nějakou kombinaci těchto, a pak získat celkový součet.

V sestavě se kontext mění filtrováním, přidáním nebo odebráním polí a použitím průřezů. Pro každou změnu kontext dotazu, ve kterém se míra vyhodnocuje. Proto je stejný vzorec použitý v míře vyhodnocen v jiném kontextu dotazu pro každou buňku.

Kontext filtru

Kontext filtru je sada hodnot povolených v každém sloupci nebo v hodnotách načtených ze související tabulky. Filtry se dají použít u sloupce v návrháři nebo v prezentační vrstvě (sestavy a kontingenční tabulky). Filtry lze také definovat explicitně pomocí výrazů filtru v rámci vzorce.

Kontext filtru se přidá, když zadáte omezení filtru pro sadu hodnot povolených ve sloupci nebo tabulce pomocí argumentů pro vzorec. Kontext filtru platí nad jinými kontexty, jako je kontext řádku nebo kontext dotazu.

V tabulkovýchmodelch V kontextu klientů, kteří můžou model využívat, jako jsou sestavy Power BI, můžou uživatelé průběžně vytvářet filtry přidáním průřezů nebo filtrů sestav do záhlaví řádků a sloupců. Můžete také zadat výrazy filtru přímo ve vzorci, určit související hodnoty, filtrovat tabulky, které se používají jako vstupy, nebo dynamicky získat kontext pro hodnoty použité ve výpočtech. Filtry konkrétních sloupců můžete také úplně vymazat nebo selektivně vymazat. To je velmi užitečné při vytváření vzorců, které počítají celkové součty.

Další informace o tom, jak vytvářet filtry ve vzorcích, najdete v tématu Funkce FILTER (DAX).
Příklad, jak lze vymazat filtry pro vytvoření celkových součtů, najdete v tématu Funkce ALL (DAX).

Příklady selektivního vymazání a použití filtrů ve vzorcích najdete v tématu ALLEXCEPT.

Určení kontextu ve vzorcích

Když vytvoříte vzorec DAX, vzorec se nejprve otestuje pro platnou syntaxi a pak se otestuje, aby se zajistilo, že názvy sloupců a tabulek, které jsou součástí vzorce, najdete v aktuálním kontextu. Pokud se některý sloupec nebo tabulka zadaná vzorcem nenašla, vrátí se chyba.

Kontext během ověřování (a operace přepočtu) se určuje podle popisu v předchozích částech pomocí dostupných tabulek v modelu, všech relací mezi tabulkami a použitými filtry.

Pokud jste například právě naimportovali některá data do nové tabulky a nesouvisí s žádnou jinou tabulkou (a nepoužíváte žádné filtry), aktuální kontext je celá sada sloupců v tabulce. Pokud je tabulka propojená relacemi s jinými tabulkami, aktuální kontext obsahuje související tabulky. Pokud přidáte sloupec z tabulky do sestavy, která obsahuje průřezy a možná některé filtry sestavy, kontext vzorce je podmnožinou dat v každé buňce sestavy.

Kontext je výkonný koncept, který může také ztížit řešení potíží se vzorci. Doporučujeme začít jednoduchými vzorci a relacemi, abyste viděli, jak kontext funguje. Následující část obsahuje některé příklady toho, jak vzorce používají různé typy kontextu k dynamickému vracení výsledků.

Operátory

Jazyk DAX používá ve vzorcích čtyři různé typy výpočetních operátorů:

  • Relační operátory pro porovnání hodnot a vrácení logické hodnoty TRUE\FALSE.
  • Aritmetické operátory pro provádění aritmetických výpočtů, které vracejí číselné hodnoty.
  • Operátory zřetězení textu pro spojení dvou nebo více textových řetězců
  • Logické operátory, které kombinují dva nebo více výrazů, aby vrátily jeden výsledek.

Podrobné informace o operátorech používaných ve vzorcích JAZYKA DAX najdete v tématu Operátory JAZYKA DAX.

Práce s tabulkami a sloupci

Tabulky v tabulkových datových modelech vypadají jako excelové tabulky, ale liší se způsobem, jakým pracují s daty a se vzorci:

  • Vzorce fungují jenom s tabulkami a sloupci, ne s jednotlivými buňkami, odkazy na oblast nebo maticemi.
  • Vzorce můžou používat relace k získání hodnot ze souvisejících tabulek. Načtené hodnoty se vždy vztahují k aktuální hodnotě řádku.
  • V excelovém listu nemůžete mít nepravidelná nebo nepravidelná data. Každý řádek v tabulce musí obsahovat stejný počet sloupců. V některých sloupcích ale můžete mít prázdné hodnoty. Tabulky dat Excelu a tabulky dat tabulkového modelu se nedají zaměnit.
  • Vzhledem k tomu, že pro každý sloupec je nastavený datový typ, musí být každá hodnota v daném sloupci stejného typu.

Odkaz na tabulky a sloupce ve vzorcích

Pomocí názvu můžete odkazovat na libovolnou tabulku a sloupec. Následující vzorec například ukazuje, jak odkazovat na sloupce ze dvou tabulek pomocí plně kvalifikovaného názvu:


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

Při vyhodnocování vzorce návrhář modelu nejprve zkontroluje obecnou syntaxi a pak zkontroluje názvy sloupců a tabulek, které zadáte, s možnými sloupci a tabulkami v aktuálním kontextu. Pokud je název nejednoznačný nebo pokud sloupec nebo tabulka nelze najít, zobrazí se ve vzorci chyba (řetězec #ERROR místo datové hodnoty v buňkách, kde k chybě dochází). Další informace o požadavcích na pojmenování tabulek, sloupců a dalších objektů najdete v tématu Požadavky na pojmenování v syntaxi jazyka DAX.

Vztahy mezi tabulkami

Vytvořením relací mezi tabulkami získáte možnost použít související hodnoty v jiných tabulkách při výpočtech. Můžete například použít počítaný sloupec k určení všech expedičních záznamů souvisejících s aktuálním prodejcem a následným součtem nákladů na dopravu pro každý z nich. V mnoha případech ale nemusí být vztah nutný. Funkci LOOKUPVALUE ve vzorci můžete použít k vrácení hodnoty v result_columnName řádku, který splňuje kritéria zadaná v argumentech search_column a search_value.

Mnoho funkcí JAZYKA DAX vyžaduje, aby mezi tabulkami nebo více tabulkami existovaly relace, aby bylo možné vyhledat sloupce, na které jste odkazovali, a vrátit výsledky, které mají smysl. Další funkce se pokusí identifikovat vztah; Pro zajištění nejlepších výsledků byste ale měli vždy vytvořit relaci, pokud je to možné. Tabulkové datové modely podporují více relací mezi tabulkami. Aby nedocházelo k nejasnostem nebo nesprávným výsledkům, je jako aktivní relace určena pouze jedna relace, ale aktivní relaci můžete podle potřeby změnit, abyste mohli procházet různá připojení v datech ve výpočtech. Funkci USERELATIONSHIP lze použít k určení jedné nebo více relací, které se mají použít v určitém výpočtu.

Při použití relací je důležité dodržovat tato pravidla návrhu vzorců:

  • Pokud jsou tabulky propojené relací, je nutné zajistit, aby dva sloupce použité jako klíče měly odpovídající hodnoty. Referenční integrita se nevynucuje, proto je možné mít v klíčovém sloupci hodnoty, které neodpovídají, a přesto vytvořit relaci. Pokud k tomu dojde, měli byste mít na paměti, že prázdné nebo neodpovídající hodnoty můžou ovlivnit výsledky vzorců.

  • Když v modelu propojíte tabulky pomocí relací, zvětšíte rozsah nebo kontext, ve kterém se vzorce vyhodnocují. Změny v kontextu vyplývající z přidání nových tabulek, nových relací nebo změn v aktivní relaci můžou způsobit, že se výsledky změní způsoby, které byste nemuseli předvídat. Další informace najdete v tématu Kontext v tomto článku.

Zpracování a aktualizace

Proces a přepočítání jsou dvě samostatné, ale související operace. Tyto koncepty byste měli důkladně pochopit při návrhu modelu, který obsahuje složité vzorce, velké objemy dat nebo data získaná z externích zdrojů dat.

Proces (aktualizace) aktualizuje data v modelu novými daty z externího zdroje dat.

Přepočet je proces aktualizace výsledků vzorců tak, aby odrážel všechny změny samotných vzorců a aby odrážel změny v podkladových datech. Přepočet může ovlivnit výkon následujícími způsoby:

  • Hodnoty v počítaném sloupci se vypočítají a ukládají v modelu. Chcete-li aktualizovat hodnoty v počítaném sloupci, musíte model zpracovat pomocí jednoho ze tří příkazů zpracování – Celý proces, Zpracovat data nebo Přepočítat proces. Výsledek vzorce musí být vždy přepočítán pro celý sloupec, kdykoli změníte vzorec.

  • Hodnoty vypočítané pomocí měr se dynamicky vyhodnocují vždy, když uživatel přidá míru do kontingenční tabulky nebo otevře sestavu; když uživatel upraví kontext, hodnoty vrácené mírou se změní. Výsledky míry vždy odrážejí nejnovější informace v mezipaměti v paměti.

Zpracování a přepočítání nemá žádný vliv na vzorce zabezpečení na úrovni řádků, pokud výsledek přepočtu nevrátí jinou hodnotu, takže se řádek dá dotazovat nebo nelze dotazovat členy rolí.

Aktualizace

Jazyk DAX se neustále vylepšuje. Nové a aktualizované funkce se vydávají s další dostupnou aktualizací, která je obvykle měsíční. Nejprve se aktualizují služby a následně nainstalované aplikace, jako je Power BI Desktop, Excel, SQL Server Management Studio (SSMS) a rozšíření projektu Analysis Services pro Visual Studio (SSDT). Služba Analysis Services serveru SQL se aktualizuje o další kumulativní aktualizaci. Nové funkce jsou poprvé oznámeny a popsány v odkazu na funkce DAX s aktualizacemi Power BI Desktopu.

V dřívějších verzích Služba Analysis Services serveru SQL a Excelu nejsou podporované všechny funkce.

Řešení potíží

Pokud se při definování vzorce zobrazí chyba, může vzorec obsahovat syntaktickou chybu, sémantickou chybu nebo chybu výpočtu.

Syntaktické chyby se nejsnadněji vyřeší. Obvykle se jedná o chybějící závorky nebo čárky.

Druhý typ chyby nastane, když je syntaxe správná, ale hodnota nebo sloupec odkazovaný nedává smysl v kontextu vzorce. Tyto sémantické chyby a chyby výpočtů můžou být způsobené některým z následujících problémů:

  • Vzorec odkazuje na neexistující sloupec, tabulku nebo funkci.
  • Zdá se, že vzorec je správný, ale když datový modul načte data, najde neshodu typu a vyvolá chybu.
  • Vzorec předá funkci nesprávné číslo nebo typ argumentů.
  • Vzorec odkazuje na jiný sloupec, který obsahuje chybu, a proto jsou jeho hodnoty neplatné.
  • Vzorec odkazuje na sloupec, který nebyl zpracován, což znamená, že obsahuje metadata, ale žádná skutečná data, která se mají použít pro výpočty.

V prvních čtyřech případech daX označí celý sloupec, který obsahuje neplatný vzorec. V posledním případě daX zašedne sloupec, který označuje, že je sloupec v nezpracovaném stavu.

Aplikace a nástroje

Power BI Desktop

Power BI Desktop

Power BI Desktop je bezplatná aplikace pro modelování dat a vytváření sestav. Návrhář modelů obsahuje editor DAX pro vytváření vzorců výpočtů DAX.

Power Pivot v Excelu

Power Pivot in Excel

Návrhář modelů Power Pivotu v Excelu obsahuje editor DAX pro vytváření vzorců výpočtů DAX.

Visual Studio

Visual Studio

Visual Studio s rozšířením projektů Analysis Services (VSIX) se používá k vytváření projektů modelu Analysis Services. Návrhář tabulkových modelů nainstalovaný s rozšířením projektů obsahuje editor DAX.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) je základním nástrojem pro práci se službou Analysis Services. SSMS obsahuje editor dotazů DAX pro dotazování tabulkových i multidimenzionálních modelů.

DAX Studio

DAX Studio icon

DAX Studio je opensourcový klientský nástroj pro vytváření a spouštění dotazů DAX ve službách Analysis Services, Power BI Desktop a Power Pivot v modelech Excelu.

Tabulkový editor

Tabular Editor icon

Tabulkový editor je opensourcový nástroj, který poskytuje intuitivní hierarchické zobrazení každého objektu v metadatech tabulkového modelu. Tabulkový editor obsahuje editor DAX se zvýrazněním syntaxe, který poskytuje snadný způsob, jak upravovat míry, počítaný sloupec a výrazy počítané tabulky.

Studijní materiály

Při učení jazyka DAX je nejlepší použít aplikaci, kterou budete používat k vytváření datových modelů. Analysis Services, Power BI Desktop a Power Pivot v Excelu obsahují články a kurzy, které zahrnují lekce týkající se vytváření měr, počítaných sloupců a filtrů řádků pomocí jazyka DAX. Tady jsou některé další zdroje informací:

Videa

Studijní program jazyka DAX v Power BI Desktopu

The Definitive Guide to DAX by Alberto Ferrari and Marco Russo (Microsoft Press). Ve své druhé edici poskytuje tato rozsáhlá příručka základy inovativních vysoce výkonných technik pro začínající modelátory dat a odborníky na BI.

The Definitive Guide to DAX book image

Komunita

DAX má aktivní komunitu, která je vždy ochotná sdílet své znalosti. Microsoft Komunita Power BI má speciální diskuzní fórum jen pro DAX, příkazy DAX a Tipy.