syntax DAX
Tento článok popisuje syntax a požiadavky na výrazový jazyk vzorcov DAX.
Požiadavky na syntax
Vzorec DAX vždy začína znamienkom rovnosti (=
). Po znamienku rovnosti môžete zadať ľubovoľný výraz, ktorý sa vyhodnotí ako skalárny alebo výraz, ktorý sa dá skonvertovať na skalárny. Patria k nim nasledovné:
Skalárna konštanta alebo výraz, ktorý používa skalárny operátor (
+,-,*,/,>=,...,&&, ...
).Odkazy na stĺpce alebo tabuľky. Jazyk DAX vždy používa tabuľky a stĺpce ako vstupy pre funkcie, nikdy pole alebo ľubovoľnú množinu hodnôt.
Operátory, konštanty a hodnoty poskytované ako súčasť výrazu.
Výsledok funkcie a jej požadovaných argumentov. Niektoré funkcie DAX vracajú tabuľku namiesto skaláru a musia byť zabalené do funkcie, ktorá vyhodnotí tabuľku a vráti skalárnu funkciu. pokiaľ tabuľka nie je jedným stĺpcom, tabuľkou s jedným riadkom, potom sa považuje za skalárnu hodnotu.
Väčšina funkcií DAX vyžaduje jeden alebo viac argumentov, ktoré môžu obsahovať tabuľky, stĺpce, výrazy a hodnoty. Niektoré funkcie, napríklad PI, však nevyžadujú žiadne argumenty, ale vždy vyžadujú zátvorky na označenie argumentu s hodnotou null. Musíte napríklad vždy zadať PI(), nie PI. Môžete tiež vnoriť funkcie v rámci iných funkcií.
Výrazy. Výraz môže obsahovať niektorú z nasledujúcich možností: operátory, konštanty alebo odkazy na stĺpce.
Napríklad všetky nasledujúce sú platné vzorce.
Vzorec | Výsledok |
---|---|
= 3 |
3 |
= "Sales" |
predaj |
= 'Sales'[Amount] |
Ak použijete tento vzorec v tabuľke Predaj, získate hodnotu stĺpca Suma v tabuľke Predaj pre aktuálny riadok. |
= (0.03 *[Amount]) =0.03 * [Amount] |
Tri percentá hodnoty v stĺpci Suma aktuálnej tabuľky. Napriek tomu, že tento vzorec možno použiť na výpočet percentuálnej hodnoty, výsledok sa nezobrazuje v percentách, pokiaľ v tabuľke nepoučíte formátovanie. |
= PI() |
Hodnota konštanty pi. |
Vzorce sa môžu správať odlišne v závislosti od spôsobu ich používania. Vždy musíte mať na zedomosť o kontexte a o tom, ako údaje, ktoré používate vo vzorci, súvisia s inými údajmi, ktoré sa môžu použiť vo výpočte.
Požiadavky na označovanie
Dátový model často obsahuje viacero tabuliek. Tabuľky a ich stĺpce spolu tvoria databázu uloženú v nástroji na analýzu v pamäti (VertiPaq). V rámci tejto databázy musia mať všetky tabuľky jedinečné názvy. Názvy stĺpcov musia byť tiež jedinečné v rámci každej tabuľky. Všetky názvy objektov sú bez rozlišovania veľkých a malých písmen; Rovnakú tabuľku by predstavovali napríklad názvy SALES a Sales.
Každý stĺpec a mierka, ktoré pridáte do existujúceho dátového modelu, musia patriť ku konkrétnej tabuľke. Tabuľku, ktorá obsahuje stĺpec, zadávate implicitne, keď vytvoríte vypočítaný stĺpec v rámci tabuľky, alebo explicitne, keď vytvoríte mierku a určíte názov tabuľky, v ktorej by sa mala uložiť definícia mierky.
Keď použijete tabuľku alebo stĺpec ako vstup do funkcie, musíte vo všeobecnosti kvalifikovať názvu stĺpca. Úplný názov stĺpca je názov tabuľky, za ktorým nasleduje názov stĺpca v hranatých zátvorkách: napríklad 'US Sales'[Products]. Pri odkaze na stĺpec v nasledujúcich kontextoch sa vždy vyžaduje úplný kvalifikovaný názov:
Ako argument funkcie
VALUES
Ako argument funkcií
ALL
aleboALLEXCEPT
V argumente filtra pre funkcie,
CALCULATE
aleboCALCULATETABLE
Ako argument funkcie
RELATEDTABLE
Ako argument ľubovoľnej funkcie časovej inteligencie
nekvalifikovaný názov stĺpca je len názov stĺpca uzavretý v zátvorkách: napríklad [Čiastka predaja]. Ak napríklad odkazujete na skalárnu hodnotu z rovnakého riadka aktuálnej tabuľky, môžete použiť nekvalifikovaný názov stĺpca.
Ak názov tabuľky obsahuje medzery, vyhradené kľúčové slová alebo nepovolené znaky, musíte názov tabuľky uviesť v jednoduchých úvodzovkách. Názvy tabuliek je potrebné uviesť v úvodzovkách aj vtedy, ak tieto obsahujú znaky mimo rozsahu alfanumerických znakov ANSI, bez ohľadu na to, či vaše miestne nastavenie túto tabuľku znakov podporuje alebo nie. Ak napríklad otvoríte zošit obsahujúci názvy tabuliek napísané v znakoch cyriliky, ako napríklad 'Таблица', názov tabuľky musí byť uzavretý v úvodzovkách, aj keď neobsahuje medzery.
Nota
Ak chcete zjednodušiť zadávanie úplných kvalifikovaných názvov stĺpcov, použite funkciu automatického dokončovania v editore vzorcov.
Tabuľky
Názvy tabuliek sa vyžadujú vždy, keď je stĺpec z inej tabuľky, ako je aktuálna tabuľka. Názvy tabuliek musia byť v rámci databázy jedinečné.
Názvy tabuliek musia byť uzavreté v jednoduchých úvodzovkách, ak obsahujú medzery, iné špeciálne znaky alebo ľubovoľné neanglické alfanumerické znaky.
Opatrenia
Názvy mierok musia byť vždy v hranatých zátvorkách.
Názvy mierok môžu obsahovať medzery.
Každý názov mierky musí byť jedinečný v rámci modelu. Preto je názov tabuľky voliteľný pred názvom mierky pri odkazovaní na existujúcu mierku. Keď však vytvoríte mierku, musíte vždy zadať tabuľku, v ktorej bude uložená definícia mierky.
Stĺpce
Názvy stĺpcov musia byť jedinečné v kontexte tabuľky. Viaceré tabuľky však môžu mať stĺpce s rovnakými názvami (rozlišovanie je súčasťou názvu tabuľky).
Vo všeobecnosti možno na stĺpce odkazovať bez odkazu na základnú tabuľku, do ktorej patria, s výnimkou prípadov, kedy by sa mohlo vyskytnúť riešenie konfliktu v názve alebo pri určitých funkciách, ktoré vyžadujú úplnú kvalifikáciu názvov stĺpcov.
Vyhradené kľúčové slová
Ak je názov, ktorý používate pre tabuľku, rovnaký ako vyhradené kľúčové slovo v službe Analysis Services, vyvolá sa chyba a musíte premenovať tabuľku. V názvoch objektov však môžete použiť kľúčové slová, ak je názov objektu uzavretý v zátvorkách (pre stĺpce) alebo úvodzovkách (pre tabuľky).
Nota
Úvodzovky môžu byť zastúpené viacerými rôznymi znakmi v závislosti od použitia. Ak prilepíte vzorce z externého dokumentu alebo webovej stránky, skontrolujte kód ASCII znaku, ktorý sa používa na otváracie a uzatváracie úvodzovky, aby ste sa uistili, že sú rovnaké. V opačnom prípade DAX nemusia byť schopní rozpoznať symboly ako úvodzovky, čo robí odkaz neplatným.
Špeciálne znaky
Nasledujúce znaky a typy znakov nie sú platné v názvoch tabuliek, stĺpcov alebo mierok:
Úvodné alebo koncové medzery; pokiaľ medzery nie sú uzavreté podľa oddeľovačov názvov, zátvoriek alebo jednoduchých apostrofov.
Riadiace znaky
Nasledujúce znaky, ktoré nie sú platné v názvoch objektov:
.,;':/\\*|?&%$!+=()[]{}<>
Príklady názvov objektov
V nasledujúcej tabuľke sú uvedené príklady niektorých názvov objektov:
Typy objektov | Príklady | Komentár |
---|---|---|
Názov tabuľky | predaj | Ak názov tabuľky neobsahuje medzery ani iné špeciálne znaky, názov nemusí byť uzavretý v úvodzovkách. |
Názov tabuľky | Predaj v Kanade | Ak názov obsahuje medzery, tabulátory alebo iné špeciálne znaky, uzavrite názov do jednoduchých úvodzoviek. |
Úplný kvalifikovaný názov stĺpca | Predaj[Suma] | Názov tabuľky predchádza názvu stĺpca a názov stĺpca je uzavretý v hranatých zátvorkách. |
Úplný kvalifikovaný názov mierky | Predaj[Zisk] | Názov tabuľky predchádza názvu mierky a názov mierky je uzavretý v hranatých zátvorkách. V určitých kontextoch sa vždy vyžaduje úplný kvalifikovaný názov. |
Nekvalifikovaný názov stĺpca | [Suma] | Nekvalifikovaný názov je len názov stĺpca v hranatých zátvorkách. Kontexty, v ktorých môžete použiť nekvalifikovaný názov, zahŕňajú vzorce vo vypočítanom stĺpci v rámci tej istej tabuľky alebo v agregačnej funkcii, ktorá kontroluje rovnakú tabuľku. |
Úplný kvalifikovaný stĺpec v tabuľke s medzerami | 'Predaj v Kanade'[Množstvo] | Názov tabuľky obsahuje medzery, takže musí byť obklopený jednoduchými úvodzovkami. |
Ďalšie obmedzenia
Syntax vyžadovaná pre každú funkciu a typ operácie, ktorá môže vykonať, sa značne líšia v závislosti od funkcie. Vo všeobecnosti sa však nasledujúce pravidlá vzťahujú na všetky vzorce a výrazy:
DAX vzorce a výrazy nemôžu v tabuľkách upravovať ani vkladať jednotlivé hodnoty.
Vypočítané riadky nie je možné vytvoriť pomocou DAX. Môžete vytvoriť iba vypočítané stĺpce a mierky.
Pri definovaní vypočítaných stĺpcov môžete vnoriť funkcie do ľubovoľnej úrovne.
DAX má niekoľko funkcií, ktoré vracajú tabuľku. Zvyčajne použijete hodnoty vrátené týmito funkciami ako vstup do ďalších funkcií, ktoré si vyžadujú ako vstup tabuľku.
operátory a konštanty DAX
Nasledujúca tabuľka obsahuje zoznam operátorov, ktoré podporuje DAX. Ďalšie informácie o syntaxi jednotlivých operátorov nájdete v téme Operátory DAX.
Typ operátora | Symbol a použitie |
---|---|
Operátor zátvorky |
() poradie podľa priority a zoskupenie argumentov |
Aritmetické operátory |
+ (sčítanie)- (odčítanie)* (násobenie)/ (delenie)^ (umocnenie) |
Operátory porovnávania |
= (rovná sa)> (väčšie ako)< (menšie ako)>= (väčšie ako alebo rovná sa)<= (menšie ako alebo rovná sa)<> (nerovná sa) |
Operátor spájania reťazcov |
& (zreťazenie) |
Logické operátory |
&& (a)|| (alebo) |
typy údajov
Nemusíte pretypovať, konvertovať ani inak určovať typ údajov stĺpca alebo hodnoty, ktoré používate vo vzorci DAX. Keď použijete údaje vo vzorci DAXDAX automaticky identifikuje typy údajov v odkazovaných stĺpcoch a hodnoty, ktoré zadáte, a vykoná implicitné konverzie tam, kde je to potrebné na dokončenie určenej operácie.
Ak sa napríklad pokúsite pridať číslo k hodnote dátumu, nástroj interpretuje operáciu v kontexte funkcie a skonvertuje čísla na spoločný typ údajov a potom predloží výsledok v zamýšľanom formáte, čo je dátum.
Existujú však určité obmedzenia hodnôt, ktoré sa dajú úspešne skonvertovať. Ak má hodnota alebo stĺpec typ údajov, ktorý je nekompatibilný s aktuálnou operáciou, DAX vráti chybu. Funkcia DAX tiež neposkytuje funkcie, ktoré vám umožnia explicitne zmeniť, konvertovať alebo pretypovať typ existujúcich údajov, ktoré ste importovali do dátového modelu.
Dôležitý
DAX nepodporuje použitie variantného typu údajov. Preto pri načítavaní alebo importovaní údajov do dátového modelu sa očakáva, že údaje v každom stĺpci sú vo všeobecnosti konzistentného typu.
Niektoré funkcie vracajú skalárne hodnoty vrátane reťazcov, zatiaľ čo iné funkcie fungujú s číslami, celými číslami aj reálnymi číslami alebo dátumami a časmi. Typ údajov požadovaný pre každú funkciu je popísaný v sekcii DAX funkcie.
Ako argument funkcie môžete použiť tabuľky obsahujúce viacero stĺpcov a viacero riadkov údajov. Niektoré funkcie vracajú tiež tabuľky, ktoré sú uložené v pamäti, a môžu sa použiť ako argumenty pre iné funkcie.
Dátum a čas
DAX ukladá hodnoty dátumu a času pomocou typu údajov datetime, ktorý používa Microsoft SQL Server. Formát Datetime používa číslo s pohyblivou desatinnou čiarkou, kde hodnoty dátumu zodpovedajú celočíselnej časti predstavujúcej počet dní od 30. decembra 1899. Hodnoty času zodpovedajú desatinnej časti hodnoty dátumu, kde hodiny, minúty a sekundy sú zastúpené desatinnými zlomkami dňa. DAX funkcie dátumu a času implicitne konvertujú argumenty na typ údajov datetime.
Nota
Presná maximálna hodnota dátumu a času podporovaná DAX je 31. december 9999 00:00:00.
Literál dátumu a času
Od verzie aplikácie Power BI Desktop z augusta 2021 možno DAX hodnoty dátumu a dátumu a času zadať ako literál vo formáte dt"YYYY-MM-DD"
, dt"YYYY-MM-DDThh:mm:ss"
alebo dt"YYYY-MM-DD hh:mm:ss"
. Ak je zadaný ako literál, použitie funkcií DATE, TIME, DATEVALUE, TIMEVALUE vo výraze nie je potrebné.
Nasledujúci výraz napríklad používa na filtrovanie dátumu OrderDate funkcie DATE a TIME:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)
Rovnaký výraz filtra možno zadať ako literál:
EVALUATE
FILTER (
FactInternetSales,
[OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)
Nota
Formát literálu DAX dátumu a času nie je podporovaný vo všetkých verziách aplikácie Power BI Desktop, služby Analysis Services ani doplnku Power Pivot v Exceli. Nové a aktualizované DAX funkcie sú zvyčajne najskôr predstavené v aplikácii Power BI Desktop a potom sú neskôr zahrnuté v službách Analysis Services a Power Pivot v Exceli.