DAX-szintaxis

Ez a cikk a DAX-képletkifejezés nyelvének szintaxisát és követelményeit ismerteti.

Szintaxisra vonatkozó követelmények

A DAX-képletek mindig egyenlőségjellel (=) kezdődnek. Az egyenlőségjel után bármely olyan kifejezést megadhat, amely skalárissá értékel, vagy olyan kifejezést, amely skalárissá alakítható. Ezek a következők:

  • Skaláris állandó vagy skaláris operátort használó kifejezés (+,-,*,/,>=,...,>...)

  • Oszlopokra vagy táblákra mutató hivatkozások. A DAX nyelv mindig táblákat és oszlopokat használ bemenetként a függvényekhez, soha nem tömböt vagy tetszőleges értékkészletet.

  • Egy kifejezés részeként megadott operátorok, állandók és értékek.

  • Egy függvény eredménye és a szükséges argumentumok. Egyes DAX-függvények skaláris helyett táblát adnak vissza, és olyan függvénybe kell burkolni, amely kiértékeli a táblát, és skaláris értéket ad vissza; kivéve, ha a tábla egyetlen oszlopból, egysoros táblázatból áll, akkor skaláris értékként lesz kezelve.

    A LEGTÖBB DAX-függvényhez egy vagy több argumentum szükséges, amelyek tartalmazhatnak táblákat, oszlopokat, kifejezéseket és értékeket. Egyes függvények, például a PI azonban nem igényelnek argumentumokat, de mindig zárójelek szükségesek a null argumentum jelzéséhez. Például mindig a PI() típust kell beírnia, nem a PI-t. A függvényeket más függvényekbe is beágyazhatja.

  • Kifejezések. A kifejezések a következők bármelyikét tartalmazhatják: operátorok, állandók vagy oszlopokra mutató hivatkozások.

Az alábbiak például mind érvényes képletek.

Képlet Eredmény
= 3 3
= "Értékesítés" Értékesítés
= 'Sales'[Amount] Ha ezt a képletet a Sales táblában használja, az aktuális sor Sales táblájában az Összeg oszlop értékét fogja megkapni.
= (0,03 *[Összeg])

=0,03 * [Összeg]
Az aktuális tábla Összeg oszlopában szereplő érték három százaléka.

Bár ez a képlet egy százalék kiszámítására használható, az eredmény csak akkor jelenik meg százalékos értékként, ha formázást alkalmaz a táblában.
= PI() A pi állandó értéke.

A képletek a használatuk módjától függően eltérően viselkedhetnek. Mindig tisztában kell lennie a környezettel és azzal, hogy a képletben használt adatok hogyan kapcsolódnak a számítás során esetleg használt egyéb adatokhoz.

Elnevezési követelmények

Az adatmodellek gyakran több táblát tartalmaznak. A táblák és oszlopaik együttesen egy, a memórián belüli elemzési motorban (VertiPaq) tárolt adatbázist alkotnak. Az adatbázisban minden táblának egyedi névvel kell rendelkeznie. Az oszlopok nevének az egyes táblákon belül is egyedinek kell lennie. Minden objektumnév megkülönbözteti a kis- és nagybetűket, például a SALES és a Sales nevek ugyanazt a táblát jelölik.

A meglévő adatmodellhez hozzáadott minden oszlopnak és mértéknek egy adott táblához kell tartoznia. Az oszlopot tartalmazó táblát implicit módon adja meg, amikor számított oszlopot hoz létre egy táblában, vagy explicit módon, amikor létrehoz egy mértéket, és megadja annak a táblának a nevét, amelyben a mértékdefiníciót tárolni kell.

Ha táblázatot vagy oszlopot használ egy függvény bemeneteként, általában meg kell adnia az oszlop nevét. Az oszlop teljes neve a tábla neve, majd az oszlop neve szögletes zárójelben: például:"Amerikai értékesítések"[Termékek]. A teljes névre mindig szükség van, ha az alábbi környezetekben hivatkozik egy oszlopra:

  • A függvény argumentumaként az ÉRTÉKEK

  • A függvények argumentumaként az ALL vagy az ALLEXCEPT

  • A függvények szűrőargumentumában a CALCULATE vagy a CALCULATETABLE

  • A függvény argumentumaként a RELATEDTABLE

  • Bármely időintelligencia-függvény argumentumaként

A nem minősített oszlopnév csak az oszlop neve, szögletes zárójelek közé zárva: például: [Sales Amount]. Ha például az aktuális tábla ugyanazon sorából hivatkozik skaláris értékre, használhatja a nem minősített oszlopnevet.

Ha egy tábla neve szóközöket, fenntartott kulcsszavakat vagy tiltott karaktereket tartalmaz, a táblázat nevét egyetlen idézőjelbe kell foglalnia. A táblaneveket idézőjelek közé kell foglalnia, ha a név az ANSI alfanumerikus karaktertartományán kívüli karaktereket tartalmaz, függetlenül attól, hogy a területi beállítás támogatja-e a karakterkészletet. Ha például olyan munkafüzetet nyit meg, amely cirill karakterekkel írt táblázatneveket tartalmaz( például "Таблица"), a táblázat nevét idézőjelek közé kell foglalni, még akkor is, ha nem tartalmaz szóközöket.

Feljegyzés

Az oszlopok teljes neveinek könnyebb megadásához használja az Automatikus kiegészítés funkciót a képletszerkesztőben.

Táblák

  • A táblanevek akkor szükségesek, ha az oszlop az aktuális táblától eltérő táblából származik. A táblaneveknek egyedinek kell lenniük az adatbázisban.

  • A táblázatneveket idézőjelek közé kell foglalni, ha szóközöket, egyéb speciális karaktereket vagy nem angol nyelvű alfanumerikus karaktereket tartalmaznak.

Mértékek

  • A mértékneveknek mindig zárójelben kell lenniük.

  • A mértéknevek szóközöket tartalmazhatnak.

  • Minden mértéknévnek egyedinek kell lennie egy modellben. Ezért a tábla neve nem kötelező a mérték neve előtt, amikor egy meglévő mértékre hivatkozik. Mérték létrehozásakor azonban mindig meg kell adnia egy táblát, amelyben a mértékdefiníció lesz tárolva.

Oszlopok

Az oszlopneveknek egyedinek kell lenniük egy tábla kontextusában; azonban több tábla is rendelkezhet azonos nevű oszlopokkal (egyértelműsítés a tábla nevével együtt).

Az oszlopokra általában anélkül lehet hivatkozni, hogy hivatkoznának arra az alaptáblára, amelyhez tartoznak, kivéve, ha egy névütközés feloldható, vagy olyan függvényekkel, amelyekhez az oszlopnevek teljes minősítése szükséges.

Fenntartott kulcsszavak

Ha a tábla neve megegyezik a fenntartott Analysis Services kulcsszóval, hibaüzenet jelenik meg, és át kell neveznie a táblát. Az objektumnevekben azonban kulcsszavakat is használhat, ha az objektum neve szögletes zárójelekben (oszlopokhoz) vagy idézőjelekben (táblákhoz) van csatolva.

Feljegyzés

Az idézőjeleket az alkalmazástól függően több különböző karakter is jelölheti. Ha külső dokumentumból vagy weblapról illeszt be képleteket, ellenőrizze az idézőjelek megnyitásához és bezárásához használt karakter ASCII-kódját, hogy azok megegyeznek-e. Ellenkező esetben előfordulhat, hogy a DAX nem tudja felismerni a szimbólumokat idézőjelként, így a hivatkozás érvénytelen.

Speciális karakterek

A következő karakterek és karaktertípusok nem érvényesek a táblák, oszlopok vagy mértékek neveiben:

  • Vezető vagy záró szóközök; kivéve, ha a szóközöket névhatárolók, szögletes zárójelek vagy egyetlen aposztrófok közé zárják.

  • Vezérlőkarakterek

  • A következő karakterek érvénytelenek az objektumok nevében:

    .,;':/\*|? &%$!+=()[]{}<>

Példák objektumnevekre

Az alábbi táblázat néhány objektumnévre mutat be példákat:

Objektumtípusok Példák Megjegyzés
Tábla neve Értékesítés Ha a táblanév nem tartalmaz szóközöket vagy más speciális karaktereket, a nevet nem kell idézőjelek közé tenni.
Tábla neve "Canada Sales" Ha a név szóközöket, tabulátorokat vagy más speciális karaktereket tartalmaz, a nevet idézőjelek közé kell foglalnia.
Teljes oszlopnév Értékesítés[Összeg] A tábla neve megelőzi az oszlopnevet, és az oszlop neve szögletes zárójelek közé van zárva.
Teljes mértéknév Értékesítés[Profit] A tábla neve megelőzi a mérték nevét, a mérték neve pedig szögletes zárójelek közé van zárva. Bizonyos környezetekben mindig szükség van egy teljes névre.
Nem minősített oszlopnév [Összeg] A nem minősített név csak az oszlop neve szögletes zárójelben. Azok a környezetek, ahol a nem minősített nevet használhatja, képleteket tartalmaznak egy számított oszlopban ugyanabban a táblában, vagy egy olyan összesítési függvényben, amely ugyanazon a táblán vizsgál.
Teljes oszlop a táblában szóközökkel "Canada Sales"[Qty] A táblanév szóközöket tartalmaz, ezért egyetlen idézőjelnek kell körülvennie.

Egyéb korlátozások

Az egyes függvényekhez szükséges szintaxis és a végrehajtható művelet típusa a függvénytől függően nagyban eltér. Általában azonban az alábbi szabályok vonatkoznak az összes képletre és kifejezésre:

  • A DAX-képletek és -kifejezések nem tudják módosítani vagy beszúrni az egyes értékeket a táblákba.

  • Számított sorok nem hozhatók létre DAX használatával. Csak számított oszlopokat és mértékeket hozhat létre.

  • Számított oszlopok definiálásakor a függvényeket bármilyen szintre beágyazhatja.

  • A DAX több függvényt is tartalmaz, amelyek egy táblát adnak vissza. A függvények által visszaadott értékeket általában más függvények bemeneteként használja, amelyekhez tábla bemenetként szükséges.

DAX-operátorok és állandók

Az alábbi táblázat a DAX által támogatott operátorokat sorolja fel. Az egyes operátorok szintaxisával kapcsolatos további információkért lásd a DAX-operátorokat.

Operátor típusa Szimbólum és használat
Zárójel operátor () az argumentumok sorrendje és csoportosítása
Aritmetikai operátorok + (kiegészítés)

- (kivonás/

jel)

* (szorzás)

/ (osztás)

^ (exponenciális)
Összehasonlító operátorok = (egyenlő)

> (nagyobb, mint)

< (kisebb, mint)

>= (nagyobb vagy egyenlő)

<= (kisebb vagy egyenlő)

<> (nem egyenlő)
Szövegösszefűző operátor > (összefűzés)
Logikai operátorok > (és)

|| (vagy)

Adattípusok

A DAX-képletekben használt oszlop vagy érték adattípusát nem kell leadnia, átalakítania vagy más módon megadnia. Ha DAX-képletben használ adatokat, a DAX automatikusan azonosítja a hivatkozott oszlopokban lévő adattípusokat és a beírt értékeket, és szükség esetén implicit konverziókat hajt végre a megadott művelet végrehajtásához.

Ha például számokat próbál hozzáadni egy dátumértékhez, a motor a függvény kontextusában értelmezi a műveletet, és a számokat egy közös adattípussá alakítja, majd az eredményt a kívánt formátumban, dátumként jeleníti meg.

A sikeresen konvertálható értékekre azonban bizonyos korlátozások vonatkoznak. Ha egy érték vagy oszlop adattípusa nem kompatibilis az aktuális művelettel, a DAX hibát ad vissza. Emellett a DAX nem biztosít olyan függvényeket, amelyek lehetővé teszik az adatmodellbe importált meglévő adatok adattípusának explicit módosítását, átalakítását vagy leadását.

Fontos

A DAX nem támogatja a variáns adattípus használatát. Ezért amikor adatokat tölt be vagy importál egy adatmodellbe, az egyes oszlopokban lévő adatok általában konzisztens adattípusúak.

Egyes függvények skaláris értékeket ad vissza, beleértve a sztringeket is, míg más függvények számokkal, egész számokkal és valós számokkal, illetve dátumokkal és időpontokkal működnek. Az egyes függvényekhez szükséges adattípust a DAX-függvények szakasz ismerteti.

Egy függvény argumentumaként több oszlopot és több adatsort tartalmazó táblákat is használhat. Egyes függvények olyan táblákat is visszaadnak, amelyek a memóriában vannak tárolva, és más függvények argumentumaként is használhatók.

Dátum és idő

A DAX a Microsoft SQL Server által használt datetime adattípussal tárolja a dátum- és időértékeket. A dátum/idő formátum egy lebegőpontos számot használ, ahol a Dátumértékek az 1899. december 30-a óta eltelt napok számát képviselő egész számrésznek felelnek meg. Az időértékek egy dátumérték tizedes törtrészének felelnek meg, ahol az órák, percek és másodpercek egy nap decimális törtrészei. A DAX dátum- és időfüggvények implicit módon konvertálják az argumentumokat datetime adattípussá.

Feljegyzés

A DAX által támogatott maximális DateTime-érték 9999. december 31. 00:00:00.

Dátum- és időkonstans

A Power BI Desktop 2021. augusztusi verziójától kezdődően a DAX dátum- és dátum/időértékek konstansként is megadhatóak a formátumban dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"vagy dt"YYYY-MM-DD hh:mm:ss". Ha konstansként van megadva, a kifejezésben nem szükséges a DATE, a TIME, a DATEVALUE és a TIMEVALUE függvény használata.

Az alábbi kifejezés például DÁTUM és IDŐ függvényeket használ az OrderDate szűréséhez:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

Ugyanez a szűrőkifejezés konstansként is megadható:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Feljegyzés

A DAX dátum- és dátum/idő típusú literális formátum nem támogatott az Excelben a Power BI Desktop, az Analysis Services és a Power Pivot összes verziójában. Az új és frissített DAX-funkciókat általában először a Power BI Desktopban vezetik be, majd később az Analysis Servicesben és a Power Pivotban is megtalálhatók az Excelben.