hierarchia-kezelés a DAX-ban

2018-02-17    Excel 2016
Az adatbázis-kezelés alapkövetelménye a rekordok egyértelmű azonosíthatósága. A modern számítástechnikában ezt általában egyetlen, sorszámokat tartalmazó mezővel oldjuk meg. Ez a mező a tábla kulcs-mezője, amelynek neve hagyományosan, <táblanév egyes számban> AZ. Például a kollégák tábla kulcs-mezőjének neve kolléga AZ. Az „AZ” karakterlánc az azonosító szó rövidítése. A kulcs-mező egy kiválasztott bejegyzése az őt tartalmazó rekord kulcsa.
A rekordok kulcsát hierarchia, más kifejezéssel hatalmi struktúra, tárolására is felhasználhatjuk. Ez úgy lehetséges, hogy a táblában létrehozunk egy mezőt a függőség tulajdonság számára, és ebbe a mezőbe mindig az adott rekord közvetlen „felettesének” kulcsát helyezzük el. Pontosabban: a felettes rekordjának kulcsát. Nézzünk egy példát! Egy vállalt dolgozóinak függőségi struktúrája háromszintes.
DAX hierarchia-kezelés, hatalmi struktúra
A kép négyszögei a vállalat dolgozóit szimbolizálják. A munkatársakat egy betűből és egy számból álló azonosítóval különböztetjük meg. Az azonosító betűje a hierarchia szintjét, száma a munkatárs sorszámát mutatja az adott hatalmi szinten.
A munka a mentorok irányításával folyik. A mentor az a kolléga, aki a struktúrában közvetlenül a munkatárs felette áll. Tehát a C4-es és a C5-ös kolléga munkáját B5 felügyeli, őt és B4-t A2 irányítja. A munkák jóváírása elszámolási-egységek alapján történik.
A vállalati adatbázis két táblából áll (kollégák, munkák), mindkettő saját kulcs-mezővel (kolléga AZ, munka AZ) rendelkezik. Egy munkatárs több munkán dolgozik, tehát a kollégák tábla, a kapcsolat egy oldali táblája. Tehát a munkák táblában kell állnia az idegen kulcs-mezőnek (kolléga AZ). A kapcsolatot a kulcs- és az idegen kulcs-mezőkkel hoztam létre.
DAX hierarchia-kezelés, példa
A kollégák megkülönböztetésére (kolléga AZ) nem a megszokott sorszámokat, hanem a hatalmi struktúrát is tükröző, az első ábrán bemutatott, azonosítókat használtam.
A kollégák tábla mentor AZ mezője az adott munkatárs irányítójának kolléga AZ-ját tartalmazza. Másként fogalmazva a mentor AZ egyenlő az irányító munkatárs rekordjának kulcsával. A rekordok kulcsával tárolt struktúrát a DAX hierarchia-kezelő függvényeivel dolgozhatjuk fel.
DAX hierarchia-kezelés, a mentor kulcsával tárolt hatalmi struktúra
A hatalmi struktúra egy elemének függőségi helyzetét azzal az „útvonallal” írhatjuk le, amelyet a hierarchia csúcsáról indulva, be kell járnunk, hogy a vizsgált elemig eljussunk. Az útvonal nem más, mint a struktúra érintett elemeinek felsorolása a vizsgált elemmel bezárólag. Ezt a felsorolást „függőségi sor”-nak nevezem.
A hierarchia egy elemének függőségi sorát a kétargumentumos PATH függvénnyel képezzük. Argumentumai sorrendben a kulcs- és a felettes elem kulcsát tároló mező neve, azaz PATH( [kolléga AZ] ; [mentor AZ] ). A függőségi sor elemeit a DAX függőleges vonás karakterrel (|) választja el.
DAX hierarchia-kezelés, PATH függvény
A függőségi sor eleminek számát, másként fogalmazva, a vizsgált elem hatalmi szintjének sorszámát a PATHLENGTH függvénnyel állapíthatjuk meg. A függvény egyetlen argumentuma a függőségi sor deklarációja. Tehát a PATH függvény vagy a függőségi sort tartalmazó mező neve. A mi esetünkben: PATHLENGTH( [FÜGGŐSÉG] ).
DAX hierarchia-kezelés, PATHLENGTH függvény
A DAX nem csak a teljes függőségi sor képzésére képes, de lehetőséget biztosít a függőségi sor egy, meghatározott hatalmi szinten álló, elemének képzésére is. Ezt a funkciót a PATHITEM függvény látja el. A függvény első argumentumával a függőségi sort kell deklarálnunk. Ez lehet a PATH függvény, vagy a hatalmi útvonalat tartalmazó mező neve. A második argumentummal a lekérdezni kívánt elem sorszámát kell megadnunk, konstansként vagy egy kifejezés eredményeként. A sorszámozás egyessel, a legfelső szinttől kezdődik vagy másként fogalmazva a függőségi sorban balról jobbra halad. A függvény harmadik, nem kötelező argumentumával az eredmény adattípusát állíthatjuk be: ha értéke nulla (0) vagy nem adjuk meg, akkor szöveg adattípusú eredményt kapunk, ha értéke egy (1), akkor az eredmény egész szám adattípusú lesz. A kollégák tábla SZINT számított mezőinek képlete, sorrendben: PATHITEM( [FÜGGŐSÉG] ; 1 ), PATHITEM( [FÜGGŐSÉG] ; 2 ), PATHITEM( [FÜGGŐSÉG] ; 3 ).
DAX hierarchia-kezelés, PATHITEM függvény
A PATHITEM függvény harmadik, elhagyható argumentuma további magyarázatra szorul. Ez az argumentum teljesen felesleges! - gondoljuk első ránézésre. Igen, a mi esetünkben az, mert a tábla kulcs mezője (kolléga AZ), a szokásostól eltérően, nem sorszám, hanem az egyes kollégák hatalmi pozícióját jelző karakterlánc. Tehát a feldolgozandó mező eleve szöveg adattípusú, amelyet számmá alakítani képtelenség. Ha azonban a szokásos sorszámozó mezőt alkalmazzuk a rekordok azonosítására, akkor már felmerültet az igény az eredmény adattípusának módosítására. Például szöveg adattípusú, de sorszámokat tartalmazó kulcs-mező esetén (001, 002, 003).
A PATHITEMREVERSE függvény funkciója és szintaktikája azonos a PATHITEM függvényével: PATHITEMREVERSE( függőségi sor ; a képzendő elem sorszáma ). Az egyetlen különbséget az útvonal elemeinek sorszámozásában találjuk. A PATHITEMREVERSE a számozást a vizsgált elem hatalmi szintjétől kezdi és a hierarchia magasabb szintjei felé tart, vagy másként fogalmazva a függőségi sorban jobbról balra halad.
A kétargumentumos PATHCONTAINS függvény az első argumentumával meghatározott függőségi sorban keresi, a kis- és nagybetűk megkülönböztetése nélkül, a függvény második argumentumával deklarált kulcs-mező bejegyzést. A deklarációk módja: PATHCONTAINS( kifejezés/mezőnév ; kifejezés/mezőnév/konstans ). A szöveg-konstans idézőjelek között áll. Eredményes keresés IGAZ (TRUE), az eredménytelen, HAMIS (FALSE) eredményre vezet. Példánkban a B2 TART számított mezővel a B2-es munkatárs előfordulását kerestem: PATHCONTAINS( [FÜGGŐSÉG] ; "b2" ).
DAX hierarchia-kezelés, PATHCONTAINS függvény
Természetesen az életben nem a kollégák azonosítójával, hanem a nevükkel dolgozunk. Meghatározott rekord egy mezőbejegyzését a LOOKUPVALUE függvénnyel képezhetjük. A függvény első argumentuma a keresett bejegyzést tartalmazó mező neve. A függvény további argumentumai párban állnak és a rekord azonosítására szolgálnak: mezőnév deklaráció - bejegyzés deklaráció. A MENTOR számított mezőben a közvetlen irányító nevét íratattam ki: LOOKUPVALUE( [név] ; [kolléga AZ] ; [mentor AZ] ).
DAX hierarchia-kezelés, LOOKUPVALUE függvény
[így készült] A mintafeladatot a bővítmény 2016-os verziójában állítottam össze. A kollégák tábla adatnézete természetesen tartalmazza a mezők szűrőgombjait is, de én az áttekinthetőség javítása érdekében, lephotoshopoztam őket a képekről. A hierarchia kimutatásos elemzését a hierarchia-kezelés a pivot táblában című cikkben mutatom be.
margitfalvi.arpad@gmail.com