Tvorba datového modelu
Co se naučíte
- Porovnat tři způsoby načítání dat: Import, Direct Query
a Live ConnectionNa blogu Jiřího Neorala: Power BI – Live connection vs. Import, comparison and limitations — podrobné srovnání Import vs Live Connection (anglicky)
- Importovat a transformovat data z SQL Serveru v Power Query
- Vytvářet a spravovat relace mezi tabulkami
- Návrh optimalních schémat (Star vs Snowflake)
- Implementovat many-to-many relace s bridge tabulkami
- Respektovat best practices pro pojmenování a strukturu modelu
Načítání dat: Tři přístupy
Power BI nabízí tři hlavní způsoby, jak zaintegovat data do vašeho modelu. Každý přístup má své výhody a omezení, které je nutné pochopit pro správný výběr v kontextu vaší situace.
Import (Storage Mode: Import)
Import zkopíruje data do paměti Power BI, kde se komprimují pomocí VertiPaq enginu. Toto je nejrychlejší přístup pro analytiku, ale vyžaduje správu kapacity.
| Aspekt | Popis |
|---|---|
| Výhody | Nejrychlejší, offline dostupnost, plná podpora DAX |
| Omezení | 1 GB na Shared/Pro; Premium/Fabric s Large Dataset Format až 400 GB+; Power BI Desktop bez pevného limitu (závisí na RAM); refresh nutný pro aktuálnost |
| Kdy používat | Historická data, < 1 miliarda řádků, interaktivní analýza |
DirectQuery (Storage Mode: DirectQuery)
DirectQuery vytvoří Connect s podkladovým zdrojem dat. Dotazy se překládají do nativního SQL nebo jiného dialektu a vrací se výsledky v reálném čase bez kopírování dat.
| Aspekt | Popis |
|---|---|
| Výhody | Vždy aktuální data, bez omezení kapacity, nízké paměti |
| Omezení | Pomalejší, někdy nedostupné DAX funkce, výkon závisí na source |
| Kdy používat | Real-time data, velké datové sady, high-frequency updates |
Live Connection (Storage Mode: Live Connection)
Live Connection se připojuje k Analysis Services (SSAS) nebo ke sdíleným sémantickým modelům v Power BI Service. Data zůstávají na serveru, Power BI Desktop slouží pouze jako frontendový nástroj. Pro připojení ke sdíleným modelům v Service stačí licence Pro — Premium není podmínkou.
| Aspekt | Popis |
|---|---|
| Výhody | Centralizovaný model, bezpečnost, Enterprise standardy |
| Omezení | SSAS Tabular nebo sdílený sémantický model v Power BI Service (Pro/Premium) |
| Kdy používat | Enterprise setup, sdílený Tabular model na serveru |
Import z SQL Serveru (AdventureWorks DW 2019)
Praktická implementace: Importování tabulek z AdventureWorks DW 2019 do Power BI a transformace v Power Query.
V Power BI Desktop: Get Data > SQL Server > Enter server, authentication, database.
Vyberte z dostupných: FactResellerSales, DimDate, DimProduct, DimReseller, DimEmployee.
Odeberte nepotřebné sloupce, přejmenujte, normalizujte data, stanovte datové typy.
SELECT frs.SalesOrderNumber, frs.OrderDate, frs.SalesAmount, dp.EnglishProductName, dr.ResellerName, dd.FullDateAlternateKey FROM FactResellerSales frs INNER JOIN DimProduct dp ON frs.ProductKey = dp.ProductKey INNER JOIN DimReseller dr ON frs.ResellerKey = dr.ResellerKey INNER JOIN DimDate dd ON frs.OrderDateKey = dd.DateKey
Alternativně můžete importovat celé tabulky a relace nastavit později v modelu.
Relace mezi tabulkami
Relace (relationships) spojují tabulky v modelu a definují, jak se filtry šíří. Klíčová rozlišení: kardinalita a směr filtrace.
Kardinalita relací
| Typ | Příklad | Popis |
|---|---|---|
| 1:N (One-to-Many) | DimProduct (1) → FactSales (N) | Nejčastější. Jeden produkt má mnoho prodejů. |
| 1:1 (One-to-One) | DimEmployee (1) → DimEmployeePhoto (1) | Vzácnější. Jeden zaměstnanec má jednu fotku. |
| M:N (Many-to-Many) | DimProduct (M) ↔ DimCategory (N) | Power BI podporuje přímou M:N od 2018. Bridge tabulka doporučena tam, kde hrozí double-counting (fact-to-fact M:N). |
Směr filtrace (Filter Direction)
Jednosměrný (One Direction): Filtry z jedné strany (obvykle dimenze) se šíří na druhou stranu (fakta).
Obousměrný (Both Directions): Filtry se šíří oběma směry. Používejte opatrně—může zpomalit výkon.
-- Syntaxe TMDL / Tabular Editor (ve formula baru Power BI Desktop -- píšete jen tělo výrazu bez klíčového slova MEASURE) -- USERELATIONSHIP aktivuje neaktivní relaci v CALCULATE MEASURE FactSales[Sales by Active Rel] = SUM(FactSales[Amount]) MEASURE FactSales[Sales by Inactive Rel] = CALCULATE( SUM(FactSales[Amount]), USERELATIONSHIP(FactSales[DateKey], DimDate[DateKey]) )
Hierarchie dat
Hierarchie umožňují drill-down z vyšší úrovně (rok) na nižší (den). Typicky se používají s kalendárními daty.
Hierarchie kalendáře: Year → Quarter → Month → Day
| Úroveň | DAX výraz | Příklad |
|---|---|---|
| Year | YEAR([Date]) | 2023 |
| Quarter | "Q" & FORMAT([Date], "Q") | Q3 |
| Month | FORMAT([Date], "mmmm") | August |
| Day | [Date] | 2023-08-15 |
V Power BI Desktop: Vyberte sloupce v Field listu → pravý klik → New hierarchy → drag sloupce v pořadí.
Star Schema vs Snowflake Schema
Star Schema (Hvězda)
Jedna centrální fact tabulka obklopena dimenzemi bez dalšího normalizace.
- ✓ Jednoduchý model, rychlé dotazy
- ✓ Méně relací, méně CALCULATE potřeba
- ✗ Redundance v dimenzích (e.g., City → State → Country opakovaně)
Snowflake Schema (Sníh)
Dimenze jsou dále normalizovány do Related tabulek (e.g., DimGeography > DimCity > DimState).
- ✓ Nízká redundance, čistší struktura
- ✓ Lepší pro správu údajů (jedna záznamu geography jednou)
- ✗ Více relací, složitější CALCULATE výrazy
Many-to-Many relace
Power BI podporuje přímou M:N kardinalitu nativně od roku 2018 — bez bridge tabulky. Bridge tabulka je doporučená best practice zejména v situacích, kde hrozí double-counting (typicky fact-to-fact M:N, např. FactSales ↔ FactBudget). Pro dimension-to-dimension M:N (produkt ve více kategoriích) přímá M:N obvykle funguje správně.
Implementace s Bridge tabulkou
BridgeProductCategory: ProductKey, CategoryKey (bez duplikátů)
FactSales → BridgeProductCategory (1:N) a BridgeProductCategory → DimCategory (N:1)
-- Power Query: vytvoření Bridge tabulky z Excel/SQL let Source = Sql.Database("server", "database"), ProductCategories = Table.Distinct( Table.SelectColumns(..., {"ProductKey", "CategoryKey"}) ) in ProductCategories
Best Practices pro datový model
Pojmenování
- Tabulky: CamelCase, singulární (DimProduct, FactSales, ne DimProducts)
- Sloupce: CamelCase, popisný (OrderDate, ne OD; SalesAmount, ne SA)
- Míry: Bez prefixu tabulky ([Total Sales], ne [FactSales Total Sales])
- Sloupce klíčů: Prefix Key (ProductKey, DateKey) pro jasnost
Struktura
- Skryjte všechny sloupce klíčů (Properties > Hidden)
- Skryjte referenční sloupce, které nejsou potřebné v UI
- Organizujte dimenze a fakta do skupin (Folders)
- Vytvořte datum tabulka (CALENDAR) s kompletní hierarchií
Ověření
- Zkontrolujte kardinalitu relací (ne opačně: N:1 místo 1:N)
- Ověřte referenční integritu (všechny FK v dimenzích existují)
- Otestujte filtry v vizualizacích—měly by se šířit správně