Kulcssértések kezelése Power BI-ban
Tegyük fel, hogy van egy népesség (tény) táblám, amely megyénként mutatja, hogy mennyi az adott megye népessége egy adott időpontban. Ehhez a táblához kapcsolódik egy régió (dimenzió) tábla, amely országrész-régió-megye bontásban tartalmazza a megyéket.
Most tegyük fel, hogy a népesség táblában még Csongrád-ként szerepel Csongrád-Csanád megye, de a régió táblában már az új (Csongrád-Csanád) néven.
Hogy kezeli le e Power BI / Power Pivot a névváltoztatást?
Mutatom:
Mivel a népesség táblában Csongrád-Csanád szerepel, a régiótáblában Csongrád, ezért a két érték nem találkozik, így a Power Pivot / Power BI egy üres elemen mutatja Csongrád népességét.
És ez jó is így. A totál népesség így stimmel, az ország népessége így helyes értéket mutat, és Csongrád-Csanád 404 ezres népessége megjelenik egy üres megyén.
A háttérben az történik, hogy a Power Pivot / Power BI adatbázis kezelője (VertiPaq) létrehoz egy alapértelmezett ismeretlen elemet (üres megnevezéssel) a régió táblában, és minden olyan elemet ehhez az elemhez fog kötni, amelynek nem talál párt a népesség táblában. Pont úgy, ahogy az adattárházasok -1-es kulcsokat tesznek a dimenziótáblákba. A szisztéma ugyanaz, csak a problémát a Power BI automatikusan megoldja, nem a fejlesztőre van bízva, hogy lekezeli-e a hiányzó dimenzióelemek kulcssértését.
Csakhogy. Azt már kevesebben tudják, hogy ezt az alapértelmezett hiányzó (üres) elemet eltérően kezelik a DAX függvények. Vannak olyan függvények, amelyek figyelembe veszik, és vannak amelyek nem...
DISTINCT() vs VALUES()
Tegyük fel, hogy meg kell számolnunk a régió táblában a megyéket. Ezt megszámolhatjuk kétféleképpen is:
- Distinct(Megye) = COUNTROWS(DISTINCT('Régió'[Megye]))
- Values(Megye) = COUNTROWS(VALUES('Régió'[Megye]))
A DISTINCT() nem veszi figyelembe az alapértelemezett ismeretlen elemet, de a VALUES() igen. Mutatom:
Hiányzó dimenzióelemek kezelése DAX-ban
Micsoda? Hogy lehet Magyarországnak 21 megyéje, amikor csak 19 megyéje + 1 Budapestje van? Úgy hogy a VALUES() függvény számol az alapértelmezett ismeretlen elemmel, de a DISTINCT(), DISTINCTCOUNT() nem…
ALL() vs ALLNOBLANKROW()
Hasonló a helyzet az ALL(), ALLNOBLANKROW() függvényekkel. Az ALL visszadja az alapértelmezett üres elemet, az ALLNOBLANKROW() nem...
Összefoglalva: Attól, mert a Power BI / Power Pivot VertiPaq adatbáziskezelője kiküszöböli a kulcssértésből származó adatvesztést és kulcssértés esetén beszúr a dimenzió táblákba egy alapértelmezett (üres) dimenzióelemet, még nem old meg minden problémát. Ésszel kell használni a DAX fügvényeket, mert valamelyik számol az alapértelmezett hiányzó dimenzióelemmel (ALL, VALUES), valamelyik nem (DISTINCT, ALLNOBLANKROWS)
Kővári Attila - BI projekt
POWER BI WORKSHOP
Tudjon meg többet az itt elhangzottakról! Jöjjön el a 2025. február 27.-i Power BI workshopra vagy rendeljen kihelyezett képzést! Részletek >>
Önkiszolgáló BI WORKSHOP
Tudjon meg többet az itt elhangzottakról! Jelentkezzen a 2025. február 20-21.-i Excel Power Pivot videókurzusra! Részletek >>
Új hozzászólás