Kétirányú szűrések Power BI-ban

A Power BI Desktopban és a 2016-os Analysis Services-ben jelent meg a táblák keresztszűrések lehetősége. Korábbi SSAS verziókban - és az Excelben a mai napig is - csak arra van lehetőségünk hogy egyirányba szűrjünk. A dimenzió táblából meg tudjuk szűrni a ténytáblákat de fordítva nem. Vagy másképpen fogalmazva az 1:n-es kapcsolatok 1-es oldala felől tudjuk szűrni a n-es oldalt fordítva nem.

Ez a korlát szűnt meg az SSAS 2016-ban és a Power BI desktopban és vált lehetővé a kétirányú szűrés (bidirectional cross-filtering), azaz megnyílt a lehetősége annak, hogy a ténytáblákból is szűrjük a dimenzió táblákat vagy másképpen fogalmazva az 1:n-es kapcsolatok n-es oldala felől tudjuk szűrni a 1-es oldalt.

Ez az újdonság alapértelmezett is lett a Power BI Desktopban magával hozva ennek minden előnyét és hátrányát. A kétségtelen előnyök között szerepel, hogy könnyen meg tudjuk vele oldani az n:m-es táblakapcsolatok problémáit (many to many relationships, bridge table Kimball irodalmában), illetve az is hogy a kezdő felhasználóknak így természetes a működése: minden szűr mindent… De itt ki is fújtak az előnyök...

A kétirányú kapcsolatok már egyszerű modelleknél félreértéseket okozhatnak. Adott például a következő faék egyszerűségű értékesítési adatmodell

Ebből a modellből előállítunk egy lekérdezést, amely régiónként mutatja a népességet és a forint forgalmat (Népesség a régió táblából, forgalom a forgalmi adatok táblából jön):

Majd szűrünk egy termékre, és megváltozik Dunántúl népessége:

Mi történt? Egy termékszűréstől hogy változhat meg Dunántúl népessége? Úgy hogy a termék megszűrte a forgalmi adatok táblát azokra a sorokra, ahol volt értékesítés az adott termékből. Ez eddig OK. Csakhogy a termékből nem minden megyében értékesítettek. A forgalmi adatok tábla szűrve lett azokra a megyékre, ahol volt értékesítés és a szűrést megörökölte a Régió tábla is és a benne számolt népesség számított mező csak a szűrt megyékre számolta ki a népesség összegét…

Hogyan lehet elkerülni a problémát?

Egyirányúvá kell tenni a régió tábla és a forgalmi adatok tábla közti kapcsolatot:

És a modellünk jól fog számolni:

Összefoglalva: Nagyon örülünk a kétirányú kapcsolatoknak, de annak, hogy alapértelmezetté tették a Power BI Desktopban már kevésbe. Ahelyett ugyanis, hogy a felhasználókat rákényszerítené a helyes adatmodell elkészítésére ad egy kerülőutat, ami technikai oldalról nézve mindig működik, de nem mindig hozza a várt eredményt.

Mi a megoldás?

  • Használjunk mindig egyirányú kapcsolatot addig amíg meg nem értjük hogyan működnek a szűrések a kapcsolatok mentén
  • A kapocslatok többes oldalán található oszlopot rejtsük el a felhasználók elöl,
  • és használjuk a CROSSFILTER() és USERRELATIONSHIP() függvényeket azoknál a mutatószámoknál, ahol szeretnénk élvezni a keresztszűrés előnyeit.

Ráadásul ez a módszer működik Power Pivotban is :-)

Hasznos irodalom: Bidirectional cross-filtering in SQL Server Analysis Services 2016 and Power BI Desktop

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 >>

 

Új hozzászólás