Chcete být Data-driven?

Tak buďte Data-informed & Data-inspired

služby

Rozcestník reportů v Power BI

V Power BI lze dosáhnout zajímavých a praktických funkcionalit. Příkladem může být např. rozcestník, který umožní praktický a především přehledný přístup k reportům.

Power BI umožňuje přistupovat k reportům na základě workspaces, což nemusí být vždy praktické a především přehledné. Z těchto důvodů jsme obdrželi požadavek na tvorbu vlastního rozcestníku reportů v Power BI. Z tohoto rozcestníku by mělo být možné se prokliknout do příslušného reportu. Reporty by v rozcestníku měly být přehledně strukturované podle oddělení nebo logických celků. Celé řešení by mělo respektovat pravidla zabezpečení na úrovni reportů nebo celých oddělení. Podobný požadavek jsme kdysi implementovali v nástroji IBM Cognos a jeho realizace byla klienty často poptávána.

Rádi bychom se s vámi podělili o poznatky a zajímavou myšlenkovou cestu, která vedla ke zhotovení výsledného řešení. Jak se nám výsledek vydařil můžete vidět na úvodním obrázku.

Příprava zdrojového souboru

Prvním krokem v procesu vývoje rozcestníku byla příprava zdrojového souboru se seznamem reportů. V tento moment už jsme měli zjištěno, že nejvhodnějším typem vizuálu pro naše účely bude matrix tabulka, která nám jako jediná umožní dynamicky vypisovat hodnoty v pomyslných souřadnicích mřížky. Zdrojový soubor proto obsahoval následující sloupce:

  • Report ID – unikátní identifikátor záznamu v tabulce,
  • Row ID – Y souřadnice pro umístění do mřížky v rámci skupiny reportů,
  • Col ID – X souřadnice pro umístění do mřížky v rámci skupiny reportů,
  • Report Name – název reportu k zobrazení,Report Group – název skupiny reportů / oddělení.

 

Takováto struktura nám stačí pro základní test, zda se podaří reporty rozdistribuovat do mřížky. Naimportovali jsme tabulku do PowerBI, přidali jsme dvě další tabulky – tabulka Row (s jediným sloupcem Row ID a hodnotami {1,2,3}) a tabulka Col (s jediným sloupcem Col ID a hodnotami {1,2,3,4}), viz obrázek níže.

Pokud zachováme jmenné konvence v uvedené podobě, automaticky se vytvoří vazby mezi tabulkami v podobě, kterou potřebujeme.

Výběr a nastavení vizuálu

Následně jsme zkusili v tabulce typu matrix rozložení reportů do mřížky. Test probíhal následovně: do řádků matrixu jsme vložili Report Group a Row ID, do sloupců Col ID. Do samotných hodnot jsme vložili Report Name (kde se nám automaticky zobrazuje první hodnota). Jak lze vidět níže, test dopadl úspěšně.

Když přidáme do datového zdroje ikonku ve formátu base64 (pole Icon hodnota base s prefixem: „data:image/jpeg;base64,“ a sloupci nastavíme data category „image URL“), může výstup vypadat například takto:

Nyní už řešení vypadá výrazně lépe. Ještě nás ale čeká několik dalších kroků.

Interaktivní odkazy rozcestníku

V tuto chvíli nás především zajímá, jestli bude u obrázku a názvu reportu možné nastavit odkaz k prokliknutí. Připravili jsme si tedy ve zdrojových datech nový sloupec s URL k danému reportu. Pro otestování nám stačí jakákoliv validní URL, viz ukázka. Důležité je nezapomenout nastavit Data category „Web URL“.

Pokud URL nastavíme na oboje – obrázek i název reportu, zjistíme, že se název reportu podtrhne, což se pro náš rozcestník nehodí. Možnost podtržení odebrat bohužel není dostupná.  Zapátrali jsme tedy po jiných možnostech, jak zobrazit obrázek spolu s textem, ideálně s možnostmi pokročilého stylování.

Ikony rozcestníku

Dále jsme se zaměřili na ikonku. Snažili jsme se ji přidat v podobě SVG (Scalable Vector Graphic). Cílem bylo, aby se do tabulky vkládala validní definice SVG. To proto, aby bylo možné ikony řídit centrálně v mapovací tabulce.

Dalším důvodem bylo, aby bylo možné v samotné DAX metrice řídit jednotně logiku změny barvy a také nezbytného prefixu “data:image/svg+xml;utf8”. Hotové metrice je dále nutné nastavit Data category na hodnotu „Image URL“.

V tuto chvíli jsme se vrátili k názvům reportů. Zaměřili jsme se na SVG definicí obrázku a název reportu k němu přímo přidali. A abychom to dělali jednotně, nastavili jsme to přímo v DAX metrice, kde se přidává do SVG definice foreignObject před ukončovací </svg> tag.

<foreignObject x=’-50%’ y=’110%’ width=’200%’ height=’50%’ style=’text-align:center’>

<div xmlns=’http://www.w3.org/1999/xhtml‘>Název reportu</div>

<foreignObject>

Tím se zajistí i nativní zalamování delších názvů reportů. Zde se dá případně i nastavit jednotná barva textu, aby odpovídala barvě ikony. To vzhledem k barevnému spektru ikon v našem případě nebylo žádoucí. Mezivýsledek je možné vidět na obrázku níže.

Nyní, když nastavíme Web URL, bude už možné kliknout na obrázek i nadpis a proklik bude fungovat v obou případech.

Následně jsme se zaměřili na barvu ikonky podle skupiny reportů. K tomuto účelu jsme do zdrojové tabulky přidali sloupec Icon Color a vložili hexa kód příslušné barvy.

Jako další krok jsme upravili metriku a nahradili defaultní odstín barvy všech ikonek barvou vyplněnou v řídící tabulce.

Výsledek už vypadá moc pěkně. Stačí už jen doplnit správné URL k vašim reportům.

Testování rozcestníku

Následně jsme se pustili do testování. Na několika reportech jsme vyzkoušeli, že prokliky fungují a že nás opravdu odkazují na správný report. Pak přišly na řadu pokročilejší scénáře.

Co se stane, když některý z uživatelů nebude mít oprávnění na některou z oblastí reportů? Při přístupu pouze k reportům v oblastech Management, Operations a Sales, vidí uživatel pohled uvedený níže.

Vidíme, že chování je v pořádku.

Pokud se ale podíváme na druhý scénář, kde uživatel nemá mít oprávnění na některé reporty z dané skupiny, pak již výsledek nevypadá dobře. To lze vidět na obrázku uvedeném níže.

Odfiltrováním některých reportů dojde k vytvoření mezer a přestávají být patrné příslušnosti ke skupinám. Toto není chování, které očekáváme. Cílem je, aby se reporty za všech okolností řadily zleva doprava, shora dolů. Nezbývá tedy, než pozici X a Y pro umístění reportů počítat dynamicky až po filtraci zobrazované množiny reportů.

Abychom toho dosáhli, kompletně jsme matrix předělali. Tabulky Col a Row jsme zrušili a ze zdrojového souboru jsme odebrali sloupce Row_ID a Col_ID. V novém řešení se pozice X a Y se počítá dynamicky ve virtuální tabulce pomocí DAX metriky. Kalkulace Y pozice probíhá následovně: po aplikaci row-level security funkcí RANKX očíslujeme zbylé reporty v každé skupině, takto získané číslo vydělíme maximálním počtem sloupců. Z výsledku si ponecháme jen celé číslo – tedy to, co je před desetinnou čárkou a přičteme 1, protože jinak by číslování začínalo od 0. Kalkulace X pozice se počítá obdobně, jen je číslování pomocí funkce RANKX vztažená nejen ke skupině reportů, ale také k číslu řádku, který jsme spočítali v předchozím kroku. Výsledkem je dynamické přiřazování pozice X a Y každému reportu po každé filtraci reportů, a tedy přeskládání rozložení ikonek v matrix tabulce.

Výsledkem je pak chování, které jsme si přáli, jak lze vidět v ukázce.

Je nutné dbát na to, že stejným způsobem je potřeba napočítat i URL k příslušné pozici (a se stejnou logikou číslování jako u ikonek, aby URL nevedla k jinému reportu, než je uvedeno v názvu). Pro tento účel je nutné ještě nachystat specificky i obdobnou metriku, která místo obrázku vrací URL.

Výhodou tohoto řešení je možnost libovolně měnit rozložení ikon v rámci mřížky. Je tedy velmi jednoduché uspořádat ikonky do struktury 3×3, 4×2, 5×1 apod.

Například 2×4

Nebo 3×3 (třetí řádek se vykreslí až tehdy, budou-li předchozí dva plně zaplněny a bude-li existovat report, který lze do třetího řádku umístit)

Nebo 7×2 (druhý řádek se v tomto případě nikdy nezobrazí, protože v žádné skupině není více než sedm reportů).

Dále je možné přidat metriku, kterou se automaticky počítá počet skupin reportů, které se vejdou do jednoho vizuálu pod sebe při nastavení mřížky X na Y. Pak je možné zobrazovat reporty ve dvou matrixech vedle sebe, například takto:

Toto je nastavení, které se nám z hlediska designu zdá optimální. Výpočet počtu řádků reportů jsme si zajistili dynamicky podle maximálního počtu reportů v dané skupině. Nesmí se totiž stát, aby nám pro report chybělo okénko ve finální mřížce. Takto připravený report pak už stačí napojit na logiku filtrace reportů podle oprávnění uživatelů k reportům či skupinám reportů.

 

Doplníme ještě pár tipů

  • Při přípravě URL do řídící tabulky je možné přidat parametry URL, kterými se dá dosáhnout odlišného nastavení okna prohlížeče. Například lze skrýt některé ovládací panely Power BI Service, které v tomto případě uživatel nepotřebuje. Proto je vhodné zvážit jakou URL adresu do zdrojových dat připravíte. K zmiňované embedded URL se lze dostat snadno v Power BI Service. Stačí si otevřít příslušný report, kliknout na Soubor > Vložit sestavu > Web nebo portál > a zkopírovat odkaz. Ať už však do zdrojových dat vložíte tuto embedded URL nebo klasickou URL, reporty se vám budou otevírat v novém okně, což je velmi praktické pro návrat do rozcestníku reportů. Až se pak budete chystat na nasazení rozcestníku do produkce, zvažte, jestli do každého reportu nevložit tlačítko, které odkáže právě na tento rozcestník. Tento malý detail celé vaše řešení posune zase o kus dál z pohledu příjemné user experience.
  • Pokud používáte “živé připojení” pomocí live connection / direct query a současně import mód, mohla by se hodit ještě malá ikonka u každého reportu se symbolem konkrétního připojení.
  • Zároveň lze pouze při pohledu administrátora (nastavení row-level security) zajistit, aby v dolním rohu svítil červený puntík u těch reportů, u nichž se nezdařil poslední refresh. To se hodí zejména pokud je zdrojem více datasetů se samostatně nastavenými refreshi.
Závěr

Ukázali jsme si, že s trochou představivosti lze v Power BI dosáhnout celkem zajímavých funkcionalit a vytvořit si vlastní navigační stránku s možností další rozšíření a customizací. Líbí se vám výsledek? Využili byste ho ve vaší společnosti také? Chcete si podobný rozcestník vytvořit také, ale zasekli jste se v některém z kroků? Nebo chcete poskytnout některou z jmenovaných DAX metrik? Ozvěte se nám.

Máte zajímavý námět, co byste rádi implementovali, ale zdá se, že to v Power BI nelze? Nebo co vám v reportech chybí, nevyhovuje nebo nemá dostatečné možnosti nastavení? Pošlete nám vaše náměty i nápady a třeba najdete řešení v našem příštím příspěvku.

 

Autor: Tomáš Němeček, oddělení Power BI
tomas.nemecek@dolphinconsulting.cz

Mohlo by vás zajímat

Číst další

Chcete nás kontaktovat?

Drop files here or
Max. file size: 2 MB.