18. května 2018

Power BI – Inkrementální plnění

Po konferenčním maratonu další článek o Power BI. Rozcestník se seznamem najdete zde http://www.neoral.cz/2016/10/power-bi-rozcestnik.html
V poslední aktualizaci Power BI Desktopu přibyla možnost nastavit inkrementální plnění u importu dat. Kdo aktualizujete větší objemy dat, jistě byste tuhle možnost ocenili.
Místo pěti let aktualizovat jen poslední den/týden.
Jak to funguje? Konfigurace probíhá v Power BI Desktopu. Ten ale naplnit jen přírůstek neumí. Počítá se totiž s automatizací v Power BI Service (powerbi.com)
Má to jednu vadu na kráse a sice funguje to jen v Power BI Premium (nabídka pro Enterprise zákazníky, psal jsem zde http://www.neoral.cz/2017/05/power-bi-premium-zmeny-v-power-bi-free.html).
Power BI Premium je cenově hůře dostupné, než licence Pro (fungující ve sdílené infrastruktuře, které by zrovna inkrementální plnění pomohlo).
K demonstraci použiji své oblíbené demo s kurzovním lístkem ČNB http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/rok.txt?rok=2018
V prvé řadě si nachystám dataset bez inkrementu
Důležité je, aby sloupec datum měl datový typ Date/Time pro jiné datové typy zatím nefungují a to ani pro Date.
Kód v „M“
let
   Source = Csv.Document(Web.Contents("http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/rok.txt?rok=2018"),[Delimiter="|", Columns=34, Encoding=65001, QuoteStyle=QuoteStyle.None]),
   #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
   #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Promoted Headers", {"Datum"}, "Attribute", "Value"),
   #"Changed Type with Locale" = Table.TransformColumnTypes(#"Unpivoted Other Columns", {{"Datum", type datetime}}, "cs-CZ"),
   #"Changed Type with Locale1" = Table.TransformColumnTypes(#"Changed Type with Locale", {{"Value", type number}}, "cs-CZ"),
   #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type with Locale1", "Attribute", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Attribute.1", "Attribute.2"}),
   #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Attribute.1", Int64.Type}, {"Attribute.2", type text}}),
   #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Attribute.1", "Pocet"}, {"Attribute.2", "Mena"}, {"Value", "Kurz"}})
in
   #"Renamed Columns"
Dále je potřeba v Desktopu povolit inkrementy v Preview Features
Dále nad DateTime sloupcem vytvoříme between filtr a vybereme odkaz na parametr
Parametry nachystáme 2. Mají pevně předepsaná jména kvůli rozpoznání ze strany Power BI service a musí se jmenovat RangeStart a RangeEnd.
Datový typ opět Date/Time. Current value je hodnota pro iniciální load
Filter vypadá potom následovně
Následuje pravé tlačítko na dotaz a výběr Incremental Refresh
Vyplníme dialog pro inkrementální politiku. Kolik dat načítat celkem a jaký časový údaj se má brát jako přírůstek
Zbývá nasadit do Power BI Premium tenantu. Standartní workspace bez dedikované kapacity nejde vybrat.
Refresh na straně service se nastavuje standartně. Jen data source credentials (uživatelské jméno, heslo, nebo anonymní přístup jako v případě webu).
A čas, kdy to má běhat.
Závěr

Inkrementální refresh pomůže hlavně aktualizacím větších datových modelů, pokud historie je již neměnná. Jen škoda toho licencování.
Ale třeba se časem dočkáme i u Pro licencí.