Automatické obnovovanie reportu Power BI

Pri nasadzovaní reportov Power BI na veľkoplošné obrazovky, či ako monitorovacieho riešenia, narazíte zvyčajne na problém, že dáta na pozadí sa síce menia každú sekundu, ale report na obrazovke sa nemení. A vy by ste to chceli robiť, pretože sa tým napr. zobrazuje aktuálny stav na call centre či vo výrobe, a report musí zobrazovať stav najviac pred niekoľkými sekundami. Zmení sa samozrejme až po tom, čo dáte znova načítať stránku s reportom. To ale nemôžete robiť ručne, keď to je report na veľkoplošnej obrazovke, na ktorý pozerá celá kancelária, pretože to musí bežať samostatne a automaticky. Čo teda s tým?

Takáto funkcionalita je síce podporovaná pri dashboardoch/tabuliach Power BI v cloude, ale nie pri reportoch. A už vôbec nie pri vnútrofiremnom Power BI Report Serveri. Čo však nie je podporované, to si vieme v tomto prípade veľmi jednoducho spraviť sami. A netreba ani nič kupovať.

V prvom kroku musíte zobraziť report na celú obrazovku. V cloude na to máte buď tlačítko vpravo hore, alebo cez SharePoint či Power BI Embedded to viete zobraziť aj na vlastnej stránke cez predkonfigurované URL. V prípade vnútrofiremného Power BI Report Servera to spravíte tak, ako som to písal už v tomto článku.

Máme teda zobrazený report na celú obrazovku. Teraz už len zabezpečiť, aby sa sám aktualizoval a prekresľoval každých X sekúnd. Treba správne nastaviť tieto 2 kroky, ktoré v prípade cloudu budú musieť byť riešené inak ako v prípade Power BI Report Servera:

  1. nastaviť automatickú aktualizáciu dát v reporte,
  2. nastaviť automatické obnovovanie reportu na obrazovke.

Prvý krok – častá automatická aktualizácia dát

Prvý krok bude úplne bezproblémový na Power BI Report Serveri. Tam môžete nastaviť automatickú aktualizáciu dát kľudne aj každú sekundu. Kvôli tomu, ako to funguje, je však lepšie nastaviť to aspoň na interval okolo 10 sekúnd a viac, pretože aktualizácia každú sekundu vám takmer nikdy nezbehne. Ak potrebujete častejšiu aktualizáciu dát, tak použite buď režim DirectQuery, alebo Live, rovnako ako v cloude – viď nižšie.

V prípade cloudu Power BI budete mať problém. Tým problémom je to, že cloud jednoducho nie je stavaný na aktualizáciu dát každých X sekúnd. A dokonca ani každých X minút. Dôvod je ten, že počet automatických aktualizácií v cloude za deň je obmedzený podľa vašej licencie Power BI takto:

  • pri Power BI Free je to 1x denne,
  • pri Power BI Pro je to 8x denne,
  • pri Power BI Premium je to 48x denne.

Na prvý pohľad by bolo spásou použiť Power BI Premium, ale 48x denne pri rozdelení 24 hodín na rovnaký interval je presne pol hodina. A my potrebujeme report mať aktualizovaný povedzme každých 10 sekúnd. Keby sa ten limit medzičasom náhodou aj zmenil, hoci aj na 1000x denne, tak aj tak vám to nepomôže. Aktualizácia dát v cloude trvá kvôli réžii cloudu a ďalším faktorom niekedy aj pár minút, aj keď máte v reporte povedzme iba 5 riadkov. Takže darmo by ste nastavovali aktualizáciu každých 10 sekúnd, keď zbehne povedzme len raz za 5 minút. A ďalšia nechválne známa fičúra cloudu Power BI je to, že ak si aj náhodou nastavíte aktualizáciu dát napr. na 14:30 hod., tak sa spustí aj s niekoľko minútovým oneskorením. Čo pri bežných reportoch nevadí, ale v tomto prípade je to nepoužiteľné. Preto na to bude potrebné ísť inak.

Prvým riešením by bolo použiť režim DirectQuery pre tie tabuľky, kde sa vám menia dáta. Tým pádom by ste nemuseli spúšťať automatickú aktualizáciu dát. Toto však veľakrát stroskotá napr. na tom, že vám nepôjde použiť polovica transformácií v Power Query, ani väčšina funkcií v jazyku DAX. To sa však vždy dá nejak obísť. A v prípade Power BI Report Servera to potom už nie je problém. V prípade cloudu však aj tak budete mať stále problém. Dotazy DirectQuery sú v cloude cache-ované zvyčajne až 15 minút. A keďže vy potrebujete volať de facto stále dokolečka tie isté dotazy na dátové zdroje, tak sa to bude tváriť, že to štvrť hodiny nefunguje. Takže znova treba skúsiť niečo iné.

Riešením je presunúť celý dátový model na SSAS Tabular. Tak ako som to už písal v tomto článku. A následne sa pripojiť z reportu k tomuto dátovému modelu cez Live pripojenie, resp. “Pripojenie naživo”. Tak ako o tom píšem napr. v mojej knihe o Power BI. Tam na rozdiel od DirectQuery nebudete obmedzení v ničom (jedine že by ste použili DirectQuery na SSAS Tabulare), a dokonca by sa ani v cloude nemalo prejavovať cache-ovanie výsledkov. V prípade cloudu však budete potrebovať špeciálne nakonfigurovať bránu Power BI Gateway a otvoriť ďalšie porty na firewalle, aby cloud vedel čím skôr zavolať daný dotaz na dáta, a aby sa výsledky čím skôr prejavili aj v reporte. Tým úspešne dosiahnete prvý krok aj v cloude.

Druhý krok – automatické obnovovanie reportu

Automatické obnovovanie reportu nie je podporované ani v cloude, ani na Power BI Report Serveri. To si však viete implementovať aj sami pomerne ľahko, napr. týmito 2 spôsobmi:

  1. vložením reportu do HTML iframu, alebo ako webovej časti do SharePointu, a pridanie 1 riadku Javascriptu do okolitej webstránky, ktorý bude danú stránku automaticky obnovovať v danom časovom intervale,
  2. nainštalovaním doplnku do webového prehliadača, ktorý bude automaticky obnovovať danú stránku v danom časovom intervale. Napr. pre prehliadač Chrome môžete použiť plugin s názvom “Auto Refresh”.

Po tomto kroku už máte všetko nastavené, a malo by to fungovať. Je tak trochu paradox, že je to podstatne ľahšie spraviť na vnútrofiremnom Power BI Report Serveri, keď Power BI je navrhnuté ako cloudová služba. Ale pri cloude si jednoducho na takéto veci treba zvyknúť.

Každopádne, aj na tomto príklade vidíte, že aj dosiaľ nepodporovaná funkcionalita ide nastaviť, keď sa aspoň trochu chce. A netreba pri tom v tomto prípade používať nejaké špeciálne triky, a stačí využiť bežné postupy z webového vývoja. A potom je aj takáto funkcionalita hračkou 🙂