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 egyet­len, sorszámokat tartalmazó mezővel oldjuk meg. Ez a mező a tábla kulcs-mezője, amelynek neve hagyományosan, <tábla­név egyes szám­ban> 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-me­ző 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áb­lában lét­re­ho­zunk 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” kul­csát he­lyez­zük el. Pontosabban: a felettes rekordjának kulcsát. Néz­zünk egy példát! Egy vállalt dolgozóinak függőségi struktúrája há­rom­szin­tes.
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 mun­ka­tá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-me­ző­nek (kolléga AZ). A kapcsolatot a kulcs- és az ide­gen 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ő áb­rán be­mu­ta­tott, 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 e­gyen­lő 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 dol­goz­hat­juk 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ár­nunk, 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 ka­rak­ter­rel (|) 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 ál­la­pí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 tar­talmazó 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 szin­ten ál­ló, 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 dek­la­rál­nunk. Ez lehet a PATH függvény, vagy a hatalmi útvonalat tartalmazó mező neve. A második argumentummal a lekér­dezni kívánt elem sor­szá­mát kell megadnunk, konstansként vagy egy kifejezés eredményeként. A sorszámozás egyessel, a legfel­ső szinttől kez­dő­dik vagy más­ként fo­galmazva a függőségi sorban balról jobbra halad. A függvény harmadik, nem kötelező argu­mentumával az eredmény adattípusát ál­lít­hat­juk 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éple­te, sorrendben: PATH­ITEM( [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! - gon­dol­juk 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 sor­szám, ha­nem az e­gyes kollégák hatalmi pozícióját jelző karakterlánc. Tehát a feldolgozandó mező eleve szöveg adattípusú, ame­lyet szám­má alakítani kép­te­len­sé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 e­red­mény a­dat­tí­pu­sá­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 PATHITEMREVER­SE a szá­mo­zá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 sor­ban jobb­ró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 nagy­betű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: PATH­CON­TAINS( 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 e­red­mény­te­len, 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 ke­res­tem: PATH­CON­TAINS( [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őbejegy­zé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 to­váb­bi 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 me­ző­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 tar­tal­maz­za 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 hierar­chia kimu­tatásos e­lem­zé­sét a hierarchia-kezelés a pivot táblában című cikkben mutatom be.
ismertető letöltése pdf-ben munkafüzet letöltése
margitfalvi.arpad@gmail.com