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 2021. május 26.-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 2021. május 27-28.-i Power Pivot videókurzusra!  Részletek >>

 

Új hozzászólás