Chceš v Power BI vytvořit databázi, která:

  • bude přehledná,
  • nebude vyžadovat zbytečně komplikované daxové funkce,
  • bude rychlá pro práci uživatele?

Tak dodržuj základní pravidla. Není to žádná věda a odměnou je fakt velká úspora času.

1. Nepoužívej relace M:N (= many to many, nekonečno k nekonečnu)

Power BI umí relace 1:1, 1:N a M:N.

  • 1:1 většinou nedělají problém, ale pokud chceš dvě tabulky spojit 1:1, bude nejspíš lepší udělat z nich jednu tabulku
  • 1:N jsou základní možnost a naprostá většina relací je právě tohoto typu
  • M:N je typ relace, který má velmi odlišné chování od ostatních. Nepoužívej ho, pokud opravdu dobře nevíš proč to děláš. Pokud chceš spojit dva sloupce, kde se opakují hodnoty, je mnohem lepší vytvořit novou dimenzi, vložit ji mezi ně a místo jedné vazby M:N udělat dvě vazby 1:N

2. Používej datumové dimenze

Proč používat datumové (= časové, kalendářové…) dimenze je popsáno tady.

Ve zkratce – dělej to pokaždé, když chceš pracovat se sloupcem obsahujícím kalendářní datum. A to chceš skoro vždy 🙂

3. V datovém modelu počítej míry – ne nové sloupce

Proč?

Je to jednak přehlednější a snadnější (i když se ti to na začátku nezdá), ale hlavně lepší z pohledu výkonnosti.

Počítané sloupce používej pouze ve chvíli, kdy podle jejich hodnot chceš filtrovat, rozdělovat…, ale i v takovém případě se snaž je vytvářet v Power Query a ne DAXem v datovém modelu.

4. Nenačítej do datového modelu tabulky, se kterými nepracuješ (i když je potřebuješ pro jiný dotaz v Power Query)

Existují data, která potřebuješ, ale nepotřebuješ je v datovém modelu. 

Jedná se o dotazy, jejichž data se v Power Query použijí do jiných dotazů, ale samotné nás nezajímají.

Příklad – z kurzovního lístku na webu získáš informace o kurzech, a z nich vypočteš z korunových částek eurové částky. Samotný kurzovní lístek ale v datovém modelu nepotřebuješ, takže jeho načítání v Power Query vypni. Bude to lepší z pohledu výkonnosti a hlavně z pohledu přehlednosti.

5. Dimenze už nemají mít své další dimenze – i kdyby to znamenalo že mají více sloupců

Jinými slovy to znamená že nemáš strukturovat databázi jako “snowflake”, ale jako “star”. 

Je to proto, že “přecházením” přes relace se výpočty zpomalují a tím se snižuje výkon.

Pozor, tohle pravidlo platí jen u Power BI a dalších databází určených ke čtení a zobrazování dat. Pro jiné typy databází může být naopak mnohem lepší “snowlake”.

6. Pokud to jde, dělej výpočetně náročné věci raději v Power Query než v datovém modelu

Power Query se přepočítává při načítání, DAX při práci uživatele. Takže pokud něco počítáš v Power Query, zpomalíš tím sice načtení, ale nezpomaluješ práci uživatele s reportem.

7. Měj správné datové typy

Správné datové typy (obvykle nastavené v Power Query) zajistí, že data nebudou zbytečně velká (a tím i pomalá). Současně se špatnými datovými typy nemusí správně fungovat relace.

O datových typech a jejich nastavování více tady.

Malá poznámka na závěr

Je fakt, že existují situace, kde se některé z těchto pravidel vyplatí porušit. Ale je to fakt výjimečné a týká se to jen poměrně složitých modelů, kdy už fmusíš dobře vědět proč to děláš.