Sdílet prostřednictvím


přehled DAX

Data Analysis Expressions (DAX) je jazyk výrazu vzorce používaný ve službě Analysis Services, Power BI a Power Pivotu v Excelu. DAX Vzorce 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 v DAX. DAX popisuje, jak se uplatňuje, pokud jde o všechny produkty, které ho používají. Některé funkce se nemusí vztahovat na určité produkty nebo případy použití. Přečtěte si dokumentaci k produktu popisující její konkrétní implementaci DAX.

Kalkulace

DAX Vzorce 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í při vytváření sestav, které podporují kombinování a filtrování dat modelu pomocí různých atributů, jako je sestava Power BI nebo Excelová kontingenční tabulka či 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 COUNT nebo SUM, nebo můžete definovat vlastní vzorec pomocí DAX řádku vzorců. Pojmenovaná opatření lze předat jako argument jiným opatřením.

Když nadefinujete vzorec pro míru v řádku vzorců, funkce popisku zobrazí náhled toho, jak by vypadaly výsledky součtu v aktuálním kontextu, ale jinak se výsledky nikde okamžitě nezobrazí. 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ěření je třeba klientská aplikace pro vytváření sestav, která může poskytnout kontext potřebný k načtení dat relevantních pro každou buňku a poté vyhodnotit výraz pro každou buňku. Klientem může být Excelová kontingenční tabulka nebo kontingenční graf, sestava Power BI nebo výraz tabulky v dotazu DAX v sadě 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 pro měření:

Total Sales = SUM([Sales Amount])

Když uživatel umístí míru TotalSales do sestavy a následně umístí sloupec Produktová kategorie z tabulky Produkt do filtrů, vypočítá se součet částky prodeje a zobrazí se pro každou produktovou kategorii.

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 tématu Míry v Power BI DesktopMíry v Analysis ServicesMíry v Power Pivot

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 DAX vzorec, který definuje hodnoty sloupce. Pokud počítaný sloupec obsahuje platný DAX vzorec, 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 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 tématu: Počítané sloupce v Power BI DesktopuPočítané sloupce ve službě Analysis ServicesPočí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 DAX dat definuje vzorec hodnoty tabulky.

Počítané tabulky mohou být užitečné v dimenzi pro hraní rolí. Příkladem je tabulka Datum, jako DatumObjednávky, DatumExpedice nebo DatumSplatnosti, 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ů nebo podmnožiny či nadmnožiny 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, obnoví nebo aktualizuje.

Další informace najdete v tématu: Počítané tabulky v Power BI DesktopuPočítané tabulky ve službě Analysis Services.

Zabezpečení na úrovni řádků

Při zabezpečení DAX na úrovni řádků musí vzorec vyhodnotit podmínku typu Boolean, která definuje, které řádky mohou být vráceny členy konkrétní role prostřednictvím výsledků dotazu. Například pro členy role Prodej je tabulka 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 SUM jsou například vráceny pouze pro zákazníky v USA. Zabezpečení na úrovni řádků není v Power Pivotu v Excelu dostupné.

Při definování řádkové úrovně zabezpečení 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ů. Ostatní role můžou povolit přístup k řádkům vyloučeným DAX vzorcem. 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 tématu: Zabezpečení na úrovni řádků (RLS) s Power BIRole ve službě Analysis Services.

Dotazy

DAX Dotazy 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 DAX výpočetních vzorců, které je možné vytvořit pouze v tabulkových datových modelech, lze DAX dotazy spouštět také proti multidimenzionálním modelům služby Analysis Services. DAX dotazy 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 DAX dotazu je příkaz evaluate . Například

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

Vrátí v tabulce Výsledky jen ty produkty, jejichž úroveň minimálních zásob je menší než 200, seřazené vzestupně podle názvu produktu v angličtině.

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

Vzorce

DAX Vzorce 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ů. Chcete-li vytvořit vzorce pro počítané sloupce a míry, použijte řádek vzorců v horní části okna návrháře modelu nebo DAX Editor. 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 DAX vzorců.

Základy vzorců

DAX vzorce mohou 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ěření.
= Znaménko rovná se (=) zahajuje vzorec.
COUNTROWS COUNTROWS spočítá počet řádků v tabulce Datum.
() 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 dat. Tabulky jsou v jednoduchých uvozovkách.
[Date] Určuje sloupec Date v tabulce Date. 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 dat.
[Date] Určuje sloupec Date v tabulce Date.
,
ENDOFQUARTER Funkce ENDOFQUARTER
'Date' Určuje tabulku dat.
[Date] Určuje sloupec Date v tabulce Date.

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.

  • Automatické dokončování nedoplňuje pravou závorku funkcí ani automaticky neporovná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 řešení problémů 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, AVERAGEXa MINX všechny vyžadují tabulku jako první argument.

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. 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ě; DAX Vzorce se však 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 řádku, poskytuje funkce, DAX 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.

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

  • DAX funkce zahrnují celou řadu funkcí časové analýzy. 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 DAX jsou podobné funkcím v Microsoft Excelu. DAX Funkce 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.

Funkce filtru

Funkce filtru v DAX vracejí konkrétní datové typy, vyhledávají hodnoty v souvisejících tabulká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 se používají ve DAX 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. Funkce ISERROR například vrátí 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 TRUE například umožňuje zjistit, jestli výraz, který vyhodnocujete, vrátí hodnotu TRUE. Další informace najdete v tématu Logické funkce.

Matematické a trigonometrické funkce

Matematické funkce DAX jsou velmi podobné matematickým a trigonometrickým funkcím Excelu. V číselných datových typech používaných funkcemi 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 DAX relací 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 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. DAX poskytuje také funkce pro řízení formátů kalendářních dat, časů a čísel. Další informace najdete v tématu Textové funkce.

Funkce pro časovou analýzu

Funkce časové inteligence dostupné v 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é inteligence (DAX).

Funkce pro manipulaci s tabulkami

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

Proměnné

Proměnné ve výrazu můžete vytvářet pomocí VAR. VAR není technicky vzato funkcí, 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. Napří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 DAX datový typ. Když vytvoříte DAX vzorec, termíny použité ve vzorci automaticky určí vrácený datový typ hodnoty.

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

Datový typ v modelu Datový typ v DAX Popis
Whole Number 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).
Decimal Number 64bitové (osmibajtové) 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.
Boolean Booleovský 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 a čas Kalendářní data a časy v přijaté formě zobrazení.

Platná data jsou všechna kalendářní data po 1. březnu 1900.
Currency 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.
Variant Varianta Používá se pro výrazy, jako jsou například DAX, které mohou vracet různé datové typy. Například DAX míra, která vrátí celé číslo nebo řetězec, bude typu varianta.
N/A Prázdný Prázdná hodnota je datový typ v DAX, který představuje a nahrazuje hodnoty NULL v SQL. Prázdnou hodnotu můžete vytvořit pomocí funkce BLANK a prázdné hodnoty můžete otestovat pomocí logické funkce ISBLANK.

Tabulkové datové modely také zahrnují datový typ Table jako vstup nebo výstup mnoha DAX funkcí. Funkce například FILTER vezme tabulku jako vstup a vypíše jinou tabulku, 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é pochopit datové typy a způsob jejich použití, zejména u DAX vzorců. 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 & 2, vrátí řetězcový výsledek 12. Vzorec = "1" + "2"však vrátí celočíselný výsledek 3.

Poznámka

Výpočty datových typů řetězců můžou být omezené na 64 kB.

Kontext

Kontext je důležitý koncept, který je potřeba pochopit při vytváření DAX vzorců. 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í zboží 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í DAX vzorců, aby bylo možné určit, které řádky v souvisejících tabulkách jsou přidružené k aktuálnímu řádku.

Následující vzorec například používá RELATED funkci 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 DAX vzorcích nemusíte znát ani zadávat konkrétní relaci, která spojuje tabulky.

Kontext více řádků

DAX zahrnuje 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.

Můžete DAX 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 tématu EARLIER.

Stručně řečeno, funkce EARLIER ukládá kontext řádku z operace, která předcházela aktuální operaci. Funkce neustále ukládá do paměti dvě sady kontextu: jedna sada představuje aktuální řádek pro vnitřní smyčku vzorce a druhá sada představuje aktuální řádek pro vnější smyčku vzorce. DAX automaticky vychytá hodnoty mezi těmito dvěma smyčkami, abyste mohli 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í na modelová data, aby se získala správná podmnožina dat, poté se provedou výpočty definované vzorcem a nakonec se hodnoty vyplní do sestavy.

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 slicerů. Pro každou změnu kontext dotazu, ve kterém se míra vyhodnocuje. Stejný vzorec použitý v míře se proto vyhodnocuje v jiném kontextu dotazu pro každou buňku.

Filtr kontextu

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 Desktopu 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ých modelech existuje mnoho způsobů, jak vytvořit kontext filtru. V kontextu klientů, kteří mohou model využívat, jako jsou sestavy Power BI, uživatelé mohou dynamicky vytvářet filtry přidáním výř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 vytváření filtrů v rámci vzorců se podívejte na FunkceFILTER (DAX). Příklad, jak lze vymazat filtry pro vytvoření celkových součtů, najdete v ALL části Funkce (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

Při vytváření DAX vzorce se vzorec nejprve otestuje pro platnou syntaxi a pak se testuje, 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 Slicery a možná některé filtry sestavy, kontext pro vzorec 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átoři

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

  • Porovnávací operátory pro porovnání hodnot a návrat 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 najdete v tématu DAXDAX Operátory.

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í jen s tabulkami a sloupci, ne s jednotlivými buňkami, oblastmi 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.
  • Nemůžete mít nepravidelná nebo "rozcuchaná" data tak, jako je to možné v excelovém listu. 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, ve kterých 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 DAX syntaxi.

Relace 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 záznamů o dopravě souvisejících s aktuálním prodejcem a poté sečíst náklady na dopravu pro každého z nich. V mnoha případech ale nemusí být vztah nutný. Funkci LOOKUPVALUE můžete použít ve vzorci k vrácení hodnoty ve sloupci result_columnName pro řádek, který splňuje kritéria zadaná v argumentech search_column a search_value.

Mnoho DAX funkcí 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. 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ěření vždy odrážejí nejnovější stav v mezipaměti v operační paměti.

Zpracování a přepočítání nijak neovlivňují vzorce zabezpečení na úrovni řádků, pokud výsledek přepočtu nevede k jiné hodnotě, čímž by se řádek stal dotazovatelným nebo nedotazovatelným členy rolí.

Aktualizace

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 SQL Server Analysis Services se aktualizuje o další kumulativní aktualizaci. Nové funkce se poprvé oznámí a popíší v DAX referenci funkcí současně s aktualizacemi Power BI Desktopu.

Ve starších verzích služby SQL Server Analysis Services a Excelu nejsou podporované všechny funkce.

Řešení problémů

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á nesprávný počet nebo typ argumentů k funkci.
  • 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 označí celý sloupec, DAX který obsahuje neplatný vzorec. V posledním případě DAX zšedne sloupec, aby naznačil, že daný sloupec je ve stavu nezpracování.

Aplikace a nástroje

Power BI Desktop (desktopová aplikace Power BI)

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í výpočtových vzorců DAX.

Power Pivot v Excelu

Power Pivot v Excelu

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

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 DAX editor dotazů pro dotazování tabulkových i multidimenzionálních modelů.

DAX Studio

DAX Ikona studia

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

Tabulkový editor

Ikona Tabulkového editoru

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

Výukové materiály

Při učení DAXje 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í DAX. Tady jsou některé další zdroje informací:

Videos

Použijte DAX v rámci učební cesty Power BI Desktop.

Konečný průvodce DAX od Alberta Ferrariho a Marca Russa (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.

Definitivní průvodce DAX obrázek knihy

Komunita

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