přehled DAX
Data Analysis Expressions (DAX) je jazyk pro výrazy vzorců používaný ve službě Analysis Services, Power BI, andPower Pivot v Excelu. DAX vzorce zahrnují funkce, operátory, andvalues k provádění pokročilých výpočtů a and dotazů na data v related tabulkách and sloupců v tabulkových datových modelech.
Tento článek obsahuje pouze základní úvod k nejdůležitějším konceptům v DAX. Popisuje DAX, jak se vztahuje na produkty all, které ho používají. Některé funkce se můžou not v některých produktech or případy použití. Přečtěte si dokumentaci k productpopisující konkrétní implementaci DAX.
Kalkulace
DAX vzorce se používají v mírách, počítaných sloupcích, počítaných tabulkách, and 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í and filtrování dat modelu pomocí více atributů, jako je Power sestava BI or kontingenční tabulka Excelu or kontingenční graf. Míry se vytvářejí pomocí řádku vzorců DAX v návrháři modelů.
Vzorec v measure může používat standardní agregační funkce automaticky vytvořené pomocí funkce Automatické shrnutí, například COUNTorSUM, or můžete define vlastní vzorec pomocí řádku vzorců DAX. Pojmenovaná opatření lze předat jako argument jiným opatřením.
Když define vzorec pro measure na řádku vzorců, zobrazí se funkce Nápovědy s náhledem, jaké by byly výsledky součtu v aktuálním kontextu, ale jinak se výsledky not okamžitě vyplní kdekoli. Důvodem, proč nelze okamžitě zobrazit (filtrované) výsledky výpočtu, je to, že výsledek measure nelze určit bez kontextu. K evaluatemeasure 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 and potom evaluate výraz pro každou buňku. Tento klient může být kontingenční tabulkou Excelu or, kontingenčním grafem, sestavou BI Power, výrazem tabulky v dotazu or v aplikaci SQL Server Management Studio (SSMS) DAX.
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í sloupců řádku and v kontingenční tabulce, or každý výběr průřezů andfilters v sestavě BI Power, vygeneruje jinou podmnožinu dat, pomocí kterých se measure vypočítá. Například použití tohoto velmi jednoduchého measure vzorce:
Total Sales = SUM([Sales Amount])
Když uživatel umístí measure TotalSales do sestavy, and potom umístí sloupec Product Kategorie z tabulky Product do Filters, sum částka prodeje se vypočítá and pro každou kategorii product.
Na rozdíl od počítaných sloupců syntaxe pro measure zahrnuje název elementu measurepřed vzorcem. V právě zadaném příkladu se název total sales zobrazí před vzorcem. Po vytvoření measurese název and a jeho definice zobrazí v seznamu polí klientské aplikace pro vytváření sestav, and v závislosti na perspektivách a rolích and je k dispozici uživatelům modelu all.
Další informace najdete tady:
míry v Power BI Desktopu
míry ve službě Analysis Services
Měření v pivotním bodě Power
Počítané sloupce
Počítaný sloupec je sloupec, který přidáte do existující tabulky (v návrháři modelů) and pak vytvoříte DAX vzorec, který definuje valuessloupce . Když je v počítaném sloupci contains zadán platný vzorec DAX, values se začnou počítat pro každý řádek ihned po zadání vzorce. Values se pak uloží do datového modelu v paměti. Například v tabulce Date, při zadání vzorce do řádku pro zadání vzorců:
= [Calendar Year] & " Q" & [Calendar Quarter]
value pro každý řádek v tabulce se vypočítá tak, že vezme values ze sloupce CalendarYear (ve stejné tabulce Date), přidá mezeru and velkým písmenem Q and potom přidá values ze sloupce CalendarQuarter (ve stejné tabulce Date). Výsledek pro každý řádek v počítaném sloupci se vypočítá okamžitě, jakmile se objeví and, například jako 2017 Q1. values sloupců se přepočítávají jenom ifor se zpracují všechny related tabulky (aktualizace) or model se uvolní z paměti and pak se znovu načte, například při zavření and opětovném otevření souboru Power BI Desktopu.
Další informace najdete tady:
Počítané sloupce v Power BI Desktopu
Počítané sloupce ve službě Analysis Services
Počítané sloupce v Power kontingenční.
Počítané tabulky
Počítaná tabulka je vypočítaný objekt založený na výrazu vzorce odvozený z allor části jiných tabulek ve stejném modelu. Místo dotazování and na načtení values do sloupců vaší nové tabulky ze zdroje dat, vzorec DAX definuje valuestabulky.
Počítané tabulky mohou být užitečné v dimenzi pro hraní rolí. Příkladem je tabulka Date, například OrderDate, ShipDate, DueDate or, a to 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ů or podmnožinu or 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 mají datové typy, formátování, and mohou patřit do kategorie dat. Počítané tabulky se dají pojmenovat andor skryté stejně jako ostatní tabulky. Počítané tabulky se přepočítají if některé z tabulek, ze kterých načítá data, se aktualizují or aktualizovány.
Další informace najdete tady:
Počítané tabulky v Power BI Desktop
Počítané tabulky ve službě Analysis Services.
Zabezpečení na úrovni řádků
Při zabezpečení na úrovni řádků musí vzorec DAXevaluate na logickou TRUE
/FALSE
podmínku, která určuje, které řádky mohou být vráceny ve výsledcích 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é role prodeje budou moct zobrazit data jenom pro zákazníky v USA; and agregace, například SUM, jsou dostupné jenom pro zákazníky v USA. Zabezpečení na úrovni řádků je not dostupné v Power Pivotu v Excelu.
Při definování řádkové úrovně zabezpečení pomocí vzorce DAX vytváříte povolenou sadu řádků. To not odepření přístupu k jiným řádkům; jsou jednoduše not vráceny jako součást povolené sady řádků. Ostatní role můžou povolit přístup k řádkům vyloučeným DAX vzorcem. If je uživatel členem jiné role, and zabezpečení na úrovni řádků této role umožňuje přístup k dané konkrétní sadě řádků, může uživatel zobrazit data pro tento řádek.
Vzorce zabezpečení na úrovni řádků platí pro zadané řádky i pro related řádky. Pokud má tabulka více relací, filters se použije zabezpečení pro tu relaci, která je aktivní. Vzorce zabezpečení na úrovni řádků se protínají s jinými vzorci definovanými pro tabulky related.
Další informace najdete tady:
zabezpečení na úrovni řádků (RLS) s Power BI
role ve službě Analysis Services
Dotazy
DAX dotazy lze vytvářet a and spouštět v SQL Server Management Studio (SSMS) nebo and v open-source 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í, and a jsou účinnější 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. 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. Existují pouze míry pro duration dotazu. Pro více informací viz DAX dotazy.
Vzorce
DAX vzorce jsou nezbytné pro vytváření výpočtů v počítaných sloupcích and měr, and zabezpečení dat pomocí zabezpečení na úrovni řádků. Pro vytvoření vzorců pro počítané sloupce and a míry použijte řádek vzorců podél horní části návrháře modelů v windowor editoru DAX. Pokud chcete vytvořit vzorce pro zabezpečení na úrovni řádků, použijte dialogové okno Správce rolí or 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é or 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ží todaydate do každého řádku počítaného sloupce. |
= 3 |
Vloží objekt value 3 do každého řádku počítaného sloupce. |
= [Column1] + [Column2] |
Přidá values ve stejném řádku [Sloupec1] and [Sloupec2] and a vloží výsledky do počítaného sloupce téhož řádku. |
Bez ohledu na to, jestli je vytvořený vzorec jednoduchý or složitý, můžete při vytváření vzorce použít následující kroky:
Každý vzorec musí začínat rovnou sign (=).
Můžete zadat or vybrat název funkce, or zadat výraz.
Začněte zadávat first několik písmen požadovaného názvu funkce or, automatické dokončování and zobrazí seznam dostupných funkcí, tabulek, and 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, and klikněte na OK a přidejte funkci do vzorce.
Do funkce zadejte argumenty tak, že je vyberete z rozevíracího seznamu možných tabulek and sloupců, or zadáním values.
Zkontrolujte chyby syntaxe: Ujistěte se, že závorky all jsou zavřené a že sloupce and a tabulky andvalues jsou správně odkazovány.
Stisknutím klávesy ENTER vzorec přijměte.
Poznámka
Jakmile do počítaného sloupce zadáte vzorec and, vzorec se ověří a sloupec se vyplní hodnotami values. V measurestisknutím klávesy ENTER uložíte definici measure s tabulkou. If je vzorec neplatný, zobrazí se error.
V tomto příkladu se podíváme na vzorec v measure s názvem Days in Current Quarter:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Tento measure slouží k vytvoření porovnávacího poměru mezi neúplným obdobím and a obdobím previous. Vzorec musí vzít v úvahu poměr uplynulé části období and a porovnat jej se stejným poměrem v období previous. V tomto případě [Dny aktuální Quarter až Date]/[Dny v aktuálním Quarter] udává podíl uplynulý v aktuálním období.
Tento vzorec contains obsahuje následující prvky:
Prvek vzorce | Popis |
---|---|
Days in Current Quarter |
Název measure. |
= |
Rovná se sign (=) začíná vzorec. |
COUNTROWS |
COUNTROWS spočítá počet řádků v tabulce Date |
() |
Uzavírací závorka and určuje argumenty. |
DATESBETWEEN |
Funkce DATESBETWEEN vrátí data mezi hodnotami lastadate pro každý value ve sloupci Date v tabulce Date. |
'Date' |
Určuje tabulku Date. 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í date na začátku quarter. |
LASTDATE |
Funkce LASTDATE vrátí lastdatequarter. |
'Date' |
Určuje tabulku Date. |
[Date] |
Určuje sloupec Date v tabulce Date. |
, |
|
ENDOFQUARTER |
Funkce ENDOFQUARTER |
'Date' |
Určuje tabulku Date. |
[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í values v rozevíracím seznamu; andall textu po vložení zůstane beze změny.
Funkce Automatické dokončování not přidá uzavírací závorku funkcí a or automaticky přizpůsobuje závorky. Ujistěte se, že každá funkce je syntakticky správná or nemůžete uložit or použít vzorec.
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í vzorců pro or řešení potíží. 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, andMINXall vyžadují tabulku jako argument first.
Funkce
Funkce je pojmenovaný vzorec ve výrazu. Většina funkcí vyžaduje and volitelné argumenty, označované také jako parametry jako vstup. Při spuštění funkce se vrátí value. DAX zahrnuje funkce, které můžete použít k provádění výpočtů pomocí kalendářních dat and časů, vytváření podmíněných values, práci s řetězci, vyhledávání na základě relací, and schopnost iterovat tabulku k provádění rekurzivních výpočtů. If znáte vzorce Aplikace Excel, mnoho z těchto funkcí bude vypadat velmi podobně; vzorce DAX se však liší následujícími důležitými způsoby:
Funkce DAX vždy odkazuje na úplný sloupec or tabulky. If chcete použít jenom konkrétní values ze sloupce or tabulky, můžete do vzorce přidat filters.
If potřebujete přizpůsobit výpočty na základě řádku po řádku, DAX poskytuje funkce, které umožňují použít aktuální řádek valueorrelatedvalue jako druh parametru k provádění výpočtů, které se liší podle kontextu. Informace o fungování těchto funkcí najdete v tématu Kontext v tomto článku.
DAX obsahuje mnoho funkcí, které vracejí tabulku, nikoli value. Tabulka je not zobrazena v reportovacím klientovi, ale slouží k poskytování vstupu jiným funkcím. Můžete například načíst tabulku and potom count jedinečné values, orcalculate dynamické součty ve filtrovaných tabulkách or sloupcích.
DAX funkce obsahují různé time inteligentní funkce. Tyto funkce umožňují defineor vybrat rozsahy date, and provádět dynamické výpočty na základě těchto kalendářních dat orrange. Můžete například porovnat součty napříč paralelními obdobími.
Agregační funkce
Agregační funkce calculate a (skalární) value, jako jsou count, sum, average, minimum a or, maximum pro all řádky ve sloupci v tabulce or, jak je definováno výrazem. Další informace najdete v tématu funkce agregace.
Date and time funkce
Funkce dateandtime v DAX jsou podobné funkcím dateandtime v Microsoft Excelu. Funkce DAX jsou ale založené na datovém typu datetime od 1. března 1900. Další informace najdete v Dateandtime funkcích.
Filter funkce
Funkce filter v DAX vrací konkrétní datové typy, vyhledá values v related tabulkách, andfilter podle relatedvalues. Vyhledávací funkce fungují pomocí vztahů jako tabulek and, podobně jako databáze. Funkce filtrování umožňují manipulovat s kontextem dat a vytvářet dynamické výpočty. Další informace o funkcích Filternajdete zde.
Finanční funkce
Finanční funkce v DAX se používají ve vzorcích, které provádějí finanční výpočty, například čistá současná hodnota návratnosti valueandrate. 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 řádku or, která je zadaná jako argument, a and určí, zda value odpovídá očekávanému typu. Například funkce ISERROR vrátí TRUE
ifvalue, na které odkazujete containserror. Další informace najdete v tématu Informační funkce.
Logické funkce
Logické funkce působí na výraz, aby vrátily informace o values ve výrazu. Funkce TRUE
například umožňuje zjistit, jestli výraz, který vyhodnocujete, vrátí TRUE
value. Další informace najdete v tématu Logické funkce.
Matematické and trigonometrické funkce
Matematické funkce v DAX jsou velmi podobné matematickým and trigonometrických funkcí Excelu. V číselných datových typech používaných funkcemi DAX existují některé menší rozdíly. Další informace najdete v tématu matematika - and trigonometrické 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 DAX umožňují vrátit values z jiné tabulky related, určit konkrétní relaci, která se má použít ve výrazu, and určit směr křížového filtrování. Další informace najdete v části funkce vztahů.
Statistické funkce
Statistické funkce calculatevaluesrelated a statistická rozdělení pravděpodobnosti and, jako je směrodatná odchylka and 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 textového řetězce, search pro text uvnitř řetězce, orconcatenate řetězec values. DAX také poskytuje funkce pro kontrolu formátů pro data, časy, and čísla. Další informace najdete v tématu Textové funkce.
Inteligentní funkce Time
Inteligentní funkce time poskytované v DAX umožňují vytvářet výpočty, které využívají integrované znalosti o kalendářích a datech and. Pomocí rozsahů timeanddate v kombinaci s výpočty agregací or můžete vytvářet smysluplná porovnání ve srovnatelných obdobích time prodeje, zásob a and atd. Další informace najdete v tématu Time inteligentní funkce (DAX).
Funkce pro manipulaci s tabulkami
Tyto funkce vracejí tabulku or k manipulaci s existujícími tabulkami. Například pomocí ADDCOLUMNS můžete do zadané tabulky přidat počítané sloupce, or můžete vrátit souhrnnou tabulku nad sadou skupin pomocí funkce SUMMARIZECOLUMNS. 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 je technicky not 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 measure. 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. Při použití dat modelu ve výpočtu se data převedou na datový typ DAX pro durationand výstup výpočtu. Když vytvoříte DAX vzorec, termíny použité ve vzorci automaticky určí value vrácený datový typ.
DAX podporuje následující datové typy:
Datový typ v modelu | Datový typ v DAX | Popis |
---|---|---|
Whole Number |
64bitové celé číslo (osm bajtů) value1, 2 | Čísla, která nemají desetinná místa. Celá čísla můžou být kladná or záporná čísla, ale musí být celá čísla mezi -9 223 372 036 854 775 808 (-2^63) and 9 223 372 036 854 775 807 (2^63-1). |
Decimal Number |
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 rangevalues. Negativní values od -1,79E +308 do -2,23E -308 Nula Pozitivní values 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ý | Buď TrueorFalsevalue. |
Text |
Řetězec | Řetězec znakových dat Unicode. Mohou to být řetězce, čísla, or data reprezentovaná v textu format. |
Date |
Date/time | Kalendářní data and časy v akceptované date–time reprezentaci. Platná data jsou data all po 1. březnu 1900. |
Currency |
Currency | Currency datový typ umožňuje values od -922 337 203 685 477,5808 do 922 337 203 685 477,5807 s přesností na čtyři desetinná místa fixed. |
N/A |
Blank | blank je datový typ v DAX, který nahrazuje hodnoty null v SQL pomocí and. Pomocí funkce BLANK můžete vytvořit blank, and testovat prázdné hodnoty pomocí logické funkce ISBLANK. |
Tabulkové datové modely také zahrnují datový typ Table jako vstupní or výstup mnoha funkcí DAX. Funkce FILTER například přijímá tabulku jako vstup and výstupem jiné tabulky, která contains pouze řádky, které splňují podmínky filter. 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 and, jejich použití, zejména u DAX vzorců. Chyby ve vzorcích or například neočekávané výsledky jsou č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.
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í, aby odrážely aktuální výběr řádku or, výběr buněk and a také všechna related data. Pochopení kontextu and efektivním použitím kontextu je důležité pro vytváření vysoce výkonných, dynamických analýz and pro ř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:
- Filters použité v sestavě or kontingenční tabulky
- Filters definované ve vzorci
- Relace zadané pomocí speciálních funkcí ve vzorci
Existují různé typy kontextu: kontext řádku, kontext dotazu, andfilter kontext.
Kontext řádku
kontext řádku lze považovat za "aktuální řádek". If vytvoříte vzorec v počítaném sloupci, kontext řádku pro tento vzorec obsahuje values z all sloupců v aktuálním řádku. If je tabulka related do jiné tabulky, obsahuje obsah také allvalues z druhé tabulky, která je related na aktuální řádek.
Předpokládejme například, že vytvoříte počítaný sloupec = [Freight] + [Tax]
, který sečte values ze dvou sloupců, Daň z přepravy and ze stejné tabulky. Tento vzorec automaticky získá pouze values 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 related 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ého value z tabulky related na základě oblasti, do které byla objednávka odeslána. Daňové value se určí pomocí value pro oblast v aktuální tabulce a vyhledáním oblasti v tabulce relatedand získáním daňového rate pro danou oblast z tabulky related.
= [Freight] + RELATED('Region'[TaxRate])
Tento vzorec získá daně rate pro aktuální oblast z tabulky Oblast and a přidá je do value sloupce Přeprava. Ve vzorcích DAX je not nutné znát a or určit 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í and vnější smyčku.
Předpokládejme například, že model contains tabulku Productsand tabulku Sales. Uživatelé mohou chtít projít celou tabulku prodeje, která je plná transakcí zahrnujících více produktů, andfind největší množství objednané pro každou product v každé transakci.
S DAX můžete vytvořit jeden vzorec, který vrátí správný value, and výsledky se automaticky aktualizují všechny time 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.
Do summarizeuloží funkce EARLIER kontext řádku z operace, která předchází aktuální operaci. V all čase funkce ukládá do paměti dvě sady kontextu: jedna sada kontextu představuje aktuální řádek pro vnitřní smyčku vzorce, and další sada kontextu představuje aktuální řádek vnější smyčky vzorce. DAX automaticky přivádí values mezi dvě smyčky, abyste mohli vytvářet složité agregace.
Kontext dotazu
kontext dotazu odkazuje na podmnožinu dat, která se implicitně načítají pro vzorec. Například, když uživatel umístí pole measureor do sestavy, modul prozkoumá záhlaví řádků a sloupců and, průřezy and a sestavu filters, aby určil kontext. Potřebné dotazy se pak spustí na datech modelu, aby získaly správnou podmnožinu dat, provedly výpočty definované vzorcem, a následně and naplní values 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. Například předpokládejme, že vytvoříte vzorec, který sečte values ve sloupci "Zisk" v tabulce "Prodeje": = SUM('Sales'[Profit])
.
If tento vzorec použijete v počítaném sloupci v tabulce Sales, výsledky vzorce budou stejné pro celou tabulku, protože kontext dotazu pro vzorec je vždy celá datová sada tabulky Sales. Výsledky přinesou zisk pro oblasti all, produkty all, roky all a tak dále and.
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í year, konkrétní zemi, konkrétní product, or některé kombinace těchto, and pak získat celkový součet.
V sestavě se kontext mění filtrováním, přidáním or, odebráním polí and, pomocí průřezů. Pro každou změnu je vyhodnocen kontext dotazu, ve kterém je measure posuzován. Proto se stejný vzorec použitý v measurevyhodnocuje v jiném kontextu dotazu pro každou buňku.
Filter kontext
Filter kontext je sada values povolených v každém sloupci, or ve values získané z tabulky related. Filters lze použít na sloupec v návrháři, or v prezentační vrstvě (sestavy and kontingenční tabulky). Filters lze také explicitně definovat pomocí výrazů filter ve vzorci.
Kontext Filter se přidá, když zadáte filter omezení na množinu values povolených ve sloupci or tabulky pomocí argumentů ve vzorci. Filter kontext platí nad jinými kontexty, jako je kontext řádku or kontext dotazu.
V tabulkových modelech existuje mnoho způsobů, jak vytvořit filter kontext. V kontextu klientů, kteří můžou model využívat, například sestavy Power BI, můžou uživatelé průběžně vytvářet filters přidáním průřezů or sestavy filters na záhlaví řádků and sloupců. Můžete také zadat filter výrazy přímo ve vzorci k určení relatedvaluesa filter tabulek, které se používají jako vstupy, a or dynamicky získávat kontext pro values, které se používají při výpočtech. Můžete také úplně vymazat or selektivně vymazat filters u konkrétních sloupců. To je velmi užitečné při vytváření vzorců, které calculate celkové součty.
Další informace o tom, jak vytvořit filters ve vzorci, najdete v funkci FILTER (DAX).
Příklad toho, jak lze vymazat filters, aby bylo možné vytvořit celkové součty, najdete ve funkci ALL (DAX).
Pro příklady toho, jak selektivně vymazat and a aplikovat filters ve vzorcích, nahlédněte do tématu ALLEXCEPT.
Určení kontextu ve vzorcích
Když vytvoříte vzorec DAX, vzorec se nejprve first testuje na platnou syntaxi a and následně se kontroluje, aby se zajistilo, že názvy sloupců a tabulky and zahrnuté ve vzorci lze nalézt v aktuálním kontextu. If jakýkoli sloupec or tabulky zadané vzorcem nebyl nalezen, vrátí se error.
Kontext během procesu ověřování pro operace přepočtu (and) je určován, jak je popsáno v předchozích částech, pomocí dostupných tabulek v modelu, všech relací mezi tabulkami, and a v jakémkoli použitých filters.
Například if jste právě naimportovali některá data do nové tabulky, and je notrelated do jiných tabulek (and jste not použili libovolnou filters), aktuální kontext je celá sada sloupců v tabulce. If je tabulka propojená relacemi s jinými tabulkami, aktuální kontext zahrnuje tabulky related. If přidáte sloupec z tabulky s daty do sestavy, která obsahuje filtry and možná některé sestavy filters, 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 s jednoduchými vzorci a vztahy and, 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ů:
- Relační operátory pro porovnání valuesand vrátí logickou
TRUE
FALSEvalue. - Aritmetické operátory pro provádění výpočtů, které vracejí číslo values.
- Operátory zřetězení textu pro spojení dvou or více textových řetězců.
- Logické operátory, které kombinují dva or více výrazů, aby vrátily jeden výsledek.
Podrobné informace o operátorech používaných ve vzorcích DAX naleznete v tématu DAX operátory.
Práce s tabulkami ve sloupcích and
Tabulky v tabulkových datových modelech vypadají jako excelové tabulky, ale liší se způsobem, jakým pracují s daty and se vzorci:
- Vzorce fungují jenom se tabulkami, and sloupci, not s jednotlivými buňkami, range s odkazy, or s maticemi.
- Vzorce můžou pomocí relací získat values z related tabulek. Načtené values jsou vždy related k aktuálnímu řádku value.
- V excelovém listu můžete mít nepravidelná or "roztřepená" data, ale nikde jinde nemůžete. Každý řádek v tabulce musí obsahovat stejný počet sloupců. V některých sloupcích ale můžete mít prázdné values. Datové tabulky v Excelu and tabulkového modelu jsou not zaměnitelné.
- Vzhledem k tomu, že je pro každý sloupec nastavený datový typ, musí být každý value v daném sloupci stejného typu.
Odkaz na sloupce tabulek and ve vzorcích
Pomocí názvu můžete odkazovat na libovolný sloupec tabulky and. 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])
Když se vzorec vyhodnotí, návrhář modelů first zkontroluje obecnou syntaxi, and pak zkontroluje názvy sloupců and tabulek, které zadáte pro možné sloupce and tabulky v aktuálním kontextu. If je název nejednoznačný orif sloupec tabulky or nelze najít, dostanete error ve vzorci (řetězec #ERROR místo datové hodnoty value v buňkách, kde se vyskytuje error). Další informace o požadavcích na pojmenování tabulek, sloupců and jiných objektů najdete v tématu Požadavky na pojmenování v DAX syntaxe.
Relace mezi tabulkami
Vytvořením relací mezi tabulkami získáte možnost používat relatedvalues v jiných tabulkách při výpočtech. Pomocí počítaného sloupce můžete například přiřadit all zásilkové záznamy related aktuálnímu prodejci, and poté sum náklady na expedici každé zásilky. V mnoha případech ale může být relace not nutná. Pomocí funkce LOOKUPVALUE ve vzorci můžete vrátit value pro řádek v result_columnName, který splňuje kritéria zadaná v argumentech search_columnandsearch_value.
Mnoho DAX funkcí vyžaduje, aby mezi tabulkami existovala relace, or mezi více tabulkami, aby bylo možné vyhledat sloupce, na které jste odkazovali, and 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 a nesprávným výsledkům or, je jako aktivní relace určena pouze jedna relace v time, ale aktivní relaci můžete podle potřeby změnit pro procházení různých spojení při výpočtech nad daty. USERELATIONSHIP funkci lze použít k určení jedné or 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 ty dvě sloupce použité jako klíče měly shodné values. Referenční integrita se not vynucuje, takže je možné v klíčovém sloupci and mít nesouhlasící hodnoty values a přesto vytvořit vztah. Pokud k tomu If dochází, měli byste vědět, že blankvaluesor neodpovídající values mohou ovlivnit výsledky vzorců.
Při propojení tabulek v modelu pomocí relací zvětšíte rozsah, orkontext, ve kterém se vzorce vyhodnocují. Změny v kontextu, které jsou výsledkem přidání nových tabulek, nových relací, or ze změn v aktivní relaci můžou způsobit, že se výsledky změní způsoby, které můžete not předvídat. Další podrobnosti najdete v části Kontext v tomto článku.
Obnovení procesu and
proces přepočítáváníand zahrnuje dvě samostatné, ale related operace. Při navrhování modelu, který contains složitých vzorců, velkých objemů dat, or dat získaných z externích zdrojů dat byste měli důkladně porozumět těmto konceptům.
Proces (aktualizace) aktualizuje data v modelu o nová data z externího zdroje dat.
přepočítávání je proces aktualizace výsledků vzorců tak, aby odrážel všechny změny samotných vzorců, and aby odrážely změny v podkladových datech. Přepočet může ovlivnit výkon následujícími způsoby:
values v počítaném sloupci jsou vypočteny a and jsou uloženy v modelu. Chcete-li aktualizovat values v počítaném sloupci, musíte model zpracovat pomocí jednoho ze tří příkazů zpracování – Proces celý, Proces data, or Proces přepočítat. Výsledek vzorce musí být vždy přepočítán pro celý sloupec, kdykoli změníte vzorec.
values počítané podle měr se dynamicky vyhodnocují vždy, když uživatel přidá measure do kontingenční tabulky or otevřít sestavu; když uživatel upraví kontext, values vrácené measure změnit. Výsledky measure vždy odrážejí nejnovější informace v paměti.
Zpracování and přepočtu nemá žádné effect na vzorcích zabezpečení na úrovni řádků, pokud výsledek přepočtu nevrátí jiný value, takže dotazovatelné řádkové ornot členy role.
Aktualizace
DAX se neustále vylepšuje. nové and aktualizované funkce jsou vydány s next aktualizací, kterou obvykle poskytují měsíční aktualizace. Služby se aktualizují firsta následně nainstalované aplikace, jako jsou Power BI Desktop, Excel, SQL Server Management Studio (SSMS), rozšíření projektu and Analysis Services pro Visual Studio (SSDT). Služba SQL Server Analysis Services se aktualizuje kumulativní aktualizací next. Nové funkce first oznamují and popsané v referenčních informacích o funkcích DAX s aktualizacemi Power BI Desktopu.
Not all funkce jsou podporovány ve earlier verzích služby SQL Server Analysis Services and Excelu.
Řešení problémů
If při definování vzorce získáte error, vzorec může obsahovat syntaktické error, sémantické error, orvýpočet error.
Syntaktické chyby se nejsnadněji vyřeší. Obvykle se jedná o chybějící závorku or a čárku.
Druhý typ error nastane, když je syntaxe správná, ale valueor sloupec odkazovaný not dává smysl v kontextu vzorce. Tyto sémantické and chyby výpočtu můžou být způsobené některým z následujících problémů:
- Vzorec odkazuje na neexistující sloupec, tabulku a funkci or.
- Zdá se, že vzorec je správný, ale když datový engine načte data, najde neshodu typu a and vyvolá error.
- Vzorec předává funkci nesprávný počet argumentů typu or.
- Vzorec odkazuje na jiný sloupec, který má error, and, proto jeho values jsou neplatné.
- Vzorec odkazuje na sloupec, který not byl zpracován, což znamená, že obsahuje metadata, ale žádná skutečná data použitelná pro výpočty.
V first čtyřech případech DAX označí celý sloupec, který contains neplatný vzorec. V případě lastDAX zšedne sloupec, aby indikoval, že je ve stavu nezpracování.
Aplikace and nástroje
Power BI Desktop
Power BI Desktop je bezplatná aplikace pro modelování dat and vytváření sestav. Návrhář modelů obsahuje editor DAX pro vytváření výpočtových vzorců DAX.
Power Pivot v Excelu
Návrhář modelů Power v Excelu obsahuje editor DAX pro vytváření výpočetních vzorců DAX.
Visual Studio
Visual Studio s projekty Analysis Services rozšíření (VSIX) se používá k vytváření projektů modelu služby Analysis Services. Návrhář tabulkových modelů nainstalovaný s rozšířením projektů obsahuje editor DAX.
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í obou tabulkových and multidimenzionálních modelů.
DAX Studio
ikona
DAX Studio je opensourcový klientský nástroj pro vytváření and spouštění DAX dotazů ve službě Analysis Services, Power BI Desktopu, andPower Pivot v modelech Excelu.
Tabulkový editor
Tabular Editor je open-source 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 úprav měřítek, počítaných sloupců a výrazů počítaných tabulek and.
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, andPower Pivot v Excelu all obsahují články and kurzy, které zahrnují lekce týkající se vytváření měr, počítaných sloupců, and řádkůfilters pomocí DAX. Tady jsou některé další zdroje informací:
Použijte DAX v Power BI Desktopu k učení path.
The Definitive Guide to DAX by Alberto Ferrari and Marco Russo (Microsoft Press). Now ve své second edici poskytuje tato rozsáhlá příručka základy inovativních vysoce výkonných technik pro začínající odborníky na modelování dat and BI.
Komunita
DAX má aktivní komunitu, která je vždy ochotná sdílet své znalosti. Microsoft Power BI Community má speciální diskuzní fórum jen pro DAX, DAX příkazy and tipy.