a DAX alapjai

2019-09-06    Excel 2019
A bővítmény képleteiben használandó operátor- és függvény-készletet, valamint a használatukat leíró szemantikai- és szintaktikai szabály-rendszert „Data Analysis Expressions”, röviden DAX-nak nevezzük. Az angol kifejezés jelentése „adatelemző kifejezések”.
A DAX képletnek is egyenlőségjellel (=) kell kezdődnie, de az előjel (-, +), mint képlet-jelző a bővítményben hibát eredményez!
A PowerPivot és a program aritmetikai (^, *, /, +, -), összehasonlító (<, <=, =, >=, >, <>) és szöveg-összefűző (&) operátorai azonosak, de a logikai műveletek deklarálása már eltérő.
DAX, logikai műveletek
Az IN operátorral csoportot deklarálhatunk, amelynek elemei logikai VAGY viszonyban állnak egymással. Az elemeket kapcsos zárójelek között, pontosvesszővel elválasztva kell felsorolni. A csoport tagjai azonos adattípusú konstansok vagy kifejezések. A szövegeket és a dátumokat idézőjelzni kell. Például: IN { ”Vác” ; ”Érd” ; ”Ózd” ; ”Fót” }. Az IN műveletet VAGY láncolásnak is nevezhetjük, mert a csoportot a VAGY operátorral is képezni tudjuk: ”Vác” || ”Érd” || ”Ózd” || ”Fót”. Az IN operátor általános alakja: <mezőnév vagy kifejezés> IN { elem1 ; elem2 ; elem3 … elemn }. A logikai művelet akkor ad IGAZ eredményt ha a csoport valamelyik eleme egyenlő az IN operátort másik oldalán álló adattal.
Az IN operátorral deklarált elemek tagadása a NOT <mezőnév vagy kifejezés> IN { elem1 ; elem2 ; elem3 … elemn } kifejezéssel történik. A kifejezés jelentése, az előző példánál maradva: a város nem Vác, nem Érd, nem Ózd és nem is Fót. Természetesen a logikai operátorok mellett a DAX-nak is vannak logikai függvényei.
DAX-képletben a százalék jel (%) nem használható.
A dátum-konstansokat, mint az Excelben, idézőjelek között kell beírnunk. A bővítmény képleteiben is használhatjuk a perjeles formátumot: évszám két számjeggyel, perjel, hónapszám vezető nulla nélkül, perjel, napszám vezető nulla nélkül (éé/h/n). A perjel helyett kötőjelet is alkalmazhatunk.
A képletben szereplő üres bejegyzések kezelése több ponton eltér a programban megszokottól.
DAX, üres bejegyzések és a nulla kezelése
A táblázatból leszűrhető legfontosabb következtetés: a DAX képlet kiértékelése „üres ered-mény”-re is vezethet. És ez nem csak üres bejegyzésű rekordok feldolgozásakor fordulhat elő! Másként fogalmazva: nem minden DAX képlet ad eredményt.
A műveletek végrehajtási sorrendje megegyezik a programban megszokottal, de a PowerPivot először az ÉS (&&) logikai műveletet hajtja végre és azután a VAGY-ot (||)!
A DAX képletben névvel azonosított objektumok a táblák, a mezők és az összesítések. Az objektum-nevek nem tartalmazhatnak vezető, illetve záró szóközt, vezérlő karaktereket és a DAX foglalt karaktereit.
a DAX foglalt karakterei
A táblaneveket aposztrófok között, a mezőneveket és az összesítések neveit szögletes zárójelek között kell a képletbe beírni. Ha a táblanév nem tartalmaz ékezetes karaktert és szóközt, akkor az aposztrófok elhagyhatók.
A mezőnevek állhatnak önállóan vagy a táblanévvel együtt: mezőnév], ’táblanév’[mezőnév]. Utóbbi forma használata, számos függvény esetében, előírás. A bővítmény ezt az azonosítót „minősített névként” emlegeti
A bővítmény név-követő szolgáltatása nem teljeskörű, ezért egy név módosítását követően ellenőrizni kell, hogy a PowerPivot elvégezte-e az objektum minden előfordulásában az átnevezést!
A bővítmény képleteiben csak teljes mezőkre hivatkozhatunk, adattartományokra nem, de a kifejezésekben szűrőkkel szabályozhatjuk a műveletek hatókörét.
Na és mi a helyzet a DAX függvényeivel, Tanító bácsi? Igazad van Pistike! Elmondom a legfontosabb tulajdonságaikat. A DAX függvény-nevek nincsenek magyarra fordítva! Tehát a SZUM az SUM, az ÁTLAG az AVERAGE, a HA az IF és így tovább.
Nincsenek „kötetlen” argumentum-számú függvények. Az Excelben a leggyakrabban használt statisztikai függvényekkel (összeg, átlag, számok darabszáma…) akár kétszázötvenöt cellát vagy tartományt is megvizsgálhatunk, a DAX-ban azonban csak egyetlen mezőt. Magyarul, a DAX SUM függvénye egy-argumentumos.
A DAX egyes függvényei gazda-szolga viszonyban állnak egymással. A szolga-függvény a képletben csak gazda-függvényének meghatározott argumentumában szerepelhet, önállóan vagy más függvényben nem.
A DAX függvény eredménye lehet egyetlen adat vagy egy virtuális tábla. Előbbit a bővítmény skaláris értéknek, utóbbit hol táblázatnak, hol táblának nevezi. A virtuális tábla a számítógép operatív tárjában tárolt adatszerkezet, amelyben az eredményként kapott adatok névvel azonosított „mezőkben” állnak és a logikailag összetartozó adatok „rekordokat” képeznek. Néhány függvény speciális virtuális táblát eredményez, amely csak egyetlen rekordot, illetve egyetlen mezőt tartalmaz.
A virtuális tábla az adatfeldolgozás egy részeredménye, mert a DAX képlet kiértékelése csak egyetlen adatot eredményezhet. Erre a tényre figyelmeztet a bővítmény az alábbi képen látható üzenetében.
DAX, hibaüzenet virtuális táblát adó eredmény esetén
Az első mondat hülyeség, a második értelmetlen! Magyarul: A képlet hibás, mert kiértékelése egyetlen adat helyett, virtuális táblát eredményezett! A táblázat és a tábla fogalmak a bővítmény kezelő felületének nyelvezetében szinonimák. A virtuális táblát eredményező függvények tehát a DAX specialitásai. Képletben csak egy másik függvénybe ágyazottan szerepelhetnek.
A DAX hat adattípussal dolgozik: szöveg, igaz/hamis, pénznem, egész szám, tizedes tört szám és dátumidő. Természetesen ezek a bővítmény adattípusai! A dátumidő típus a PowerPivot sajátossága: a tábla forrásában álló dátumok a nulla óra nulla perc nulla másodperc időponttal, míg az időértékek az ezernyolcszázkilencvenkilenc december harmincadikai dátummal kiegészítve jelennek meg a táblában.
a DAX dátum és időkezelése, példa
Tanító bácsi! Mi ez az ezernyolcszázkilencvenkilences dátum?! A bővítmény dátum- és időkezelése hasonló a programéhoz, Pistike! A dátumok sorszámként, az időpontok nulla és egy közé eső tört-számként vannak tárolva. A bővítmény azonban felismeri a történelmi dátumokat is, ezért a nullát (1899-12-31) és a negatív számokat is fel kell használnia az 1900-01-01 előtti dátumok tárolására. A legkorábbi beolvasható dátum az időszámításunk kezdete, tehát 0001-01-01, ami -693 593-nak felel meg.
A képlet kiértékelésekor az eltérő adattípusú operandusokat a bővítmény, ha lehetséges, azonos típusúra konvertálja. A következő táblázat a különböző típusú adatokkal végzet aritmetikai művelet eredményének típusát mutatja.
adattípus konverzió a képlet kiértékelésekor
A táblázat a különböző típusú adatokkal történő aritmetikai műveletek eredményének típusát mutatja. A műveleti jel bal oldalán a sor adattípusa, jobb oldalán az oszlop adattípusa áll. Tehát a táblázat első sora mutatja, milyen adattípusú eredményt kapunk, ha egészhez törtet adunk, ha egészhez pénzt adunk, ha egészhez dátumot adunk. A táblázat második sorában az áll, milyen eredményt kapunk ha egészből törtet, ha egészből pénzt, ha egészből dátumot vonunk ki…
A táblázat tehát minden lehetséges variációt kétszer tartalmaz. Ha az eredmény típusára a két elem felcserélése nincs hatással, akkor az adott páros második előfordulásában, az áttekinthetőséget javítva, az eredményt már nem tüntettem fel. A DAX a képletben álló szövegként megadott számokat egésznek vagy törtnek, a logikai értékeket egész számoknak tekinti.
A különböző adattípusú operandusok sikertelen homogenizálása hibaüzenetet generál.
DAX hibaüzenet, konvertálási hiba a képlet kiértékelésekor
A DAX-ot folyamatosan fejlesztik. Például az IN operátort a 2019-es verzióban vezették be, de a nyelv függvény-készlete is folyamatosan bővül. Erre a körülményre is fegyelemmel kell lennünk, ha nem a legfrissebb változattal dolgozunk!
margitfalvi.arpad@gmail.com