Problém dvojitej filtrovacej cesty v Power BI a PowerPivote

Pri vytváraní dátového modelu, či už v Power BI alebo excelovskom PowerPivote, narazíte občas na problém dvojitej filtrovacej cesty. Alebo skôr dilemu. Tabuľky, ktoré sú v databáze prepojené a fungujú, vám po naimportovaní do Power BI či PowerPivotu nejdú prepojiť. A ak aj náhodou áno, tak z času na čas dostanete divné výsledky. Ukážeme si, o čo ide, a ako z toho von.

Problém dvojitej filtrovacej cesty

Problém dvojitej filtrovacej cesty je v prvom rade spôsobený nesprávne vytvoreným dátovým modelom. Ako dôsledok toho, že čakáme, že to z databázy naimportujeme, prepojíme a reportujeme. Dátový model má však svoje vlastné požiadavky na funkčnosť a jednoznačnosť. Musíte ho navrhnúť správnym spôsobom. Preto vám nedovolí robiť všetko to, čo by ste chceli. Namiesto toho musíte upraviť štruktúru tabuliek na vhodnejšiu.

Majme takýto dátový model:

Problém dvojitej filtrovacej cesty v Power BI a PowerPivote

Každá z objednávok v tabuľke Objednávky sa odkazuje na pobočku, kde bola uskutočnená (tabuľka Pobočka) a na zákazníka, ktorému patrí (tabuľka Zákazník). Obe tieto tabuľky sú prepojené na tabuľku Lokalita – v prípade pobočky je takto zaznamenaná lokalita pobočky, a v prípade zákazníka lokalita zákazníka. Aby sme mohli oboje analyzovať podľa ich umiestnenia a vlastností umiestnenia. Smery šípok na prepojeniach sú zároveň smermi prúdenia filtrov medzi tabuľkami.

Teraz však narazíte na problém dvojitej filtrovacej cesty. V Power BI aj v PowerPivote. Ak sa pokúsite takto prepojiť tabuľky, tak s najväčšou pravdepodobnosťou sa stane toto:

  1. prepojíte ich nejakou kombináciou obojsmerných prepojení a/alebo prepojením many-to-many (veľa šťastia pri výsledkoch),
  2. neprepojíte ich vôbec, alebo jedno z tých prepojení bude neaktívne – také to “čiarkované”.

V čom je v skutočnosti problém

Problém je v tom, že v takomto dátovom modeli chcete vytvoriť duplicitnú filtrovaciu cestu. Excelovský PowerPivot vám to nedovolí, ale v Power BI a SSAS Tabulare 2019 a novšom je to už nejaký čas bohužiaľ možné. A zarobíte si tým na problémy do budúcnosti. O probléme interpretácie čísel nehovoriac.

Problém je v tom, že ak by sa vám aj to podarilo nejako prepojiť, tak z tabuľky Lokalita do tabuľky Objednávky vedú 2 filtrovacie cesty. A keď chceme filtrovať Objednávky podľa Lokality, tak ktoré z nich sa použije? Budú sa objednávky filtrovať podľa lokality zákazníka, alebo lokality pobočky? Ktoré z nich to asi tak bude?

Nejednoznačnosť a algoritmus výberu

Odpoveď prekvapí aj skúsených borcov – je to obchodné tajomstvo Microsoftu. Pôvodne to dátový model neumožňoval, ale zopár mesiacov po pridaní obojsmerných prepojení do Power BI, a neskôr aj do SSAS Tabularu a Azure Analysis Services, to už možné je. A ak existuje z tabuľky A do tabuľky B viacero ciest, tak sa musí použiť len jedna z nich. Ktorá, to vedia iba programátori a insideri z Microsoftu. Raz som čítal v jednom článku od Marca Russa, ktorý má prístup priamo k vývojovému tímu a zároveň je pod NDA, že výsledné prepojenie vyberá tajný algoritmus. Ktorý sa samozrejme v rámci aktualizácii môže meniť.

Algoritmus to vyberá na základe toho, ako by to človek asi vybral v bežnej situácii pri bežnej práci. A že ten algoritmus je tak komplexný, že ho ľudská myseľ nedokáže pochopiť. Ja som nepochopil ani to, čo tým autor myslel pod pojmom “bežná situácia”. Lebo takýto príklad, aký tu máme, je bežný, a každý užívateľ chce od toho niečo iné. A už vôbec potom nechápem, kto to naprogramoval, keď to ľudia nedokážu pochopiť. Asi zamestnávajú nejakých emzákov 🙂

Každopádne, problém dvojitej filtrovacej cesty je v skutočnosti problémom nejednoznačnosti. Môžeme sa síce hrať s neaktívnymi prepojeniami či s ich aktiváciou/deaktiváciou v DAX-e, ale v tomto prípade neriešime problém.

Riešenie pre problém dvojitej filtrovacej cesty

Riešením je zaviesť poriadok do chlieva, a dátový model zjednoznačniť. Napríklad duplikovaním spornej tabuľky, a zmenou prepojení tak, aby dátový model už bol 100%-ne jednoznačný. V tomto prípade zduplikovaním tabuľky Lokalita, premenovaním oboch kópií na “Lokalita pobočky” a “Lokalita obchodu”, a rozdelením pôvodného prepojenia na tieto dve tabuľky:

Riešenie pre problém dvojitej filtrovacej cesty v Power BI a PowerPivote

Takýto model už bude jednoznačný. Zároveň umožní každému užívateľovi jednoducho filtrovať podľa tej správnej lokality, a kombinovať dokopy oba typy lokalít. Nehovoriac o tom, že si takto vystačíte len so základnými prepojeniami, a nemusíte riešiť kopec záludností, ako pri obojsmerných prepojeniach či prepojeniach typu many-to-many.

Takto sa teda rieši problém dvojitej filtrovacej cesty v Power BI a PowerPivote. Potrebujete situáciu zjednoznačniť. Dovtedy sa len budete točiť v kruhu a zbytočne čarovať so vzorcami. Takto to vyriešite rýchlo a spoľahlivo 🙂