V Power BI je po instalaci automaticky zapnutá funkcionalita nazvaná Automatické datum a čas. Pokud tuto funkcionalitu v nastavení nevypneme, Power BI vytvoří pro každý sloupec ve formátu DATE nebo DATETIME navázanou kalendářní tabulku. V tomto příspěvku si vysvětlíme, jak se pracuje s automaticky vytvořenou kalendářní tabulkou a proč je lepší používat vlastní kalendářní tabulku.
Pokud v Power BI vybereme na kartě "Soubor" volbu "Možnosti a nastavení" a otevřeme dialogové okno "Možnosti", tak na záložce "Načtení dat" je zaškrtávací políčko nazvané "Automatické datum a čas".
Pokud je toto políčko zaškrtnuté, Power BI vytvoří automaticky pro každý sloupec ve formátu DATE nebo DATETIME skrytou kalendářní tabulku. U aktuálního souboru můžeme tyto automaticky vytvořené kalendářní tabulky odstranit odškrtnutím tlačítka "Automatické datum a čas" na záložce "Načtení dat" v sekci "Aktuální soubor", viz obrázek výše.
Tuto funkcionalitu můžeme vypnout také pro všechny Power BI modely, které budeme teprve tvořit, a to v sekci "Globální", opět na záložce "Načtení dat".
Pokud odškrtneme možnost "Automatické datum a čas pro nové soubory", nebudou se nám tyto kalendářní tabulky automaticky vytvářet v nových modelech.
V následující části příspěvku si vysvětlíme, co jsou to automatické kalendářní tabulky vytvořené v Power BI, jak se s těmito tabulkami pracuje a proč je většinou lepší mít vlastní kalendářní tabulku.
Automaticky vytvořené kalendářní tabulky v Power BI
V této části příspěvku budeme pracovat s Power BI souborem, ve kterém je zapnutá funkcionalita "Automatické datum a čas".
V modelu jsou navíc vytvořena dvě měřítka, měřítko [Prodeje přes internet] a měřítko [Prodeje přes prodejce].
Měřítka:
Pokud se v Power BI podíváme na záložku Zobrazení modelu, uvidíme následující diagram.
Na obrázku výše můžeme vidět pět tabulek, které pocházejí ze cvičné databáze Adwenture Works. Jedná se o dvě faktové tabulky, a to tabulky 'Internet Sales' a 'Reseller Sales', a tři dimenzní tabulky, tabulky 'Product', 'Reseller' a 'Customer'.
V použitém modelu nemáme vlastní kalendářní tabulku, a v diagramu modelu zobrazeném v Power BI nevidíme ani automaticky vytvořené kalendářní tabulky.
Jak bylo uvedeno v úvodu, pokud je v Power BI zapnutá funkcionalita "Automatické datum a čas", Power BI vytvoří automaticky pro každý sloupec ve formátu DATE nebo DATETIME jednu kalendářní tabulku.
Tyto automaticky vytvořené tabulky sice nevidíme v diagramu modelu v Power BI, ale můžeme je vidět například v DAX Studiu, v panelu Metadata modelu.
Každá z těchto kalendářních tabulek má stejnou strukturu.
Jedinou "nepřímou" informaci o existenci těchto tabulek, kterou máme k dispozici přímo v Power BI, je automaticky vytvořená hierarchie u každého sloupce ve formátu DATE nebo DATETIME.
Sloupce z této hierarchie, z hierarchie vytvořené pro sloupec 'Internet Sales'[Order Date], můžeme vložit do vizuálu a zobrazit si například částky za prodeje produktů přes internet.
Na následujícím obrázku můžeme vidět roky a čtvrtletí v řádcích, a v hodnotách měřítko [Prodeje přes internet].
Pokud bychom chtěli přistupovat ke sloupcům z automaticky vytvořených kalendářních tabulek v DAX výpočtech, musíme použít specifickou syntaxi, která vypadá následovně.
Ke sloupcům z kalendářní tabulky vytvořené pro každý DATE nebo DATETIME sloupec přistupujeme přes tečku za názvem sloupce, pro který je tato tabulka vytvořena. Pokud bychom chtěli vytvořit například procentuální podíl prodejů ve čtvrtletí vůči prodejům za celý rok, můžeme použít následující výpočet.
Měřítko:
Pokud si nové měřítko vložíme do původního vizuálu s roky a čtvrtletími v řádcích, dostaneme opravdu procentuální podíl prodejů v aktuálním čtvrtletí vůči prodejům za celý rok.
Samotná logika výpočtu v měřítku [% Podíl čtvrtletí v roce] není v tuto chvíli důležitá. Navíc, tento a další Time intelligence výpočty jsou podrobně vysvětleny v samostatných příspěvcích na stránce DAX příklady.
Co ale důležité je je celá logika práce s automaticky vytvořenými datumovými tabulkami. Celý koncept v sobě skrývá dva zásadní problémy.
Prvním problémem je že automaticky vygenerovanou kalendářní tabulku vůbec nevidíme v diagramu Power BI modelu, a současně nemáme žádnou kontrolu nad takto vytvořenou tabulkou. Nemůžeme tak například přidávat do těchto tabulek vlastní počítané sloupce.
Druhý problém souvisí s tím že tyto automaticky vytvořené tabulky nemůžeme používat pro vytvoření vlastních relací. Díky tomu nemůžeme analyzovat data z více tabulek přes atributy z jedné kalendářní tabulky, jako je tomu v případě práce s vlastní kalendářní tabulkou.
Uvažujme například zcela jednoduchý požadavek uživatele reportu, který by chtěl v jednom vizuálu vidět jak prodeje přes internet, tak prodeje přes obchodníky. Pro připomenutí si můžeme znovu zobrazit diagram modelu se kterým pracujeme.
Prodeje přes internet jsou v tabulce 'Internet Sales' a prodeje přes obchodníky jsou v tabulce 'Reseller Sales'. Každá z těchto tabulek je na pozadí připojena k několika skrytým kalendářním tabulkám, jedna tabulka pro každý DATE (DATETIME) sloupec, nicméně tyto tabulky vždy filtrují buď pouze tabulku 'Internet Sales', nebo pouze tabulku 'Reseller Sales'.
Pokud tedy do řádků vizuálu vložíme opět roky a čtvrtletí z hierarchie sloupce 'Internet Sales'[Order Date], a do hodnot měřítko [Prodeje přes internet] a měřítko [Prodeje přes prodejce], výsledek bude vypadat následovně.
Měřítko [Prodeje přes internet] vrací hodnoty prodejů v aktuálním čtvrtletí nebo roce, protože sloupce v řádcích vizuálu jsou z kalendářní tabulky připojené pomocí relace ke sloupci 'Internet Sales'[Order Date]. Měřítko [Prodeje přes prodejce] ale vrací v každém řádku vizuálu stejnou hodnotu, která odpovídá součtu za prodeje přes obchodníky za celé období, protože sloupce v řádcích vizuálu nefiltrují tabulku 'Reseller Sales', ale pouze tabulku 'Internet Sales'.
Pokud bychom do řádků vizuálu vložili roky a čtvrtletí z hierarchie vytvořené pro sloupec 'Reseller Sales'[Order Date], situace bude opačná.
Nyní sloupce v řádcích vizuálu filtrují měřítko [Prodeje přes prodejce], ale měřítko [Prodeje přes internet] vrací v každém řádku stejnou hodnotu.
S podobným problémem bychom se setkali také pokud bychom chtěli vidět hodnoty z faktové tabulky zobrazené přes různé datumy, například přes data objednávek a přes data doručení zboží. Ke každému datumu je vytvořená samostatná kalendářní tabulka a porovnávat prodeje přes různé datumy z jedné faktové tabulky při použití funkcionality Automatické datum a čas je velmi problematické.
Vlastní kalendářní tabulka v Power BI
Pro porovnání si můžeme v krátkosti ukázat práci s vlastní kalendářní tabulkou. Tu si do modelu můžeme nahrát buď ze zdroje dat, vytvořit si ji v Power Query, nebo si ji vytvořit přímo pomocí jazyka DAX. Různé způsoby jak si vytvořit vlastní kalendářní tabulku pomocí jazyka DAX jsou popsány v samostatném příspěvku pod tímto odkazem.
Model, se kterým budeme nyní pracovat, má vypnutou funkcionalitu Automatické datum a čas a obsahuje vlastní kalendářní tabulku.
Pokud máme v modelu vlastní kalendářní tabulku, můžeme ji propojit s více tabulkami současně, a také můžeme vytvořit více relací mezi dvěma tabulkami.
Porovnávat hodnoty prodejů ze dvou faktových tabulek tak již není žádný problém, protože sloupce z tabulky 'Date' nyní filtrují jak tabulku 'Internet Sales', tak tabulku 'Reseller Sales'.
Stejně tak můžeme jednoduše pomocí aktivace neaktivní relace porovnávat prodeje přes různé datumy z jedné faktové tabulky.
Například měřítko [Prodeje přes internet] vrací prodeje podle data objednávky, protože relace mezi tabulkou 'Internet Sales' a tabulkou 'Date' je vytvořena na základě sloupců 'Internet Sales'[Order Date] a 'Date'[Date].
Pokud bychom chtěli vidět ve stejném vizuálu také prodeje přes datum splatnosti, můžeme v rámci měřítka dočasně aktivovat neaktivní relaci vytvořenou na základě sloupců 'Internet Sales'[Due Date] a 'Date'[Date].
Měřítko:
Nové měřítko si opět můžeme vložit do původního vizuálu a porovnat si výsledky.
Měřítka [Prodeje přes internet] a [Prodeje přes internet (Due Date)] vrací rozdílné hodnoty, protože v tabulce 'Internet Sales' je u většiny objednávek jiný datum objednávky a jiný datum splatnosti.
Více informací o funkci USERELATIONSHIP(), která se používá pro aktivaci neaktivních relací můžete najít v samostatném příspěvku pod tímto odkazem.
Shrnutí
Power BI funkcionalita nazvaná Automatické datum a čas může v počáteční fázi vývoje ušetřit práci tím, že nemusíme tvořit vlastní kalendářní tabulku a nemusíme tvořit relace mezi touto kalendářní tabulkou a ostatními tabulkami v modelu. Úsilí vynaložené na vytvoření vlastní datumové tabulky se ale většinou bohatě vyplatí, protože následná práce s modelem je daleko pohodlnější. Současně, při práci s vlastní kalendářní tabulkou si můžeme tuto tabulku libovolně upravit a přidávat si do ní vlastní počítané sloupce, což s automaticky vytvořenými kalendářními tabulkami není možné. Dále, tvořit datumovou tabulku pro každý sloupec ve formátu DATE a DATETIME může mít také negativní dopad na výslednou velikost modelu.
Pracovat s automatiky vytvořenými kalendářními tabulkami dává smysl pouze v případě kdy máme velmi jednoduchý model, například model pouze s jedním sloupcem ve formátu DATE nebo DATETIME, a současně pokud si vystačíme se sloupci které jsou k dispozici v automaticky vygenerované kalendářní tabulce. V ostatních případech je lepší pracovat s vlastní kalendářní tabulkou a funkcionalitu Automatické datum a čas vždy ponechat vypnutou, aby nedocházelo ke zbytečnému zvětšování modelu o další, skryté tabulky.
Stáhnout soubor s řešením 1.
Stáhnout soubor s řešením 2.
č. 111
Komentáře
Okomentovat