Ako otvoriť report v Power BI Report Serveri na konkrétnej strane

Niekedy potrebujete otvoriť konkrétny report v Power BI Report Serveri na konkrétnej strane. Či už kvôli požiadavke užívateľa, alebo z iných dôvodov – napríklad ak chcete vytvoriť z reportu slideshow. Preto sa teraz pozrieme, ako na to.

Power BI má v sebe už zabudovanú funkcionalitu, ktorá otvorí daný report na fixne zvolenej strane. Jednou z možností je report pred publikovaním na server či cloudu ponechať otvorený na tej strane, ktorá chcete aby sa zobrazila užívateľom po otvorení reportu. A potom report vypublikovať. Druhá možnosť je iba v cloude, kde si každý užívateľ môže vytvoriť buď záložku Power BI, alebo jednoducho nechať report otvorený na tej strane kde ho chce mať nabudúce otvorený, a cloud si to zapamätá. Tretia možnosť je zapamätať či odložiť si URL z riadku s adresou v prehliadači, pretože každá strana v cloudových reportoch má svoje jedinečné URL.

Všetky tieto možnosti však majú nevýhodu v tom, že sú statické. A nedajú sa kombinovať či skriptovať do zložitejších celkov. A najmä tá druhá a tretia možnosť fungujú iba v cloude. My to však potrebujeme rozbehať na Power BI Report Serveri. Preto bude potrebné nájsť náhradné riešenie.

Náhradné riešenie

Po nejakom čase stráveného debuggingom a reverzným inžinieringom web stránok zobrazujúcich reporty na Power BI Report Serveri, a so základnou znalosťou JavaScriptu, to išlo spraviť relatívne jednoducho.

Riešením je vytvoriť záložku, resp. bookmarket s nasledujúcim javascriptovým kódom, podobne ako som to spomínal v staršom článku o prepnutí reportov na fullscreen. V tomto prípade použijeme tento javascriptový kód:

javascript:(function(){ adresaReportu="https://raketa/reports/powerbi/PBI_vzorovy_subor"; aktualnaStrana = 2; if (location != adresaReportu) { window.open(adresaReportu, "_self"); } else { elements = document.getElementsByClassName('pbi-frame'); var iframe = elements[0];  var strany = iframe.contentWindow.document.getElementsByTagName("pbi-text-label"); strany[aktualnaStrana-1].parentNode.click(); } } )();

Skript bohužiaľ musíte zadať v rámci jedného riadka, preto ani tento skript nie je naformátovaný na osobitné riadky.

Ako to funguje

Toto riešenie využíva štruktúru HTML stránky, ktorá zobrazuje daný report. Najprv otvoríme report nachádzajúci sa na URL zadanom v premennej “adresaReportu”. Tam zadajte URL adresu svojho reportu – nájdete ju vo svojom prehliadači v riadku s adresou. Skript testuje, či je stránka s reportom už otvorená. Ak nie je tak ju iba otvorí. Ak už je otvorená, tak ju nebude otvárať znova, a preskočí na ďalšiu časť kódu, ktorá otvára danú stránku.

V tej časti kódu vyhľadáme iframe element, ktorý hostuje zobrazovanie daného reportu, podobne ako sme to robili v článku pri prepínaní reportu na fullscreen.

Potom v rámci DOM štruktúry v tomto iframe vyhľadáme elementy s názvom “pbi-text-label”, ktoré zobrazujú názvy stránok v spodnej časti reportu. Ich nadradené elementy – reprezentujúce tie záložky pod názvami strán – reagujú na kliknutie. Preto na nich stačí zavolať štandardnú metódu “click()”, ktorá spôsobí to isté čo kliknutie myšou na ten element, a report sa prepne na tú stránku.

Keď už máte vytvorenú túto záložku s JavaScriptom, tak na ňu kliknite. Prvé kliknutie na ňu otvorí report, a druhé kliknutie na ňu prejde na zadanú stranu v premennej “aktualnaStrana”:

Pomocou záložiek sa to bohužiaľ nedá spraviť na jedno kliknutie, pretože dnešné webové prehliadače to ešte so záložkami nedokážu. Riešením na to by bolo vytvorenie rozšírenia prehliadača, napr. pre Chrome, ale to nie je ani elegantné, a vo väčšine firiem ani schodné riešenie. Takže aspoň takto.

Skript bol otestovaný na aktuálnej verzii prehliadačov Chrome a Firefox, v Power BI Report Serveri vydanie May 2020. Ak máte iné prehliadače alebo verziu servera, tak si to otestujte, a prípadne si skript upravte.

A čo sa s týmto skriptom dá ešte robiť? Dá sa použiť napr. ako základ pre spustenie slideshow. Ale o tom až v ďalšom článku 🙂