Creating a great data model is one of the most important tasks that a data analyst can perform. By doing this job well, you help make it easier for people to understand your data, which will make building valuable Power BI reports easier for them and for you.
If you import all necessary tables from a sales database, but the total table count is 30 tables, the user will not find that intuitive.
Následující text je pojat formou postupného rozšířování příkladu z předchozích částí. Jako výchozí bod je načtená tabulka osoby, ve které jsou jednolitlivé záznamy o pacientech s COVID-19 v ČR, a jsou vybrány sloupce (Datum, věk, pohlaví, LAU kód okresu). Druhou načtenou tabulkou je číselník NUTS/LAU kódů z PDF spojený do jedné tabulky.
Pro další práci potřebuji převést číselník do takového stavu, že primárním klíčem bude sloupec s LAU kódy obsahující pouze okresy, resp. kraje. U každého bude informace o jeho názvu a názvu nadřazeného kraje. Prvním krokem je tedy odstranění nepotřebných sloupců 1 (staré kódy), 3 (NUTS - stát), 4 (NUTS - země), 5 (NUTS - region). Následujícím krokem je odfiltrování záznamů, které neodpovídají okresu nebo kraji (to jsou takové, které nemají formát CZxxx nebo CZxxxy). Nejjednoduším kritériem bude počet znaků kódu nicméně tato podmínka není v nabízeném seznamu filtrů. Bude potřeba založit nový odvozený sloupec, Add Column -> Custom Column
, který naplníme vhodným výrazem. Pokud bychom v zobrazeném dialogu napsali "length", zobrazí se seznam volání, v kterých bychom mohli snadno najít "Text.Length()". Kliknutím do seznamu atributů se vloží do editoru odkaz na daný sloupec a získáme finální vzorec = Text.Length([Column2])
. Po strvzení nad nově vytvořeným sloupcem volíme možnost filtrování hodnot 5 a 6.
V dalším kroku potřebujeme rozkopírovat název krajů do příslušných záznamů okresů. Abychom si ulehčili práci je vhodné použít nástroj Transform -> Fill -> Down
, který za každou prázdnou buňku doplní hodnotu nejbližší buňky s existující hodnotu ve stejném sloupci v řádku nad ní. Aby toto v našem případě zapracovalo, je potřeba nahradit prázdný string za klíčové slovo "null" pomocí Transform -> Replace Values
.
Posledním problémem je neaktuálnost dat. Kódy CZ061x a CZ062x již neexustují a byly nahrazený kódy CZ063x a CZ064x. Jeslikož nejsou u nástroje Replace Values k dispozici regulární výrazy, je potřeba pomoci si vytvořením odvozeného sloupce a volbou vhodného volání. Add Column -> Custom Column
založí nový sloupec a v editoru lze s trochou štěstí přes našeptávaš najít volání "Text.Replace(input, old, new)", které funguje na substringy. Vhodnou volnou vzorce =Text.Replace(Text.Replace([Column2], "CZ062", "CZ064" ), "CZ061", "CZ063")
docílíme nahrazení problematických kódů.
Spíše formální úpravou je odstranění původního sloupce s NUTS kódem, místo kterého máme nově vytvořený sloupec. Všimněte si, že tato operace by nebyla možná například v Excelu, ve kterém je nutné zachovat původní data, se kterými vzorce pracují. V případě Power BI se vždy vykonává celá sekvence transformací a tak v potřebný čas jsou zdrojová data k dispozici. Je vhodné sloupce smysluplně pojmenovat.
Ze znalosti dat víme, že mezi načtenými tabulkami existuje logická vazba. Konkrétně se jedná o NUTS/LAU kód, který se vyskytuje v obou z tabulek. Abychom tuto expertní znalost předali Power BI, je potřeba přejít do režimu Model (3. ikona v levém sloupci v hlavním Power BI oknu). Zde vidíme schema ERA modelu. Pro zavedení relace je potřeba přetáhnout název atributu z jedné tabulky na příslušný atribut v tabulce druhé. Většinou se tímto relace vhodně nastaví. Manuálně lze v případě problémů změnit zvolené atributy a kardinalitu relace.
Po zavedení relace je možné ve vizualizaci použít atributy z obou tabulek a příslušný join proběhne na pozadí. Lze tedy například vizualizovat počet případů dle názvu kraje či okresu.
Pozn. na plátně s ERA modelem a pravé části hlavního okna se zobrazují i pomocné tabulky, s kterými se nikdy nebude pracovat, ale je potřeba je uchovat kvůli možnosti znovu načíst data ze zdrojů. Je možné takové tabulky skrýt kontextovou volbou Enable load
nad příslušnou tabulkou v Power Query Editoru.
Atributy kraj a okres mají v tomto případě zvláštní vzájemný význam - hierarchii. Podobně jako Power BI vytváří automaticky hierarchické členění pro atributy typu datum (rok, kvartál, měsíc, den v měsíci), lze manuálně podobnou hierarchickou strukturu vytvořit i pro tento případ. Vyvoláním kontextové nabídky nad hierarchicky nejvyšším atributem (v tomto případě kraj) a výběrem New Hierarchy
se založí pseudoatribut ve stejné tabulce, do kterého lze tažením přiřadit hierarchicky nižší atributy.
Pokud vytvořený pseudoatribut použijeme ve vizualizaci, v její horní části se zobrazí několik nových ikon. První z nich zapíná tzv. drill down mód, což je běžná OLAP operace. V tomto režimu se po kliknutí do vizualizace provede drill down na zvolené podmnožině dat. Například lze takto detailněji zkoumat rozdělení pacientů po jednotlivých okresech Plzeňského kraje. Alternativou k tomuto (ikona dvou paralelních šipek dolů) je hierarchicky sestoupit u všech hodnot, nikoliv pouze u vybrané.
Patrně jste ve vizualizaci zaznamenali výskyt sloupce "blank" při vizualizaci dle krajů či okresů. Jedná se o problém v datech, který nehledě na to, které strana má morální odpovědnost za nesrovnalost, je nutné námi vyřešit. Konkrétní situace je, že v datech o COVID se udává kód CZ0100 ve smyslu "okres Praha" a tento kód není číselníkem respektovaný. Ten uznává pouze kódy CZ0101, CZ0102,... pro městské části Praha 1, Praha 2, ... Jelikož nemůžeme jednoduše v PDF souboru zavést kód CZ0100, ani není možné rozlišit v COVID datech, do jaké městské části nakažený spadá, je nejpřimočařejší operace založit novou tabulku 1x3 obsahující identické názvy sloupců jako číselník a jednu řádku popisující CZ0100 Power Query Editor -> Home -> Enter Data
. Po vytvoření je nutné tabulku připojit k stávajícímu číselníku Power Query Editor -> Home -> Append Queries
.
Při řešení datových skladů často dochází, mnohdy spontánně, k tvorbě era modelu s paradigmatem hvězdicového, resp. vločkového schematu (viz přednášky). V tomto paradigmaru existuje jedna centrální tabulka faktů, které já obklopena tabulkami dimenzí. V našem případě roli faktové tabulky zastupuje seznam COVID případů a první z dimenzních tabulek je dimenze lokační - číselník krajů/okresů. Pokud bychom chtěli pokračovat s modelováním v tomto paradigmatu, je vhodné agregovat data v tabulce faktů. Zde se konkrétně nabízí možnost uvádět souhrnné počty pacientů dle dne, věku, pohlaví a okresu. Transofrmaci do této podoby je možné provést vhodným voláním Power Query Editor -> Home -> Group By
, jenž bylo představeno již dříve.
Druhým krokem by bylo převedení hodnot datumu, věku a pohlaví jako reference do dimenzních tabulek.
Běžným řešením bývá pro projekt vytvořit jednu sdílenou dimenzní tabulku obsahující jako záznamy jednotlivé dny a příslušná metadata k nim, jako například o jaký kvartál se jedná, jestli to byl víkend nebo svátek. Některé z těchto metadat jsou implicitně dostupné v Power BI samotnou volbou datového typu datum. Pro ilustraci vygeneruji kalendář s informaci o tom, zda daný den byl víkendový, což jako doménoví experti tušíme, že může být v analýze těchto dat významné.
V hlavní obrazovce Power BI -> Modeling -> New Table
je možnost založit novou tabulku. V příkazovém řádku je potřeba definovat, o jakou tabulku se jedná. Vhodným pozorováním nabízených funkčních volání (případně konzultací manuálu) lze nalézt podezřele pojmenovanou funkci "Calendar()". Ta slouží k vygenerování tabulky o jednom sloupci, ve kterém bude posloupnost datumů dle volby uživatele. Konkrétně příkaz = CALENDAR("2020-01-01", "2020-12-31")
vygeneruje 366 záznamů odpovídající datům v roce 2020 a je možné s tabulkou dále pracovat. Při volbě New Column je možné zadat vzorec podobný excelovému =WEEKDAY([Datum], 2) > 5
, který vrátí pravdivostní hodnotu pravda pro soboty a neděle.
Po nastavení relace v schematu je možné s atributem víkend pracovat ve vizualizacích.
U věků bývá častou operací zařazení dotyčného do nějaké věkové skupiny. Datový pojem pro operaci vygenerování jakýchci nadmnožin, do kterých přísluší rozsah hodnot, je binning (více později v semestru). V Power BI prostředí lze dosáhnout tohoto členění v podstatě vytvořením převodní tabulky.
Prvním krokem je založení nové tabulky Power BI -> Modeling -> New Table
a pomocí volání funkce GENERATESERIES(0, 120, 1)
lze poměrně jednoduše naplnit sloupec nově vytvořené tabulky posloupností čísel 0-120 s inkrementem 1. Přes kontextové menu nad atributem nově vytvořené tabulky v pravé části Power BI rozhraní lze volbou New Group otevřít dialog pro nastavení způsobu binování numerických hodnot. Lze volit konkrétní šířku binu, nebo počet binů, které se mají vygenerovat. Po vygenerování se jako hodnoty v novém atributu použijí dolní hranice binů.