Chceš v Power BI vytvořit semantický model, 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áš, a radši ho nepoužívej nikdy. 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 také 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š použít, 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. Tohle pravidlo má ale cenu řešit jen při velkých objemech dat kdy ke zpomalování opravdu dochází.

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ž musíš dobře vědět proč to děláš.