Syntax jazyka DAX

Tento článok popisuje syntax a požiadavky na výrazový jazyk vzorcov DAX.

Požiadavky na syntax

Vzorec jazyka DAX sa 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 jazyka DAX vracajú tabuľku namiesto skaláru a musia byť zabalené do funkcie, ktorá vyhodnotí tabuľku a vráti skalár. 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í jazyka 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 Result
= 3 3
= "Predaj" Predaj
= 'Predaj'[Suma] 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 *[Suma])

=0,03 * [Suma]
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 nerozlišujú malé a veľké písmená, napríklad názvy PREDAJ a Predaj by predstavovali rovnakú tabuľku.

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ázov stĺpca. Úplný kvalifikovaný 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 'USA Predaj[Produkty]. 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 alebo ALLEXCEPT

  • V argumente filtra pre funkcie, CALCULATE alebo CALCULATETABLE

  • Ako argument funkcie, RELATEDTABLE

  • Ako argument ľubovoľnej funkcie časovej inteligencie

Nekvalifikovaný názov stĺpca je len názov stĺpca, ktorý je 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.

Poznámka

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.

Miery

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

Poznámka

Ú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 nemusí byť jazyk DAX 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:

  • Vzorce a výrazy jazyka DAX nemôžu v tabuľkách upravovať ani vkladať jednotlivé hodnoty.

  • Pomocou jazyka DAX nie je možné vytvárať vypočítané riadky. 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.

  • Jazyk 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 jazyka DAX

Nasledujúca tabuľka obsahuje zoznam operátorov, ktoré podporuje jazyk DAX. Ďalšie informácie o syntaxi jednotlivých operátorov nájdete v téme Operátory jazyka 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/

sign)

* (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 reťazenia textu & (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 jazyka DAX. Keď použijete údaje vo vzorci jazyka DAX, DAX automaticky identifikuje typy údajov v odkazovaných stĺpcoch a hodnôt, 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. Jazyk 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é

Jazyk 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 Funkcie jazyka DAX.

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

Jazyk 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. Funkcie dátumu a času jazyka DAX implicitne konvertujú argumenty na typ údajov datetime.

Poznámka

Presná maximálna hodnota dátumu a času podporovaná jazykom 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 hodnoty dátumu a dátumu a času jazyka DAX 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 funkcie DATE a TIME na filtrovanie dátumu OrderDate:

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"
)

Poznámka

Formát literálu typu DAX pre dátum a dátum a čas nie je podporovaný vo všetkých verziách aplikácie Power BI Desktop, služieb Analysis Services ani Doplnku Power Pivot v Exceli. Nové a aktualizované funkcie jazyka DAX sú zvyčajne najskôr predstavené v aplikácii Power BI Desktop a potom neskôr zahrnuté v službách Analysis Services a Power Pivot v Exceli.