Aby bylo možné v Power BI sestavovat reporty a prezentovat story, je potřeba nejprve získat data z datových zdrojů. Power BI má zabudovanou širokou paletu konektorů, z nichž si dnes vybrané blíže předtavíme. Na seznam všech konektorů je možné se dostat přes kartu Home -> Get data -> More... viz obr. 1.
Nejtriviálnějším datovým zdrojem pro zpracování je tzv. plochý soubor, který logicky odpovídá jedné databázové tabulce. Typickým zástupcem této skupiny jsou CSV (comma separated values) soubory, které na každém řádku mají prostým textem zapsán jeden záznam a jednotlivé hodnoty jsou, jak napovídá název, oddělené symbolem čárky. Jako oddělovač však může být obecně zvolen libovolný symbol, byť sémanticky nekorektně, a je pouze na uživateli, aby použitý symbol v datech správně rozpoznal. Občas se používá přípona TSV pro soubory, ve kterých je oddělovačem tabulátor. V české lokalizaci se velmi často setkáte se symbolem středníku jako oddělovačem (z důvodu používání čárky ve významu desetinného oddělovače v číslech).
Po výběru File -> Text/CSV z nabídky konektorů (obr. 1) bude uživatel dialogovým oknem vyzván k výběru požadovaného souboru. Dialog je klasické okno průzkumníka a lze se tedy dostat například i na síťové disky, případně zařízení na lokální síti. Po výběru jendoho souboru dojde k automatické detekci jeho struktury. V dialogovém okně aplikace nabídne výpis exportovaných názvů atributů a několik prvních zpracovaných řádek. Pokud nedošlo ke správnému parsování souboru, je možné změnit přes možnosti v horní části použitou znakovou sadu, použitý oddělovací symbol a způsob detekce datových typů. Při změně nastavení parsování se náhled přegeneruje stiskem tlačítka Load. Následné stisknutí tlačítka Load provede načtení dat do aplikace.
Jelikož je Power BI jakousi nadstavbou nad jádrem aplikace MS Excel, snad nepřekvapí, že načítání sešitů z této aplikace je poměrně jednoduché. Po volbě File -> Excel a výběru příslušného souboru se zobrazí dialogové okno se seznamem jednotlivých datových listů sešitu a jejich náhled. Uživatel zaškrtne checkbox u listů, které chce importovat jako jednotlivé tabulky.
Trochu divokou kartou je možnost parsování PDF souborů File -> PDF. PDF soubor je typicky spíše dokument obsahující vysázený text a množství vložených objektů - tabulky, obrázky. Právě tabulky se z PDF souboru snaží příslušný parser získat, ale z mé zkušenosti je úspěšnost relativně malá. Často dojde k různým posunům v datové matici nebo k načtení řady zbytečných prázdných hodnot. Podobně jako při načtení Excelovského sešitu má uživatel k dispozici seznam detekovaných tabulek s jejich náhledem a má možnost si jejich podmnožinu naimportovat do projektu.
Pro vyzkoušení: převodník NUTS kódů území.
Aplikace Power BI nabízí překvapivě pokročilý způsob zpracování JSON souborů. Jedná se o soubory s hierarchickou strukturou vystavěnou pomocí množiny klíč-hodnota dvojic. Hodnotou může být text, číslo, pravdivostní hodnota nebo vnořený JSON objekt. Hodnota může být prostá, nebo násobná (array). Nejpalčivější problém při zpracování tohoto typu souboru je zploštění hierarchické struktury do 2D tabulky.
Po načtení souboru se rovnou otevře transformační dialog (obr. 2), který by se u ostatních datových zdrojů otevřel při stisknutí tlačítka Transform Data namísto Load. Detailní představení tohoto dialogu bude v cvičení tématicky zaměřeném na tranformaci a čištění dat. V případě práce s JSON souborem je podstatné, že v některých hodnotách jsou barevně zvýrazněná slovo Record a List, což značí, že na tomto místě je vnořený JSON objekt, resp. array.
Pro konkrétní ukázku použiji soubor ladders-eu-231042.json obsahující informace získané z API pro hru Starcraft II, popisující 100 herních účtů. Kliknutím na klíčových slov List v řádku team dojde k zanoření v datech do množiny 100 záznamů. Toto místo označíme jako kořen budoucí tabulky volbou možnosti To Table na horní kartě (obr. 2, 1)). Po krátkém zodpovězení, jak řešit vícenásobně hodnoty (nejsou) a extra atributy (nejsou), se změní horní pás karet a v datech je transformovaný dataset. V hlavičce datasetu se u sloupce Column1 objevil ikona, která po stisknutí nabízí seznam společných atributů, které jednotlivé záznamy mají. Z nich si lze vybrat ty, jenž chceme následující projekcí zahrnout do datasetu. Pro zjednodušení vybírám current_rank (ordinální číslo), wins (počet výher), rating (ELO hodnocení) a member (uzel s metadaty o hráči). Member má charakter seznamu, nicméně vždy je v něm pouze jeden JSON objekt. V případě klíčového slova List je v ikonce v záhlaví sloupce možnost Expand to New Rows, která provede operaci kartézkého součinu prvků množiny s přílušnou řádkou, a Extract Values, která konkatenuje hodnoty do jednoho řetězce. V našem případě vyhovuje první možnost. Nyní je možné obdobně jako v prvním kroku nad stejným sloupcem vybrat podmnožinu atributů, které chceme projektovat. Opakováním těchto operací lze projektovat například uživatelské jméno hráče Column1.member.legacy_link.name a herní rasu, za kterou hraje Column1.member.played_race_count.race. (Obr. 3)
Power BI nabízí mimojiné i možnost zpracovat určitou staticky definovanou složku. Příslušná volba se nachází pod File -> Folder. Po výběru složky se zobrazí dialog s tabulkou obsahující metadata souborů obsažených v dané složce. Všimněte si, že jeden z atributů je datového typu Record a lze ho transformovat stejným způsobem jako JSON objekt. Kromě standardních možností Load a Transform je v tomto případě nabízena ještě možnost Combine. Touto cestou je možné, pokud datové soubory ve složce jsou homogenní, spojit obsah souborů do jenoho logického celku. Tato možnost je nicméně dostupná i jinou cestou přes Power Query, viz následující cvičení.
Zajímavou možností je zpracovávat odpověď na HTTP dotazu na veřejné API rozhraní služeb. Výsledky často mívají podobu JSON souboru, který lze transformovat postupem výše. Pokud neexistuje specifický konektor jako např. pro GitHub, Zendesk nebo Google Analytics, lze použít obecný webový konektor Other -> web.
Ve volbě basic je možné zadat pouze URL adresu API endpointu. Po přepnutí na advanced je mimojiné možné specifikovat hlavičku požadavku. Pro komplexnější nastavení authentikace je potřeba využít dialog Data Source Settings (viz Změna konfigurace konektorů v projektu).
Stejným způsobem se lze pokusit o načtení dat přímo z webové stránky. Tato funkcionalita je relativně nespolehlivá, podobně jako PDF konektor. Vypozoroval jsem, že logika parseru spočívá v nalezení Table tagu na stránce a jeho vytěžení. Přístup je nepoužitelný u dynamicky načítaných stránek (načítání tabulky přes AJAX). Pokud je tabulka obalena JS logikou například pro stránkování, dojde pouze k načtené první (defaultně zobrazené) stránky.
Pro vyzkoušení můžete použít:
Poslením představeným datovým zdrojem je zástupce relačních databází PostgreSQL. Power BI nabízí konektor k řadě databází, např. Oracle, MySQL, MS SQL Server. Nicméně při pokusu o použití na univerzitních databázích, ani na cloudové službě Heroku se mi nepodařilo navázat úspěšně spojení. Chybová hláška se odkazovala na problém s certifikáty.
Na Stack Overflow jsem nalezl alternativní řešení, jak se k univerzitní PostgreSQL (přihlašovací informace oficiálně na předmětu DB2) databázi připojit. Řešení spočívá v nainstalování ODBC databázového driveru a použití konektoru Other -> ODBC. V dialogu je poté zvolen None jakožto Data source name a v Advanced options se do Connection Stringu vloží řetězec Driver={PostgreSQL Unicode};Server=DB_IP_ADRESA. V následujícím dialogu je nutné upřesnit uživatelský účet a heslo k databázi a dále vložit upravený Credential Connection String PORT=5432;DATABASE=DB_NAME;POOLING=True;MINPOOLSIZE=1;MAXPOOLSIZE=20;HOST=DB_IP_ADRESA;COMPATIBLE=2.2.3.0;USER ID=DB_LOGIN;PASSWORD=DB_HESLO;SSLMODE=require. Pokud bylo vše vyplněno správně, objeví se seznam tabulek daného uživatele a stejně jako při importu z Excelovského sešitu lze vybrat jejich podmnožinu. Při importu se automaticky detekují relace mezi entitami a zapíší se i do datového modelu v Power BI.
Stejným postupem lze kromě celých databázových tabulek importovat jen výsledek libovolného SQL Select dotazu, který bude zadán v Power BI při vytváření spojední v textovém poli pod Connection Stringem.
Pro načtené soubory (nebo obecně data získaná nějakým konektorem) si Power BI uchovává metadata o jeho zpracování, tedy umístění a způsob parsování. Pokud dojde ke změně dat ve vstupním souboru, projeví se to při dalším refreshi v Power BI. Negativním důsledkem toho je, že není dobré soubor přemisťovat nebo přejmenovávat. Došlo by pak k chybě při refreshi a tím by se předčasně ukončil celý proces občerstvení dat. Nepodařilo se mi zjistit, jestli je možné toto provázání se zdrojovým souborem nějakým způsobem potlačit a uchovat si v projektu dále neměnnou kopii dat.
Pokud by došlo k situaci, že je nutné aktualizovat odkaz na soubor nebo jinak změnit nastavení použitých konektorů, je k dispozici přílušný dialog na kartě Home -> Transform Data (roleta) -> Data Source Setting. Zde je přehled všech konektorů a tlačítky Change Source a Edit Permissions lze změnit uložené nastavení.