Dynamická zmena zobrazovaných jednotiek v Power BI a PowerPivote

Užívatelia potrebujú v reportoch zobrazovať výsledky v rôznych jednotkách. Niekedy ako presné čísla, inokedy v tisícoch, miliónoch či miliardách. Toto nie je problém nastaviť cez formátovanie vizuálov v Power BI, prípadne cez jazyk DAX v excelovskom PowerPivote. Problém však nastáva vtedy, keď si to užívateľ chce meniť počas zobrazovania reportu. V takom prípade to je potrebné implementovať tak, že sa použije dynamická zmena zobrazovaných jednotiek. Prečo je potrebná dynamická zmena zobrazovaných jednotiek? Dynamická zmena zobrazovacích jednotiek je typický užívateľský problém, ktorý z pohľadu tvorcov reportov vyzerá byť ako malichernosť, ale nie je. Užívatelia to potrebujú častokrát nielen kvôli flexibilite zobrazovaných štatistík, ale aj kvôli rýchlosti rozhodovania. Napríklad, čím vyššia úroveň manažmentu, tým vyššie jednotky, ktoré ich zaujímajú. Vyšší manažment častokrát vôbec nezaujímajú presné čísla, ale chcú vedieť, koľko je to v miliónoch či miliardách, aby si to vedeli dať rýchlo do kontextu s aktuálne riešenými záležitosťami, a rýchlo rozhodnúť o ďalšom postupe. Preto navonok nepodstatná drobnosť je dôležitou záležitosťou z pohľadu tých najdôležitejších užívateľov používateľov reportov, ktorí podľa nich rozhodujú, čo sa bude a nebude diať ďalej. Dynamická zmena zobrazovacích jednotiek sa dá implementovať rôznymi spôsobmi. Častokrát sa kvôli neznalosti implementuje ako rôzne kópie tej istej strany reportu, na ktorých sa nastavia iné zobrazovacie jednotky. To však nie je vhodné z pohľadu následnej údržby a rozvíjania reportov, pretože si tým niekoľkokrát znásobíme prácu pri budúcich úpravách takéhoto reportu. Preto si ukážeme profesionálne riešenia. Pre jednoduchosť si ukážeme dve riešenia najprv jedno jednoduchšie, ktoré bude fungovať v Power BI, PowerPivote či všetkých implementáciách SSAS Tabularu. A potom druhé pokročilejšie, ktoré síce nebude fungovať v excelovskom PowerPivote, ale zafunguje v modernejších verziách Power BI a SSAS Tabularu. Obe riešenia si ukážeme na našom vzorovom súbore Power BI, resp. PowerPivotu. Spravíme si kontingenčku, kde: do oblasti hodnôt dáme merítko Obrat z tabuľky Objednávky, do oblasti riadkov dáme stĺpec CalendarYear z tabuľky Čas. Výsledná kontingenčka bude vyzerať takto: A teraz potrebujeme nejakým jednoduchým spôsobom implementovať dynamickú zmenu zobrazovacích jednotiek pre užívateľov reportu. My zvolíme to najjednoduchšie z pohľadu užívateľa tlačítka. Pomocou nich si to bude vedieť zmeniť každý z nich. Dynamická zmena zobrazovacích jednotiek cez odpojené slicery Prvé riešenie využíva techniku odpojených slicerov, ktorá je uvedená v mojej knihe o Power BI. Jej výhodou je to, že je ľahká na pochopenie, a bude fungovať v Power BI, excelovskom PowerPivote, SSAS Tabulare aj Azure Analysis Services. Pridáme si do dátového modelu takúto novú tabuľku: Túto tabuľku potom použijeme pre odpojený slicer. V prvom stĺpci sú textové možnosti, z ktorých vyrobíme tlačítka sliceru, a ktorými si užívateľ bude vyberať zobrazované jednotky. V druhom stĺpci je poradové číslo týchto budúcich tlačítok, aby sa zobrazili v takom poradí, ako to chceme my, a nie v abecednom poradí. A v treťom stĺpci je koeficient prepočtu jednotiek, ktorým budeme deliť pôvodné čísla, keď užívateľ vyberie túto možnosť. Takúto tabuľku nazveme Možnosti na výber, naimportujeme ju do dátového modelu, a skontrolujeme, či je neprepojená na ostatné tabuľky. Ak by sa náhodou prepojila s ostatnými tabuľkami, tak všetky prepojenia na túto tabuľku zmažte. Tabuľka musí zostať odpojená od ostatných tabuliek v dátovom modeli. Budeme z nej vyrábať odpojený slicer. V ďalšom kroku vyrobíme v reporte slicer z tejto novej tabuľky, konkrétne zo stĺpca Jednotky. Sliceru nastavíme aby sa zobrazoval ako tlačítka, a zároveň nastavíme stĺpcu Jednotky, aby sa jeho položky zobrazovali vo vizualizáciách v poradí podľa stĺpca Poradie. Výsledný slicer, napríklad v Power BI, by mal vyzerať takto: Potom už len vyrobíme merítko, ktoré sa vo vizualizáciách použije namiesto pôvodného merítka Obrat, a ktoré bude robiť automatický prepočet jednotiek podľa toho, ktorú možnosť vybral užívateľ v sliceri. Vytvoríme teda takéto merítko: Obrat dynamicky := IF(HASONEFILTER('Možnosti na výber'[Jednotky]), [Obrat] / SELECTEDVALUE('Možnosti na výber'[Koeficient])) Poznámka: v starších verziách PowerPivotu a SSAS Tabularu nahraďte funkciu SELECTEDVALUE funkciou MAX. Potom už len vymeníme merítko Obrat v kontingenčke za merítko Obrat dynamicky, a máme to hotové. Keď v sliceri nevyberieme žiadnu možnosť, tak to nezobrazí nič: Keď však vyberieme možnosť pôvodné, tak to zobrazí pôvodnú kontingenčku s pôvodnými jednotkami: A keď vyberieme možnosť napríklad milióny, tak to zobrazí čísla v kontingenčke v miliónoch: Poznámka: ak používate grafy v Power BI, tak Power BI v označeniach údajov (tzn. popiskoch stĺpcov či bodov grafu) môže používať vlastný automatický prepočet zobrazovaných jednotiek. V tom prípade pohľadajte v nastaveniach vizuálu nastavenie nazvané Zobrazované jednotky, resp. Display units, a zmeňte ho na možnosť Žiadne, resp. None. Tak sa to bude zobrazovať správne aj v grafoch Power BI. Poznámka #2: v Power BI aj SSAS Tabulare/AAS viete nastaviť aj vlastné formátovanie hodnôt, aby sa napríklad tie hodnoty v miliónoch nezobrazovali ako 2,63 €, ale 2,63 mil. €. Tomu sa však budeme venovať niekedy inokedy. Je tam zároveň ošetrená aj možnosť, ak by užívateľ vybral viacero možností naraz v sliceri, pre prípad, že nie ste v Power BI, kde sa dá takéto niečo zakázať. V tomto prípade to užívateľovi nezobrazí nič. Ak by ste však chceli dať užívateľovi možnosť, aby si vedel zobraziť tie čísla vo viacerých jednotkách súčasne, tak môžete dať do kontingenčky, do oblasti stĺpcov, stĺpec Jednotky, ktorý ste použili na vytvorenie sliceru. Keď potom užívateľ vyberie viacero možností v sliceri, tak vybrané možnosti sa mu zobrazia naraz vedľa seba v stĺpcoch kontingenčky: V prípade grafov Power BI dajte ten stĺpec do oblasti Legenda, alebo do obdobnej časti vizuálu. V oboch prípadoch je vhodné ešte vypnúť zobrazovanie stĺpca Celkovo v nastaveniach medzisúčtov kontingenčky, pretože tento stĺpec bude vždy prázdny, a aj keby nebol, tak nemá zmysel spočítavať takéto čísla dohromady. Takýmto spôsobom viete užívateľovi nielen poskytnúť možnosť dynamickej zmeny zobrazovacích jednotiek, ale aj zobraziť to isté číslo vo viacerých jednotkách súčasne. Táto technika má však jednu nevýhodu. Keď to chcete implementovať pre viacero merítok, napr. aj pre Náklady či Zisk, tak musíte pre každé z nich vytvoriť merítko so vzorcom uvedeným vyššie, kde v tom vzorci vymeníte Obrat za to vaše merítko. Ak ste v excelovskom PowerPivote či SSAS Tabulare pre verziou 2019, tak inú možnosť veľmi nemáte. Ak ste však v Power BI, Azure Analysis Services či SSAS Tabulare od verzie 2019 ďalej, tak sa to dá spraviť elegantnejšie, ako si hneď teraz ukážeme v druhom riešení. Dynamická zmena zobrazovacích jednotiek cez výpočtové skupiny Druhé riešenie je možné implementovať cez výpočtové skupiny, ktoré sú dostupné v Power BI od roku 2019, a v SSAS Tabulare od verzie 2019. Táto funkcionalita je jednou z najpokročilejších v dátovom modeli a súčasne jazyku DAX, preto si tu riešenie uvedieme iba stručne. Začneme opäť s kontingenčkou uvedenou na začiatku článku. Potom do dátového modelu pridáme novú výpočtovú skupinu s názvom Možnosti na výber, a výpočtový stĺpec v nej pomenujeme ako Jednotky. Potom do nej pridáme 4 výpočtové položky s názvami pôvodné, tisíce, milióny a miliardy, ktoré budú v Tabular Editore vyzerať napríklad takto: Potom nastavíme tieto vlastnosti jednotlivým výpočtovým položkám: Názov položky Expression Ordinal Format String Expression pôvodné SELECTEDMEASURE() 0 #,0.00 € tisíce SELECTEDMEASURE() / 1000 1 #,0.00 tis. € milióny SELECTEDMEASURE() / 1e6 2 #,0.00 mil. € miliardy SELECTEDMEASURE() / 1e9 3 #,0.00 #8220;mld. € Po uložení týchto nastavení do dátového modelu je už zvyšok postupu jednoduchý. Táto výpočtová skupina sa v dátovom modeli tvári ako nová tabuľka s názvom Možnosti na výber so stĺpcom Jednotky. Preto, podobne ako v predchádzajúcom riešení, vytvoríme slicer z tohto stĺpca, a zároveň sliceru nastavíme aby sa zobrazoval ako tlačítka. A to je VŠETKO čo potrebujeme spraviť. V kontingenčke nemusíme nič meniť. Keď teraz vyberieme možnosť pôvodné, tak sa nám zobrazí kontingenčka v pôvodných jednotkách: A keď vyberieme napr. možnosť milióny, tak sa zobrazí nielen že v miliónoch, ale čísla budú aj naformátované do formátu XXX,XX mil. €: Je to kvôli tomu, že sme v nastaveniach výpočtových položiek nastavili formátovací reťazec vo vlastnosti Format String Expression, a preto Power BI vie prebrať toto formátovanie a zobraziť výsledky naformátované podľa nášho želania. Najlepšie na tom je to, že to bude fungovať pre všetky merítka, a nemusíme pre každé merítko vyrábať jeho dynamicky zobrazovanú verziu. Teraz stačí jednoducho pridať do kontingenčky ďalšie merítka, napr. Náklady a Zisk, a bude ich tiež zobrazovať v miliónoch, resp. vo zvolených jednotkách: A samozrejme, keby ste chceli zobraziť tie čísla vo viacerých jednotkách súčasne, tak to spravíte podobne ako pri prvom riešení. Dajte do kontingenčky, do oblasti stĺpcov, stĺpec Jednotky, ktorý ste použili na vytvorenie sliceru. Keď potom užívateľ vyberie viacero možností v sliceri, tak vybrané možnosti sa mu zobrazia naraz vedľa seba v stĺpcoch kontingenčky: Táto funkcionalita je však podstatne náročnejšia na pochopenie v porovnaní s prvým riešením. Táto funkcionalita zároveň funguje iba vtedy, keď máte v kontingenčke v oblasti Hodnoty použité merítka. Ak tam máte použitý zosumarizovaný stĺpec, tak to nebude fungovať, a musíte pre neho spraviť merítko. Je to kvôli tomu, ako fungujú výpočtové skupiny. Keď kliknete na danú položku v sliceri, tak to aplikuje filter na celú stranu reportu. Tá položka v sliceri v skutočnosti reprezentuje výpočtovú položku, a preto to v skutočnosti aplikuje tzv. výpočtový filter, ktorý sa na prvý pohľad správa ako iné filtre, ale v skutočnosti nič nefiltruje. Funguje tak, že sa po jednom aplikuje na všetky bunky kontingenčky, kde je použité nejaké merítko. Následne pri výpočte tej bunky nahradí vzorec merítka v tej bunke vzorcom danej výpočtovej položky, a s tým vzorcom vypočíta výsledok v tej bunke. Zoberme si napríklad túto verziu reportu, kde sme v sliceri vybrali možnosť milióny, a v ktorom si ako vzorovú bunku vyberieme bunku so Ziskom za rok 2003: Za normálnych okolností by sa na výpočet takejto bunky použil vzorec merítka Zisk. Na všetky bunky kontingenčky je však aplikovaný hore uvedený výpočtový filter, a preto sa odkaz na merítko Zisk v tejto bunke nahradí vzorcom vybranej výpočtovej položky, čiže vzorcom SELECTEDMEASURE() / 1e6. Funkcia SELECTEDMEASURE vracia odkaz na merítko, ktoré sa práve počíta v tej bunke, resp. ktoré tam bolo pred tým nahradením. Čiže vo výsledku to pre tú bunku zavolá vzorec [Zisk] / 1e6, čo predelí hodnotu Zisku pre tú bunku 1 miliónom. Zároveň je pre danú výpočtovú položku nastavený formátovací reťazec, pomocou ktorého sa naformátuje výsledná hodnota pre zobrazovanie v kontingenčkách a grafoch. Vo vzorcoch jazyka DAX však stále bude vystupovať táto hodnota ako číslo, takže s ňou môžete vykonávať ďalšie výpočty ako obvykle. Výhoda tohto riešenia je to, že nemusíte pre každé pôvodné merítko vytvárať jeho dynamickú verziu. Funguje to pre všetky merítka automaticky. Takisto tabuľku pre odpojený slicer nahradzuje výpočtová skupina, ktorá sa tvári ako tabuľka s 1 stĺpcom. Toto riešenie je možné kombinovať aj s rôznymi merítkami v rôznych jednotkách, napríklad ak máte merítka ako Zisk (zobrazované v pôvodných hodnotách) a Marža (zobrazované v percentách). Stačí použiť funkcie pre prácu s výpočtovými skupinami, ako napríklad SELECTEDMEASURENAME alebo SELECTEDMEASUREFORMATSTRING, a aj takéto požiadavky sa dajú implementovať ľavou zadnou. Takto sa dá implementovať dynamická zmena zobrazovaných jednotiek elegantnejšie, bez potreby duplikovania vzorcov v dátovom modeli, hromadne pre všetky merítka naraz. Len je potrebné dobre pochopiť a následne použiť funkcionalitu výpočtových skupín, ako sa učí napríklad na našom pokročilom kurze Power BI. Na záver Dynamická zmena zobrazovaných jednotiek v Power BI či PowerPivote nemusí byť strašiakom. Po troche znalostí sa dá implementovať celkom jednoducho, ako ste videli na príkladoch vyššie. Takto sa vám bude dať implementovať nielen dynamická zmena zobrazovaných jednotiek, ale aj iná dynamická funkcionalita v Power BI a iných reportovacích nástrojoch ľavou zadnou Príspevok Dynamická zmena zobrazovaných jednotiek v Power BI a PowerPivote zobrazený najskôr PowerPivot.sk - Ultimátna analýza dát v Exceli a Power BI.

prejsť na článok

Pozvánka na webinár Časová analýza v Power BI s jazykom DAX

Analýza údajov naprieč časom je jedna z najčastejších činností pri reportingu v Power BI aj Exceli. Aj preto som pre Vás pripravil webinár o časovej analýze v Power BI a excelovskom PowerPivote. Na tomto webinári si ukážeme, ako vám vedia rôzne nástroje

prejsť na článok

Pozvánka na webinár Optimalizácia výkonu jazyka DAX v Power BI

Každý report v Power BI je dobrý len do takej miery, ako rýchlo vie zobraziť výsledky. Môžete mať nádherný report, ktorý sofistikovane zobrazí všetko čo potrebujete, vykreslí to v nádherných interaktívnych grafoch a nechá aj Vašu svokru prekvapenú, ako st

prejsť na článok

Pozvánka na webinár Jazyk SQL vs. jazyk DAX v Power BI a PowerPivote

Vianoce a nový rok ubehli ako voda, a máme tu čas na ďalší webinár! Tentokrát sa pozrieme na jazyk SQL vs. jazyk DAX v Power BI. A pôjdeme naozaj do hĺbky! Na tomto webinári sa pozrieme na to, ako sa najčastejšie konštrukty z jazyka SQL zapisujú a použív

prejsť na článok

Pozvánka na webinár Správny návrh štruktúry dátového modelu pre Power BI

Dátové modelovanie a návrh štruktúry dátového modelu je to, čo takmer všetci v Power BI a PowerPivote preskakujú. Je to najmä kvôli tom, že jednou zo skvelých vlastností Power BI je to, že si doňho viete natiahnuť ľubovoľné dáta ako tabuľky, prepojiť ich

prejsť na článok

Power Sensor for Altis

Telemetry Converter HS Power sensor Altis devices Tiny and simple power sensor serving to display and record power supplying parameters. Plugged between Altis device and positive battery wire Support for energy switch let you motor turn off when certain

prejsť na článok