V této ukázce je popsán postup, jak změnit formát zobrazených hodnot podle aktuální úrovně v hierarchii, ve které je měřítko vyhodnoceno. Jedná se pouze o jeden z více způsobů, jak dosáhnout podobného výsledku. Ukázka je vytvořena v Power BI souboru Adventure Works DW 2020.pbix, který je volně dostupný ke stažení na internetu. Soubor s řešením je dostupný ke stažení níže pod tímto příspěvkem.
Poznámka (4. 11. 2024): Postup popsaný v tomto příspěvku lze považovat za zastaralý. V současné době je v Power BI k dispozici Dynamický formát měřítka, pomocí kterého můžeme dosáhnout stejného efektu bez vedlejších negativních jevů, které souvisí s převodem hodnoty měřítka na text pomocí funkce FORMAT(). Pokud je totiž výsledkem měřítka text, nemůžeme toto měřítko používat například v grafech nebo jiných vizuálech kde jsou jednotlivé body vykresleny právně na základě hodnoty měřítka. S použitím Dynamického formátu tento problém odpadá. Příklad práce s Dynamickým formátem měřítka v Power BI je popsán v posledním odstavci článku věnovaném funkci SWITCH().
Zobrazení hodnot v různých formátech podle úrovně v hierarchii
Měřítko:
Výchozí report, ve kterém budeme tvořit celý výpočet, může vypadat následovně.
Cílem příkladu je zobrazit hodnoty prodejů v různých jednotkách podle aktuální úrovně v hierarchii. Pokud budeme sumu prodejů zobrazovat na úrovni let, hodnota prodejů bude zobrazena v mil. Kč. Na úrovni měsíců bude hodnota prodejů zobrazena v tis. Kč a na úrovni dnů v Kč. Prvním krokem proto bude zjistit, v jaké úrovni hierarchie se při výpočtu nacházíme. K tomu můžeme použít funkci ISINSCOPE(). Funkce ISINSCOPE() vrací hodnotu TRUE, pokud je sloupec uvedený v argumentu této funkce filtrován pomocí některé ze speciálních funkcí, které jsou vyvolány na pozadí vizuálů při načítání dat z modelu. Následující měřítko bude vracet hodnotu TRUE, pokud bude vyhodnoceno v hierarchii na úrovni dnů.
Měřítko:
Nově definované měřítko vrací následující hodnoty.
Stejným způsobem si můžeme ověřit, zda se v hierarchii nacházíme na úrovni měsíců a let.
Měřítka:
Pokud výše uvedená měřítka vložíme do tabulky, můžeme vidět následující výsledek.
Měřítko [Úroveň rok] vrací hodnotu TRUE v každém řádku tabulky, protože pokud se nacházíme na úrovni měsíců, je v aktuální buňce filtrován pouze jeden rok. Měřítko [Úroveň měsíc] vrací hodnotu TRUE na úrovni měsíců a dnů. Na úrovni dnů je hodnota měřítka [Úroveň měsíc] TRUE opět ze stejného důvodu, pokud je filtrován jeden den, je automaticky filtrován pouze jeden měsíc, do kterého tento den patří. Měřítko [Úroveň den] je na nejnižší úrovni v hierarchii, a vrací hodnotu TRUE pouze na úrovni jednotlivých dnů. Pokud budeme chtít celou rozhodovací logiku vložit do jednoho měřítka, musíme si z výše popsaných důvodů dát pozor na správné pořadí argumentů, a s ověřením úrovní musíme začít od nejnižší úrovně v hierarchii.
Měřítko:
Prvním argumentem funkce SWITCH() je funkce vracející hodnotu TRUE. Výsledkem celého výrazu proto bude první hodnota ze zadaného seznamu hodnot, pro kterou bude definovaná podmínka vracet hodnotu TRUE. Pokud bude měřítko vyhodnoceno na úrovni dnů, výsledkem bude hodnota "Den". Pokud bude měřítko vyhodnoceno na úrovni měsíců, výraz ISINSCOPE('Date'[Date]) bude vracet hodnotu FALSE. Jako TRUE bude vyhodnocen až druhý výraz, s argumentem ISINSCOPE('Date'[Měsíc rok]). Na úrovni let bude vracet hodnotu TRUE až poslední možná podmínka. Pokud nebude platit v aktuálním kontextu vyhodnocení žádná z uvedených podmínek, výsledkem bude text "Alternativní výsledek".
Nyní, když dokážeme určit, v jaké hierarchii se aktuálně nacházíme, stačí vložit na místo textu hodnotu měřítka [Prodeje] v požadovaném formátu. K naformátování čísla použijeme funkci FORMAT(). Prvním argumentem funkce bude hodnota, kterou chceme naformátovat. Druhým argumentem je samotný formát, a třetím argumentem národní prostředí.
Měřítko:
Měřítko vložíme do vizuálu Tabulka a můžeme se podívat na výsledek.
Měřítko vrací hodnoty prodejů v milionech korun na úrovni let, v tisících korun na úrovni měsíců a v korunách na úrovni dnů. Problém s takto definovaným měřítkem je, že vrací hodnoty také ve dnech, ve kterých nedošlo k žádným prodejům. Měřítko ještě můžeme vylepšit následujícím způsobem.
Měřítko:
Před vyhodnocením celého výpočtu nyní navíc pomocí funkce IF() ověřujeme, zda jsou v aktuálním kontextu prodeje větší než 0. Tím ošetřujeme, aby v použitém vizuálu nebyly zobrazeny dny, ve kterých nebyly uskutečněny žádné prodeje. Finální výsledek pak bude vypadat následovně.
Za zmínku ještě stojí použití funkce ISINSCOPE() pro zjištění aktuální úrovně v hierarchii. Funkce ISINSCOPE() vrací hodnotu TRUE, pokud je sloupec uvedený v argumentu této funkce filtrován pomocí některé ze speciálních funkcí, které slouží pro generování dotazů na pozadí vizuálů. Pokud je ale sloupec uvedený v argumentu ISINSCOPE() filtrovaný pouze prostřednictvím filtru z průřezu nebo z jiného vizuálu, funkce vrací FALSE. To je vlastnost zajišťující stejné chování i v situaci, kdy by uživatel vybral v průřezu například pouze jeden den nebo jeden měsíc.
Komentáře
Okomentovat