Automatická aktualizácia dát v Power BI udržuje dáta vo vašich reportoch aktuálne. Keď však máte väčšie množstvo dát, tak si nemôžete dovoliť často aktualizovať dáta. A pri stámiliónoch či miliardách riadkov dát začína byť problém spúšťať aktualizáciu už aj 1x denne. A ak chcete mať dáta v reportoch aktuálne, tak máte v podstate 2 možnosti – buď použiť režim DirectQuery, alebo nastaviť, aby sa namiesto klasickej aktualizácie dát spúšťala inkrementálna aktualizácia dát.
Obe možnosti majú svoje klady aj zápory. Režim DirectQuery umožňuje analýzu neobmedzeného množstva dát v Power BI, ale na druhej strane vyžaduje viaceré dodatočné kroky na optimalizáciu výkonu. Či už na strane databázy alebo v Power BI. A inkrementálna aktualizácia dát sa dá nastaviť relatívne jednoducho, ale na druhej strane ste obmedzení limitmi pre maximálnu veľkosť dátového modelu v cloude či inými obmedzeniami cloudu. Keď si to však zvážime z pohľadu jednoduchosti nastavenia, tak inkrementálna aktualizácia dát jednoznačne vyhráva. A teraz sa na ňu pozrieme.
Inkrementálna aktualizácia dát
Inkrementálna aktualizácia dát v Power BI slúži na to, aby ste pri každej aktualizácii dát nemuseli do dátového modelu importovať všetky dáta znova a znova. A aby ste doňho mohli “dohrať” iba nové a zmenené dáta. Čo je oveľa efektívnejšie ako plná aktualizácia dát. Pretože vo väčšine databáz sa už historické dáta buď vôbec nemenia, alebo sa menia len veľmi zriedkavo. Vo všeobecnosti sa viac ako 90% dát v databázach po nejakom čase už nemení. A preto je teda úplne zbytočne ich znova a znova importovať do dátového modelu. A stačí importovať iba tú najnovšiu časť dát, v ktorej býva – až na občasné výnimky – 100% všetkých zmien od poslednej aktualizácie dát.
Inkrementálna aktualizácia dát vyžaduje licenciu Power BI Pro alebo Power BI Premium – či už klasické Power BI Premium, alebo Power BI Premium per user. A samozrejme, Power BI Premium poskytuje zopár užitočných drobností navyše. Funguje to aj s predplatným Power BI Embedded.
Inkrementálna aktualizácia dát – požiadavky
Inkrementálna aktualizácia dát sa nastavuje čiastočne v Power Query, a čiastočne v dátovom modeli. Pre každú tabuľku osobitne, tam kde to potrebujete. Váš dátový zdroj by mal podporovať query folding, čiže posúvanie operácii Power Query do dátového zdroja, ale nie je to nevyhnutná podmienka. Je to kvôli tomu, aby si cloud vedel vyžiadať od dátového zdroja iba odfiltrované dáta na konkrétny časový úsek – ten, ktorý chcete inkrementálne aktualizovať. A “foldovateľný” by mal byť celý dotaz Power Query pre danú tabuľku, na ktorej to nastavujete.
Druhou požiadavkou je to, aby daná tabuľka mala stĺpec typu “Dátum a čas”, podľa ktorého sa budú zisťovať a filtrovať riadky pre inkrementálnu aktualizáciu dát. Väčšinou použijete stĺpec, v ktorom sa nachádza buď dátum a čas vytvorenia daného záznamu, alebo – ideálne – dátum a čas poslednej zmeny záznamu.
Treťou požiadavkou je vytvoriť 2 konkrétne parametre v Power Query, a použiť ich konkrétnym spôsobom na filtrovanie danej tabuľky.
Prvý blok nastavení v Power Query
V prvom kroku si otvoríme Power Query, a pridáme doňho tabuľku, pre ktorú chceme nastaviť inkrementálnu aktualizáciu dát. V tomto článku použijeme ako dátový zdroj SQL Server, ktorý samozrejme podporuje query folding. Naša tabuľka bude vyzerať povedzme takto:
Potom v hlavnom menu klikneme na tlačítko “Spravovať parametre”:
…a vytvoríme 2 parametre s názvom “RangeStart” a “RangeEnd”. Tieto musia byť typu “Dátum a čas”, a musíte im nastaviť nejakú predvolenú hodnotu:
Akú hodnotu tam nastavíte, je v podstate zajedno. Power Query ich síce použije neskôr na načítanie údajov iba v rámci časového rozsahu týchto 2 parametrov, aj do dátového modelu, ale nemusíte sa báť, že by vám to nenačítalo tie správne dáta. Pri prvej automatickej aktualizácii dát v cloude si cloud potiahne najprv všetky dáta. A až pri ďalších aktualizáciách použije inkrementálnu aktualizáciu dát, pri ktorej prepisuje hodnoty týchto parametrov pre každé aktualizované obdobie. Takže aby ste nemuseli dlho čakať pri nastavovaní, tak tam zadajte tie dátumy a časy tak, aby to vyfiltrovalo iba nejakú malú vzorku dát. Buď iba rozsah 1 dňa, alebo iba 1 hodiny. Aby ste mali na čom pracovať a vidieť priebežné výsledky.
Potom je potrebné na tej tabuľke nastaviť špeciálne filtrovanie nad tým dátumovo-časovým stĺpcom, podľa tých parametrov RangeStart a RangeEnd. Rozbalíme teda autofilter nad našim dátumovo-časovým stĺpcom v tabuľke, na nastavíme vlastný filter:
…na takúto podmienku:
To nám samozrejme odfiltruje riadky v tejto tabuľke na časový rozsah tých 2 parametrov. Nakoniec stačí už len overiť, že funguje query folding pre posledný krok v Použitých krokoch napravo – že je povolená položka “Zobraziť natívny dotaz”:
…a ak je, tak prvú časť nastavení v Power Query máme hotovú. A ak query folding nefunguje, tak to nie je nevyhnutne zlé – len treba zabezpečiť potom alternatívne riešenie, aby to sťahovalo čo najmenšie množstvo dát (ako napr. pri použití inkrementálnej aktualizácie dát pre CSV súbory – viď koniec článku).
Dáme teda tlačítko “Zavrieť a použiť”, aby sme odišli z editora Power Query, a načítame tento kus tabuľky ako každú inú tabuľku do dátového modelu.
Druhý blok nastavení v Power BI Desktope
V ďalšom kroku potrebujeme povoliť inkrementálnu aktualizáciu dát v dátovom modeli. Keď sme teda “naspäť” v Power BI Desktope, tak prejdeme teda do panelu Polia napravo, klikneme pravým tlačítkom na názov našej nastavovanej tabuľky, a vyberieme položku “Prírastkové obnovenie” (opäť skvelý strojový preklad):
Potom sa otvorí okno, kde sa dá už konečne zapnúť inkrementálna aktualizácia dát:
V tomto okne treba nastaviť minimálne tieto 3 nastavenia:
- Zapnúť prepínač s názvom “Prírastkové obnovenie” – čo nám zapne inkrementálnu aktualizáciu dát pre túto tabuľku,
- Nastaviť, akú dlhú históriu dát budeme mať uloženú v tejto tabuľke v dátovom modeli,
- Nastaviť, aké posledné obdobie sa bude aktualizovať pri každej inkrementálnej aktualizácii dát.
V bode 2) nastavujeme, pre aký časový rozsah budeme mať v tejto tabuľke dáta. Všetko staršie sa pri každej inkrementálnej aktualizácii dát automaticky vymaže. Na obrázku vyššie sme zadali obdobie “2 roky”. Nezmaže to však dáta staršie ako 2 roky od dnešného dňa dozadu. To nastavenie znamená, že v tabuľke ostanú iba dáta za posledné celé 2 ukončené roky, plus dáta za posledný nedokončený rok. Ak teda máme dnes napr. 13.5.2021, tak v tej tabuľke to bude držať dáta od 1.1.2019 po dnes – čiže posledné 2 ukončené roky 2019 a 2020, plus nedokončený rok 2021. A takto to funguje nielen pre roky, ale aj pre všetky obdobia v ponuke tej roletky. Inkrementálna aktualizácia dát ponechá v tabuľke všetky dáta za zadaných ukončených celých X období, plus za posledné nedokončené obdobie do dnes.
V bode 3) nastavujeme, aké posledné obdobie sa bude aktualizovať pri každej inkrementálnej aktualizácii dát. Na obrázku vyššie sme zadali “3 dni”, čo znamená, že pri každej aktualizácii dát si to stiahne dáta za posledné ukončené 3 dni, plus za aktuálny neukončený deň. Podobne to platí aj pre ostatné typy období v ponuke roletky. Keď zadáme X období, tak si to načíta dáta za posledných ukončených X období, plus za aktuálne neukončené obdobie. Ak už boli v dátovom modeli dáta za toto obdobie, tak ich odtiaľ vymaže (používa to partície SSAS Tabularu), a až potom tam naleje tieto nové/zmenené dáta.
Ostatné nastavenia slúžia na nastavenie pokročilejších scenárov. Viac sa o nich dočítate v oficiálnej dokumentácii.
Následne už stačí len potvrdiť nastavenia tlačítkom “Použiť všetko”, a máme to nastavené.
V poslednom kroku treba nasadiť/vypublikovať report do cloudu. A ak sme ešte nenastavili automatickú aktualizáciu dát, tak ju nastavíme klasickým spôsobom.
Ako prebieha inkrementálna aktualizácia dát v cloude Power BI
Ak sme práve nastavili inkrementálnu aktualizáciu dát v reporte Power BI, resp. pre dátový model Power BI, tak pri prvej automatickej aktualizácii dát to natiahne do dátového modelu všetky dáta do všetkých tabuliek. Takže “tenkrát poprvé” to môže trvať dlho.
Ak už zbehla aspoň jedna úspešná aktualizácia dát od momentu nastavení vyššie, tak následné aktualizácie dát už budú bežať ako inkrementálne. A samozrejme iba na tých tabuľkách, kde sme to nastavili. Na ostatných tabuľkách budú bežať stále celý import dát.
Keď sa spustí inkrementálna aktualizácia dát, tak to vygeneruje niekoľko SQL dotazov voči dátovému zdroju. Alebo dotazov v jazyku dátového zdroja, ak ide napr. o protokol OData. To je záležitosť implementácie query foldingu v danom konektore (ak tam teda vôbec nejaký je). My budeme odteraz pre zjednodušenie odkazovať na SQL dotazy. Keď si to zdebugujete, tak to vygeneruje 1 SQL dotaz pre každé jedno obdobie v bode 3) vyššie, plus 1 SQL dotaz pre aktuálne obdobie. Čiže ak sme nastavili, že chceme inkrementálne aktualizovať dáta za 3 dni, tak to spustí 1 SQL dotaz pre každý z tých 3 dní, plus 1 SQL dotaz pre aktuálny deň.
Do filtrovacej podmienky, ktorú sme nastavili v Power Query, dá cloud hodnoty z parametrov RangeStart a RangeEnd, postupne sa zvyšujúcich pre každý deň osobitne. Tak si to vie “vypýtať” od databázy dáta len za ten konkrétny deň, resp. obdobie. Čiže neberie to 1 dotazom za celé 3 dni, ale ide to postupne deň po dni, resp. 1 obdobie po 1 období.
A samozrejme platia rovnaké pravidlá, ako pri klasickej aktualizácii dát. Ak sa to podarí celé, tak užívateľ vidí v reporte od toho okamihu aktualizované nové dáta. A ak sa to nepodarí, tak užívateľ uvidí pôvodné neaktualizované dáta. Monitorovanie, debugovanie a riešenie problémov sa robí úplne rovnako, ako pri klasickej aktualizácii dát.
Na záver
Takto teda funguje inkrementálna aktualizácia dát v Power BI. Toto je však len základné nastavenie. Ako ste videli, sú tam ešte ďalšie nastavenia, ktoré sa dajú nastaviť v pokročilejších scenároch. Každopádne, ak nepracujete s terabajtmi dát, tak by vám mala stačiť aj takáto základná konfigurácia. Pretože aj tá dokáže dosť veľa 🙂 A ak chcete vedieť, ako sa v Power BI nastavujú pokročilejšie scenáre, napríklad inkrementálna aktualizácia dát pre CSV súbory alebo súbory Excelu, alebo ako sa to dá využiť pre ukladanie historických snapshotov dát, tak si pozrite webinár na tomto odkaze.
Autor, tréner a expert na Power BI, PowerPivot a jazyk DAX. Založil som tento web, aby som pomohol dostať Power BI do širšieho povedomia, a aby som ľuďom ukázal, že moderný a komplexný reporting ide vyriešiť rýchlo a jednoducho. Po nociach vzývam Majstra Yodu a tajne plánujem ovládnutie vesmíru.