Synchronizace průřezů v Power BI reportech

Power BI model

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:

Prodeje = SUM(Sales[Sales Amount])

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.

Synchronizace průřezů v Power BI reportech

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

Synchronizace průřezů v Power BI reportech 2

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

Synchronizace průřezů v Power BI reportech 3

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

Synchronizace průřezů v Power BI reportech 4

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.

Synchronizace průřezů v Power BI reportech 5

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:

Synchronizace průřezů = COUNTROWS(Sales)

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

Synchronizace průřezů v Power BI reportech 6

Následně v rozevíracím seznamu nazvaném "Zobrazit položky, pokud hodnota" vybereme možnost "není prázdné".

Synchronizace průřezů v Power BI reportech 7

Nyní stačí potvrdit změny kliknutím na tlačítko "Použít filtr".

Synchronizace průřezů v Power BI reportech 8

Pokud stejný postup zopakujeme také pro druhý Průřez, oba vizuály budou obsahovat pouze platné kombinace hodnot.

Synchronizace průřezů v Power BI reportech 9

Na obrázku výše můžeme vidět, že v prvním Průřezu je vybrán opět obchodík s názvem "A Bike Store". Ve druhém Průřezu se ale již nezobrazují všechny modely, ale pouze modely, pro které vrací pomocné měřítko [Synchronizace průřezů] hodnotu. Jinak řečeno, v Průřezu s modely budeme vidět pouze ty modely, které se prodávají ve vybraném obchodě v prvním Průřezu.

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

Synchronizace průřezů v Power BI reportech 10

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.

č. 25

Komentáře