Ako vypnúť kaskádovitosť slicerov, v PowerPivote aj v Power BI

V staršom článku som písal o tom, ako rozchodiť kaskádovité slicery. Čiže ako zabezpečiť, aby výber v jednom sliceri odfiltroval voľby v druhom sliceri len na tie použiteľné, ak sú slicery vytvorené z dvoch rôznych číselníkov. Niekedy však potrebujete presný opak. Prečo by to vôbec niekto chcel, a ako to docieliť?

Predstavte si, že máte vytvorený report len z jednej tabuľky, v ktorej sú všetky údaje. Napríklad z takejto tabuľky objednávok:

Z nej si spravíme jednoduchý report, kde budeme mať v kontingenčke predaje podľa rokov, a okolo nej 2 slicery. Jeden z zo stĺpca Rok, a jeden zo stĺpca Mesto:

Teraz keď zakliknete v prvom sliceri rok 2018, tak vám to v druhom sliceri vyfiltruje iba tie mestá, pre ktoré boli nejaké predaje v roku 2018 – čiže v tomto prípade iba Bratislavu:

Po odfiltrovaní na rok 2019 to už dá Bratislavu aj Žilinu, pretože v tom roku už boli predaje v oboch mestách:

A podobne sa to správa aj keď vyberiete v sliceri s mestami jedno alebo druhé mesto – odfiltruje to slicer s rokmi len na tie roky, kedy existovali pre vybrané mesto nejaké predaje.

Takto by ste to očakávali, že to má fungovať. A väčšinou to takto aj vyhovuje. Čo však, keď nechcete, aby to takto fungovalo? A aby výber položiek v jednom sliceri neovplyvňoval výber v druhom sliceri, a aby filtroval iba kontingenčku? Čiže aby fungovalo filtrovanie kontingenčky, ale aby v sliceroch boli vždy na výber všetky položky?

PowerPivot takúto funkcionalitu nedokáže sám o sebe vypnúť, a ani tam na to nemáte žiadne nastavenia, ktorými by sa to dalo spraviť. Pretože ak sú slicery aj údaje z jednej tabuľky, tak kaskádovitosť (vzájomné filtrovanie) slicerov je automatická, a nedá sa vypnúť. To ale neznamená, že to nepôjde spraviť.

Ako náhradné riešenie využijeme princíp popisovaný v tom staršom článku o kaskádovitých sliceroch. A mierne upravíme náš dátový model aj report, a potom to už zafunguje.

Celý trik spočíva v tom, že budeme musieť upraviť dátový model tak, aby fungovalo filtrovanie údajov v objednávkach, ale aby sa neprenášalo to filtrovanie aj na ostatné slicery. A jediná možnosť, ako „vypnúť“ prúdenie filtrov v PowerPivote, je mať údaje vo viacerých tabuľkách, kde smer filtrovania údajov ide iba v tých smeroch, ktoré chceme.

Preto vytvoríme v dátovom modeli 2 nové tabuľky – či už cez Power Query, vypočítané tabuľky, jazyk SQL, či čo máte aktuálne k dispozícii a viete to použiť. Prvá tabuľka sa bude volať Roky, a bude obsahovať zoznam všetkých jedinečných rokov z objednávok. Napr. ako vypočítanú tabuľku či linkback tabuľku, pomocou tohto vzorca:

Roky = VALUES(Objednavky[Rok])

Druhá tabuľka sa bude volať Mestá, a analogicky bude obsahovať zoznam všetkých jedinečných miest z objednávok:

Potom prepojte tabuľku Roky zo stĺpca Rok, na tabuľku Objednávky na stĺpec Rok. Takisto prepojte tabuľku Mestá zo stĺpca Mesto, na tabuľku Objednávky a stĺpec Mesto:

Potom vymažte z reportu slicery, a vytvorte ich odznova, tentokrát z tých nových tabuliek. Čiže jeden slicer vytvorte z tabuľky Roky a stĺpca Rok, a druhý z tabuľky Mestá a stĺpca Mesto.

Na prvý pohľad to bude vyzerať identicky ako ten report, ktorý sme mali na začiatku. S tým rozdielom, že tentokrát už bude vypnutá kaskádovitosť slicerov. Čiže ak klikneme povedzme v tom prvom sliceri na rok 2018 alebo na ľubovoľný iný, tak druhý slicer nám tentokrát bude zobrazovať stále zoznam všetkých miest. A takisto to bude „nefungovať“ aj opačným smerom. Pritom filtrovanie čísel v kontingenčke samozrejme bude fungovať:

Ak by ste mali viacero slicerov, pre ktoré chcete vypnúť kaskádovitosť, tak tento postup zopakujte pre každý ďalší slicer.

Podstatou riešenia bolo to, že sme slicerové stĺpce odpratali do samostatných tabuliek, ktoré sme prepojili na pôvodné stĺpce v tej pôvodnej tabuľke. A zároveň sme ponechali smer prúdenia filtrov nad tabuľkami jednosmerný, čiže štandardný aký tam bežne je. Filtre potom prúdia len zo slicerových tabuliek na tabuľku Objednávky, ale už neprúdia ďalej na ostatné slicerové tabuľky – pretože z tabuľky Objednávky do ľubovoľnej slicerovej tabuľky už idete v protismere prúdenia filtrov, a teda filtre z Objednávok sa už nedostanú do slicerových tabuliek. Preto tie ostatné slicery zobrazujú vždy všetky možnosti, čo sme v tomto prípade chceli dosiahnuť.

Keby ste chceli mať kaskádovité slicery, tak ste v tomto prípade nemuseli nič spraviť. Alebo v prípade viactabuľkového dátového modelu si pozrite ten článok o kaskádovitých sliceroch, kde podstatou riešenia bolo zapnúť obojsmerné filtrovanie medzi tabuľkami v dátovom modeli. Ide to spraviť tak aj tak 🙂

Takže takto viete vypnúť kaskádovitosť slicerov v PowerPivote, Power BI, aj všetkých ostatných implementáciách PowerPivotu. Stačilo ako vždy len trochu kreatívne riešenie a využitie toho, ako to na pozadí funguje. A na prvý pohľad nepodporovaná funkcionalita ide spraviť za pár minút 🙂