V Power BI můžeme mít v jednom reportu několik průřezů, tabulek, grafů a dalších vizuálů. Pokud pro filtrování používáme průřezy, které obsahují hodnoty z různých tabulek, mezi kterými současně neexistuje přímá relace, může se filtrování pomocí průřezů stát pro uživatele nepřehledným. Uživatel v takovém případě může vybrat neplatnou kombinaci filtrů, které se navzájem vylučují a vrací hodnotu BLANK.
K tomuto tématu je k dispozici také video:
V tomto příspěvku si ukážeme, jak pomocí filtrů vizuálů synchronizovat průřezy, tak aby se v nich zobrazovali pouze platné kombinace hodnot.
Synchronizace průřezů v reportu
V ukázce budeme pracovat se cvičným Power BI souborem Adventure Works DW 2020.pbix, který je volně dostupný ke stažení na internetu. Soubor s řešením můžete najít pod tímto příspěvkem.
V použitém Power BI souboru je navíc vytvořeno měřítko [Prodeje], které má následující definici.
Měřítko:
V příkladech budeme pro zjednodušení pracovat pouze se čtyřmi tabulkami, tabulkou 'Product', 'Sales', 'Reseller' a 'Date'. Jak už názvy tabulek napovídají, v tabulce 'Product' jsou uloženy informace o jednotlivých produktech, v tabulce 'Sales' jsou záznamy o prodejích, v tabulce 'Reseller' jsou uloženy informace o prodejcích a tabulka 'Date' je kalendářní tabulka.
Tabulky 'Product', 'Reseller' a 'Date' jsou dimenzní tabulky které filtrují faktovou tabulku 'Sales'. Tyto filtry jsou propagovány pomocí relací, které jsou jednosměrné, vždy ve směru od dimenzní tabulky k tabulce faktové. Jedná se tedy o klasické hvězdicové schéma, které je považováno za dobrou praxi při tvorbě Tabulárního modelu v Power BI.
Na základě dat v modelu můžeme vytvořit například následující jednoduchý report. V Průřezu na levé straně jsou názvy prodejců z tabulky 'Reseller'. V Průřezu uprostřed jsou modelové řady produktů z tabulky 'Product'. Na pravé straně je pak vizuál Tabulka, ve které jsou roky z kalendářní tabulky a měřítko [Prodeje].
V Průřezu umístěném vlevo jsou hodnoty ze sloupce 'Reseller'[Reseller] z tabulky 'Reseller'. V Průřezu umístěném uprostřed jsou hodnoty z jiné tabulky, tabulky 'Product', konkrétně ze sloupce 'Product'[Model]. Pokud v Průřezu s jednotlivými obchodníky vybereme jeden konkrétní obchod, ve vizuálu Tabulka budeme přirozeně vidět prodeje v letech pouze v tomto konkrétním obchodě.
Toto chování je očekávané, protože tabulka 'Reseller' má vytvořenou relaci s tabulkou 'Sales', a filtry aplikované na sloupce z tabulky 'Reseller' filtrují tabulku 'Sales'. Pokud ale vybereme ve druhém Průřezu kterýkoliv model, který se neprodával ve vybraném obchodě "A Bike Store", vizuál Tabulka bude prázdný.
Problémem takto vytvořeného reportu je, že v obou Průřezech se zobrazují všechny hodnoty z použitých sloupců. Důvodem je že filtry nastavené na sloupce z tabulky 'Reseller' filtrují tabulku 'Sales' s prodeji, ale nefiltrují tabulku 'Product' s jednotlivými modely. Stejně tak filtry nastavené na sloupce z tabulky 'Product' filtrují tabulku 'Sales', ale tyto filtry opět nefiltrují tabulku 'Reseller'.
Takto vytvořený report není příliš pohodlný pro uživatele, protože ten obvykle očekává že po nastavení filtrů v jednom Průřezu uvidí v dalších Průřezech pouze hodnoty, které jsou v souladu s jeho prvním výběrem. Jinak řečeno, pokud uživatel v našem příkladu vybere konkrétního prodejce, tedy konkrétní obchod v prvním Průřezu, očekává obvykle že v Průřezu s modely uvidí pouze modely, které jsou prodávány přes tento vybraný obchod.
Autoři reportů často v těchto situacích nastavují obousměrné filtrování mezi tabulkami tak, aby se filtry dostaly z jedné dimenzní tabulku do druhé dimenzní tabulky.
Nastavení obousměrného filtrování mezi tabulkami je ale pokročilá technika s mnoha vedlejšími efekty na model a také na některé typy výpočtů. Proto bychom neměli toto nastavení používat lehkovážně a určitě ne pouze za účelem synchronizace Průřezů.
Nastavení obousměrného filtrování mezi tabulkami může v některých modelech výrazně zpomalit určité typy výpočtů, může zapříčinit změnu chování dříve vytvořených výpočtů nebo může zapříčinit takzvanou nejednoznačnost modelu, kdy mohou být filtry mezi tabulkami propagovány více různými cestami a výsledné hodnoty měřítek mohou být v takovémto modelu těžko interpretovatelné, nebo dokonce přímo špatné.
Výše uvedené neznamená že bychom nikdy neměli používat obousměrné filtrování mezi tabulkami. Před použitím obousměrného filtrování bychom si ale měli uvědomit, že se jedná o pokročilou techniku a proto bychom měli používat tento typ relací pouze v nezbytně nutných situacích. Synchronizace Průřezů mezi tyto situace určitě nepatří, a proto bychom nikdy neměli používat obousměrné filtrování pouze z důvodu synchronizace Průřezů.
V následující části příspěvku si ukážeme daleko bezpečnější způsob synchronizace Průřezů, a to pomocí filtrů na úrovni vizuálů.
Filtr na úrovni vizuálu a synchronizace průřezů
Již od roku 2019 je v Power BI k dispozici relativně málo využívaná, ale v mnoha situacích velmi užitečná funkcionalita, a to funkcionalita nazvaná Filtr na úrovni vizuálů.
Ve filtrech vizuálů můžeme používat také měřítka, což nás přivádí k samotnému řešení synchronizace Průřezů v reportu.
Pokud chceme synchronizovat Průřezy, kde použité sloupce pocházejí z různých dimenzních tabulek a tyto dimenzní tabulky filtrují jednu faktovou tabulku, stačí nám zjistit, zda vybrané kombinace filtrů v Průřezech vrací nějaké hodnoty ve faktové tabulce.
To můžeme zjistit více různými způsoby. Jedním z nejjednodušších způsobů je jednoduše spočítat počet řádků ve faktové tabulce v aktuálním kontextu vyhodnocení. Pokud bude měřítko vracející počet řádků ve faktové tabulce vracet pro vybrané hodnoty v Průřezech nějakou hodnotu, víme že daná kombinace filtrů nastavených v Průřezech obsahuje záznamy ve faktové tabulce, a tyto položky tedy budeme v Průřezech zobrazovat. Ostatní kombinace jsou neplatné a nebudeme je zobrazovat.
Pomocné měřítko pro filtry Průřezů tak může vypadat například následovně.
Měřítko:
Nyní stačí označit Průřez pro který chceme nastavit filtr, a do postranního panelu Filtrů vložit nové pomocné měřítko. Začít můžeme Průřezem s jednotlivými prodejci, tedy s Průřezem, který obsahuje hodnoty ze sloupce 'Reseller'[Reseller].
To samé bude platit také obráceně, pokud vybereme pouze některý z modelů, v Průřezu s obchody uvidíme pouze ty obchody, které tyto modely prodávají.
Takto vytvořený report je pro uživatele přehlednější a nemůže se stát, že by uživatel vybral v průřezech neplatnou kombinaci filtrů.Další příklady můžete najít na stránce DAX příklady nebo na stránce Power BI.
Komentáře
Okomentovat