Power BI - Nastavení formátu čísla v hierarchii

Úvodní obrázek

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.

Zobrazení hodnot v různých formátech podle úrovně v hierarchii

V prvním kroku si vložíme do reportu vizuál Matrix, s roky, měsíci a dny v řádcích a se sumou prodejů v hodnotách. Měřítko vracející sumu za prodané produkty v aktuálním kontextu vyhodnocení má následující definici.

Měřítko:

Prodeje = SUM(Sales[Sales Amount])

Výchozí report, ve kterém budeme tvořit celý výpočet, může vypadat následovně.

Power BI - Jak zobrazit různé formáty hodnot podle aktuální úrovně v hierarchii 2

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 TRUEpokud 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:

Úroveň den = ISINSCOPE('Date'[Date])

Nově definované měřítko vrací následující hodnoty.

Power BI - Jak zobrazit různé formáty hodnot podle aktuální úrovně v hierarchii 3

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:

Úroveň měsíc = ISINSCOPE('Date'[Měsíc rok])
Úroveň rok = ISINSCOPE('Date'[Rok])

Pokud výše  uvedená měřítka vložíme do tabulky, můžeme vidět následující výsledek.

Power BI - Jak zobrazit různé formáty hodnot podle aktuální úrovně v hierarchii 4

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:

Úroveň =
SWITCH
(
TRUE(),
ISINSCOPE('Date'[Date]), "Den",
ISINSCOPE('Date'[Měsíc rok]), "Měsíc",
ISINSCOPE('Date'[Rok]), "Rok",
"Alternativní výsledek"
)

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

Power BI - Jak zobrazit různé formáty hodnot podle aktuální úrovně v hierarchii 5

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:

Prodeje vlastní formát =
SWITCH
(
TRUE(),
ISINSCOPE('Date'[Date]),
FORMAT([Prodeje], "# ### ##0.00 Kč","cs-cz"),
ISINSCOPE('Date'[Měsíc rok]),
FORMAT([Prodeje]/1000, "# ### ##0.00 tis. Kč","cs-cz"),
ISINSCOPE('Date'[Rok]),
FORMAT([Prodeje]/1000000, "# ### ##0.00 mil. Kč","cs-cz"),
FORMAT([Prodeje]/1000000,"# ### ##0.00 mil. Kč","cs-cz")
)

Měřítko vložíme do vizuálu Tabulka a můžeme se podívat na výsledek.

Power BI - Jak zobrazit různé formáty hodnot podle aktuální úrovně v hierarchii 6

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:

Prodeje vlastní formát final =
VAR SumaProdeju = [Prodeje]
VAR Vypocet =
IF
(
SumaProdeju > 0,
SWITCH
(
TRUE(),
ISINSCOPE('Date'[Date]),
FORMAT(SumaProdeju, "# ### ##0.00 Kč","cs-cz"),
ISINSCOPE('Date'[Měsíc rok]),
FORMAT(SumaProdeju/1000, "# ### ##0.00 tis. Kč","cs-cz"),
ISINSCOPE('Date'[Rok]),
FORMAT(SumaProdeju/1000000, "# ### ##0.00 mil. Kč","cs-cz"),
FORMAT(SumaProdeju/1000000,"# ### ##0.00 mil. Kč","cs-cz")
)
)
RETURN
Vypocet

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ž 0Tí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ě.

Power BI - Jak zobrazit různé formáty hodnot podle aktuální úrovně v hierarchii 7

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