Skoro v každém datovém modelu je velmi užitečné (nebo spíše nutné) používat časovou dimenzi. V tomto článku je popsáno, co to vůbec je, jak ji vytvořit a hlavně proč je důležitá.

V článku se věnuji práci s dimenzí pro datumy (jednotlivé dny), obdobná logika může platit i pro práci s časy (hodinami, minutami…).

Co to je časová dimenze

Nic víc než tabulka, která obsahuje jednotlivé datumy v období, které nás zajímá a pro které máme data. Každý přesně jednou.

Jak časovou dimenzi vytvořit

Cest je spousta a každá může mít svoje výhody, většinou ale stačí jít na vytvoření nové tabulky a zapsat:

  • Calendar table = CALENDARAUTO()

Funkce CALENDARAUTO nemusí mít žádné argumenty a vytváří tabulku podle toho, jaké datumy jsou obsažené v našich datech – tak, aby obsáhla vše a ještě dokončila celé roky. S měnícími se daty se mění i datumová dimenze.

V Power Pivotu se dá taková tabulka vytvořit jako Tabulka kalendářních dat.
Tuto tabulku pak napojíme na datumové sloupce ostatních tabulek relacemi, většinou 1N.

Proč časové dimenze vytvářet

Uživatelé, kteří s Power BI začínají, mívají tendence tyto dimenze nevytvářet, pokud chtějí v čase vyhodnocovat ukazatel, použijí jen jednu tabulku, ze které do vizuálu použijí jak datum, tak sledovanou hodnotu. A nějakým způsobem to funguje.
Co tedy získají tím, že vytvoří časovou dimenzi a připojí ji na tabulky?

Možnost vyhodnocovat v jednom vizuálu hodnoty z více tabulek

Máte-li v jedné tabulce náklady a ve druhé výnosy, můžete je propojit datumovou dimenzí, a pak vyhodnocovat v jednom vizuálu.

Takto vypadá spojení:

Takto vypadá vizuál:

Tabulek může být samozřejmě i víc. 
Dá se samozřejmě namítnout, že tabulky se dají spojit i přímo i bez mezitabulky. Tam ale narážíme na to, že pokud se v obou tabulkách vyskytují duplicitní datumy (což je běžné), pak bychom museli dělat vazby NN, které jsou vždy problematické. Časová dimenze nám umožní pracovat s jednoduchými relacemi 1N.

Možnost počítat v DAXu z více tabulek najednou

Díky propojení datumovou relací můžeme v jednom vzorečku vzájemně propočítávat hodnoty z více tabulek. Např. v této míře sledujeme rozdíl výnosů a nákladů:
  • Profit = SUM(sales_list[Revenue])-SUM(cost_list[Cost])

Jednodušší zápis Time intelligence funkcí (TOTALMTD atd.)

Zapisujete-li funkce pro vyhodnocování v čase, je zápis kratší (a z různých důvodů méně problémový), pokud pracujete s časovou dimenzí. Funkce můžete zapsat např. takto:
  • Revenue this month = TOTALMTD(sum(sales_list[Revenue]),’Time dimension'[Date])

                                                                                                                                                                                                                                                                                                                                                                  
Pokud byste pracovali bez časové dimenze, budete muset používat ještě funkce jako ALL a stejně to v některých kontextech bude zlobit.

A dál

Pokud by vám výše uvedené důvody nestačily, mohlo by pro Vás být zajímavé to, že práce s časovou dimenzí je výhodnější z hlediska výkonnosti.

Také je jedna společná časová dimenze šikovná, když si chcete data seskupovat podle vlastních období – např. podle týdnů, podnikových dovolených atd. V tom případě stačí všechno řešit jen jednou na jednom místě.