Tenhle článek se věnuje tomu, jak při návrhu datových modelů v Power BI řešit problém, kdy v jedné tabulce potřebujeme pracovat s více datumovými sloupci.

A v čem že ten problém vlastně vězí? Podívejte na tuhle tabulku. Je v ní datum objednávky a následující datum platby.

Pak máte datumovou dimenzi, na kterou chcete datum připojit. (Ať vás ani nenapadne, že byste datumovou dimenzi nevytvářeli – viz tento článek!)

Až zatím je to v pohodě. Vyberete si jeden datum, přetáhnete a relace je na světě. 

Teď to ale zkusíte s druhým a… a druhá relace je tečkovaná. To znamená, že je neaktivní, což je skoro to samé, jako by tam nebyla.

Jenomže vy potřebujete dělat reporty z obou datumových sloupců, tedy potřebujete oba datumy napárovat na časovou dimenzi aktivní relací. Emmm, ale to jsme si právě řekli, že nejde, ne?

Jde to. Máte dokonce dvě možnosti. Buď uděláte místo jedné datumové dimenze dvě, a napárujete každý sloupec na jednu, nebo budete konkrétní relace podle potřeby “zaktivňovat” pomocí DAXu.

První cesta – více datumových relací

Pro každý datumový sloupec si můžete vytvořit vlastní datumovou relaci a každý sloupec napojit na jednu. Váš datový model bude vypadat nějak takhle:

Na dimenze pak můžete připojit i další tabulky, např. takto:

Všimněte si, že se na jednu dimenzi vážou tabulky,  u kterých logicky předpokládáme vyhodnocování proti sobě v jednom reportu. Tedy “Payment date” jde např. proti “Spendings” (např. pro vyhodnocování cash flow), Order date by mohl jít např. proti nákladům na inzerci – abychom vyhodnocovali efektivitu inzerce.

Výsledný report pak může pracovat s jednou časovou dimenzí (např. peníze podle data objednání):

nebo se dvěma (např. peníze podle data objednání a data zaplacení):

Druhá cesta –  jedna datumová relace a funkce 

Ve vašem datovém modelu budou oba datumové sloupce napojené na jednu datumovou dimenzi. Protože mezi dvěma tabulkami nemohou být současně dvě aktivní relace, budou všechny (nebo všechny kromě jedné) neaktivní.

V reportech se pak podle této dimenze zobrazují míry, počítané pomocí funkce USERELATIONSHIP.

Např. peníze podle data objednávek se budou počítat takto:

  • Amount – ordered =
       CALCULATE(
          SUM(‘Orders 2′[Order amount]),
          USERELATIONSHIP(‘Orders 2′[Order date],’General time dimension'[Date]))

Ve výsledném reportu se pak budou částky podle data objednávky i podle data platby zobrazovat jako dvě různé míry.

Takže tady máme dva přístupy, ale který si máte vybrat?

První přístup, více datumových dimenzí, má tyto výhody:

  • Nemusíte napsat ani čárku v DAXu. Nepotřebujete totiž vytvářet žádnou míru, zatímco v druhém přístupu jich může být fakt hodně
  • Díky tomu se model rychleji vytvoří a je snazší ho udržovat

Druhý přístup, jedna datumová dimenze a počítané míry, má ale také svoje benefity:

  • Pracujete s jednou časovou dimenzí. To je fajn když filtrujete nebo jinak upravujete reporty
  • Obě čísla můžete v jednom reportu přehledně zobrazit jedno vedle druhé jako dvě nezávislé míry