Megosztás a következőn keresztül:


DAX szintaxis

Ez a cikk a képletkifejezés nyelvének szintaxisát és követelményeit DAX 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 közé tartoznak 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ár helyett egy táblát ad vissza, és egy olyan függvénybe kell burkolni, amely kiértékeli a táblát, és skaláris értéket ad vissza. Ha a táblázat egyetlen oszlopból, egysoros táblázatból áll, akkor a rendszer skaláris értékként kezeli.

    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. Néhány függvény, például a PI, nem igényel argumentumokat, de a zárójelek mindig jelzik a null argumentumot. Például mindig be kell gépelnie PI(), nem PI. 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
= "Sales" É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 *[Amount])

=0.03 * [Amount]
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 kis- és nagybetűket nem érzékenyítő; a SALES és a Sales nevek például 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 az oszlop nevének megfelelőnek kell lennie. Az oszlop teljes neve a tábla neve, majd az oszlop neve szögletes zárójelben: például:"U.S. Sales"[Products]. A teljes név mindig kötelező, amikor az alábbi körülmények között hivatkozik egy oszlopra:

  • A függvény argumentumaként VALUES

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

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

  • A függvény argumentumaként RELATEDTABLE

  • Bármely időintelligencia-függvényekhez argumentumként

A nem specifikált oszlopnév csupán annyit jelent, hogy az oszlop nevét szögletes zárójelek közé zárják, 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.

Jegyzet

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ázatok

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

Intézkedések

  • 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 az Ön által használt tábla neve megegyezik az Analysis Services szolgáltatás fenntartott kulcsszavával, hiba lép fel, é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.

Jegyzet

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 DAX nem tudja felismerni a szimbólumokat idézőjelként, érvénytelenné téve a hivatkozást.

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 "Kanada értékesítés" 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.
Teljesen kvalifikált 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ékazonosító név Értékesítés[Nyereség] 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 teljesen kvalifikált névre.
Nem minősített oszlopnév [Összeg] A minősítés nélküli név csak az oszlop neve, szögletes zárójelben. Azon környezetek között, ahol a nem minősített nevet használhatja, szerepelnek olyan számított oszlopok, amelyek ugyanabban a táblában találhatók, valamint olyan összesítési függvények, amelyek ugyanazon táblán végeznek műveletet.
Teljesen kijelölt oszlop a szóközökkel rendelkező táblában „Kanadai értékesítés”[Db] A táblanév szóközöket tartalmaz, ezért egyes idézőjelek közé kell tenni.

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:

  • DAX a képletek és kifejezések nem módosíthatják és nem szúrhatnak be egyéni értékeket a táblákba.

  • Számított sorok nem hozhatók létre DAXhaszná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.

  • DAX több függvényt is tartalmaz, amelyek 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áról további információt az DAX operátorokcímű témakörben talál.

Operátor típusa Szimbólum és használat
zárójelkezelő () elsőbbségi sorrend és az argumentumok csoportosítása
Számtani operátorok + (hozzáadás)

- (kivonás)

* (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ési operátor & (összefűzés)
Logikai operátorok && (és)

|| (vagy)

adattípusok

Nem szükséges megadnia vagy átalakítania az oszlop vagy érték adattípusát, amelyet a DAX képletben használ. Amikor adatokat használ egy DAX képletben, DAX automatikusan azonosítja a hivatkozott oszlopok adattípusait és a beírt értékeket, és implicit konverziókat hajt végre, ha szükséges 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, DAX hibát ad vissza. Továbbá 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, konvertálását vagy átalakítását.

Fontos

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 szakasz ismerteti, DAX függvények.

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ő

DAX a Microsoft SQL Server által használt datetime adattípus használatával 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. DAX A dátum- és időfüggvények implicit módon konvertálják az argumentumokat datetime adattípussá.

Jegyzet

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

Dátum- és időkonstans

A Power BI Desktop DAX 2021. augusztusi verziójától kezdve a 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, TIME, DATEVALUETIMEVALUE függvény használata.

A következő kifejezés például az OrderDate-ra való szűrést és TIME függvényeket használjaDATE:

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

Jegyzet

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.