GOC644 — DAX základy (2 dny)
1. Úvod do Power BI 2. Datový model 3. Úvod do DAX 4. Oblasti použití DAX 5. Kontext výpočtu 6. Časová inteligence 7. Optimalizace DAX 8. Row Level Security 9. Nástroje
GOC6441 — Pokročilý DAX (2 dny)
1. Opakování & přehled 2. Dynamické reporty 3. DAX jako dotazovací jazyk 4. VertiPaq engine 5. Ladění výkonu 6. Composite Models 7. Workshop
Cvičení
1. Datový model 2. DAX základy 3. Kontext výpočtu 4. Časová inteligence
🏠 Rozcestník kurzů
GOC6441 · Kapitola 7 (Finál)

Workshop — závěrečné cvičení

Praktické aplikace všech technik z kurzu — komplexní scénář na AdventureWorks DW
⏱ 120 minut🔨 Praktická práce

Cíle workshopu

  • Vytvořit Calculation Group pro časové srovnání
  • Implementovat Field Parameters pro dynamické metriky
  • Optimalizovat pomalou measure pomocí DAX Studio
  • Přidat RLS a OLS zabezpečení
  • Připravit model na nasazení do Power BI Service
7.1

Úvod do workshopu — scénář

Pracujeme s Adventure Works DW 2019 modelem. Úkolem je vytvořit pokročilý sales analytics report s těmito vlastnostmi:

  • Calculation Group pro srovnání: Current, Previous Year, YoY %
  • Field Parameters pro přepínání mezi metrikami (Sales, Profit, Quantity)
  • Optimalizace pomalé measure pro top 100 produktů
  • Zabezpečení — Sales menagers vidí jen svůj region (RLS), Finance nikdy nevidí Salary (OLS)

Datové zdroje

Tabulky, které budeme používat:

  • FactInternetSales — hlavní fact tabulka (internetové tržby)
  • FactResellerSales — tržby resellers (přidáme později)
  • DimProduct, DimCustomer, DimDate, DimGeography, DimSalesTerritory — lookup tabulky
ℹ
Workshop se předpokládá, že máte Power BI Desktop s připojeným Adventure Works DW 2019 modelem. Pokud nemáte, stáhněte si DW z Microsoft Samples.
7.2

Úkol 1: Vytvořte Calculation Group pro časové srovnání

1
Otevřete Tabular Editor a připojte se na model

Tabular Editor → Connect → vyberte lokální Power BI Desktop model

2
Vytvořte novou tabulku "Time Intelligence"

Pravý klik na Tables → New → Default

Pojmenujte ji "TimeIntelligence"

3
Označte ji jako Calculation Group

Vyberte tabulku "TimeIntelligence" → Properties → Type: "Calculation Group"

4
Přidejte sloupec "Period" (metasloupec Calculation Group)

Měl by se vytvořit automaticky s typem "Calculation Group Member"

Pokud ne, přidejte ručně: Columns → New Column → Name: "Period", Type: "Calculation Group"

5
Přidejte položky Calculation Group

Pravý klik na TimeIntelligence → New Calculation Item

Item 1: "Current"

DAX
CALCULATE ( SELECTEDMEASURE () )

Item 2: "Previous Year"

DAX
CALCULATE (
  SELECTEDMEASURE (),
  DATEADD ( DimDate[FullDateAlternateKey], -1, YEAR )
)

Item 3: "YoY %"

DAX
VAR Current = CALCULATE ( SELECTEDMEASURE () )
VAR Prior = CALCULATE (
  SELECTEDMEASURE (),
  DATEADD ( DimDate[FullDateAlternateKey], -1, YEAR )
)
RETURN
DIVIDE ( Current - Prior, Prior )
6
Nastavte Format Strings

Pro "YoY %": pravý klik na Item → Edit Properties → Format String: 0.00%

7
Deploy do Power BI

V Tabular Editoru: Home → Deploy → uložte změny do modelu

💡 Zobrazit nápovědu
Problém: Calculation Group se nepoužívá v Power BI Desktop?
Řešení: Musíte přidat sloupec "Period" do vizualizace. Jakmile ho přidáte, budou dostupné všechny položky CG (Current, Previous Year, YoY%).
7.3

Úkol 2: Implementujte Field Parameters pro dynamické metriky

1
Vytvořte Field Parameter

Power BI Desktop → Modeling tab → New Field Parameter

Pojmenujte: "Metric Selector"

2
Přidejte metriky k výběru

Vyberte sloupce/measures (např. SalesAmount, OrderQuantity, Profit)

Power BI automaticky vytvoří measure "Metric Selector" se SWITCH logikou

3
Přidejte "Metric Selector" do vizualizace jako slicer (filtr)

Uživatel si zvolí metriku → měra se změní dynamicky

Ověřte chování: Filtrujte měsíc (např. červenec 2024), pak v Metric Selectoru přepínejte mezi metrikami. Měra by se měla změnit, ale filtr na datum zůstane.

7.4

Úkol 3: Optimalizujte pomalou measure

Scenář: Tržby Top 100 produktů (pomalá measure)

Vytvořte measure, která vrátí součet tržeb jen pro top 100 produktů dle ceny (problematické):

DAX (POMALÉ — iterace)
SalesTop100ProductsPomalé =
SUMX (
  TOPN ( 100, DimProduct, DimProduct[ListPrice], DESC ),
  CALCULATE ( SUM ( FactInternetSales[SalesAmount] ) )
)
-- CALCULATE bez filtru uvnitř SUMX přes DimProduct:
-- row context → filter context přes relaci = 100 volání SE (CallbackDataID)
1
Spusťte Performance Analyzer

Power BI Desktop → View → Performance Analyzer → Start recording

Klikněte na vizualizaci (tato measure) → Stop recording

Zaznamenejte čas (pravděpodobně > 2000ms — POMALÉ!)

2
Zkopírujte DAX do DAX Studio pro detailnější analýzu

DAX Studio → Server Timings → vidíte FE vs. SE čas

Pravděpodobně vidíte CallbackDataID — FE volá SE v každé iteraci

3
Optimalizujte measure — odstraňte iteraci
DAX (RYCHLEJŠÍ — TOPN jako filter argument)
SalesTop100ProductsRychle =
CALCULATE (
  SUM ( FactInternetSales[SalesAmount] ),
  TOPN ( 100, DimProduct, DimProduct[ListPrice], DESC )
)
-- TOPN jako přímý filter argument CALCULATE → SE zpracuje celé najednou
-- žádná iterace, žádný CallbackDataID
4
Ověřte výkon

Performance Analyzer znovu — měla by být značně rychlejší (< 100ms)

💡 Zobrazit nápovědu
Tip: CALCULATE(SUM(...), TOPN(...)) předá TOPN přímo jako filter argument — Storage Engine zpracuje filtr najednou bez CallbackDataID. Alternativa pro opakované použití: počítaný sloupec IsTop100 = RANKX(ALL(DimProduct), DimProduct[ListPrice],, DESC) <= 100 v DimProduct.
7.5

Úkol 4: Přidejte RLS a OLS zabezpečení

Row Level Security (RLS) — prodejce vidí jen svůj region

1
Vytvořte RLS roli v Power BI Desktop

Modeling → Manage roles → New role → pojmenujte "Sales Manager"

2
Přidejte filtr DAX na tabulku DimSalesTerritory

Pro roli "Sales Manager" přidejte filtr:

DAX (RLS filtr)
[SalesTerritoryCountry] = USERPRINCIPALNAME ()

(Toto předpokládá, že username = zemi. V praxi byste měli lookup tabulku.)

3
Otestujte RLS

Modeling → Manage roles → View as → vyberte roli

Měli byste vidět jen data daného regionu

Object Level Security (OLS) — Finance nevidí Salary

4
Otevřete Tabular Editor a připojte se na model
5
Vytvořte roli "Finance" v Tabular Editoru

Security → New role → pojmenujte "Finance_ReadOnly"

6
Nastavte OLS permissions pro roli v Tabular Editoru

V Tabular Editoru: vyberte roli → záložka Column Permissions → najděte DimEmployee[Salary] → nastavte Permission: None.

Pozor: Hidden: True pouze skryje sloupec z field listu — data jsou stále přístupná přes DAX dotazy. Skutečné OLS zabezpečení vyžaduje nastavení Permission: None v roli, nikoli jen skrytí.

7
Deploy a publikujte do Power BI Service

Tabular Editor → Deploy

Ověřte, že sloupec je skrytý pro role bez přístupu

⚠
Omezení OLS: Skrytý sloupec nesmí být používán v DAX výrazech viditelných objektů. Plánujte model průmyslně!
7.6

Shrnutí kurzu GOC6441

Co jsme se naučili

Kapitola 1: Opakování — Relace, kontexty, sloupce vs. measures vs. tabulky, Visual Calculations

Kapitola 2: Dynamické reporty — Dynamic Measures (SWITCH), Calculation Groups, Field Parameters, Časové kalkulace, OLS zabezpečení

Kapitola 3: DAX jako jazyk — EVALUATE, SUMMARIZE, Paginated Reports, DAX Studio pro analýzu

Kapitola 4: VertiPaq — Column store architektura, kompresní algoritmy, SE vs. FE, datové typy, optimalizace

Kapitola 5: Ladění measures — Performance Analyzer, Server Timings, optimalizační vzory, VAR

Kapitola 6: Režimy připojení — Import, DirectQuery, Live Connection, Composite Models

Kapitola 7: Workshop — Praktické aplikace na reálném modelu

Doporučené dalšívýchledu

  • M Language (Power Query): Hluboké porozumění Data Modeling pipelinům
  • Advanced DAX patterns: Semi-additive measures, complex time intelligence, what-if analysis
  • Premium Capacities: Incremental refresh, aggregations, XMLA endpoint
  • Paginated Reports: Pokud pracujete s SSRS nebo Power BI Paginated Reports
  • Analysis Services Tabular: SSAS se liší od Power BI, ale DAX principy jsou stejné

Zdroje a komunita

  • Sqlbi.com: Nejlepší site pro DAX tutoriály a best practices
  • DAX Guide (dax.guide): Kompletní reference všech DAX funkcí
  • Power BI Community (community.powerbi.com): Fórum pro otázky
  • Tabular Editor community: Open-source nástroj, aktivní komunita
  • Marco Russo & Alberto Ferrari: Autoritní názory na DAX
✓
Gratuluji! Absolvovali jste GOC6441 — Advanced Power BI course. Nyní máte pokročilé znalosti DAXu, optimalizace, zabezpečení a architektonických rozhodnutí. Buďte připraveni vytvářet enterprise-grade BI řešení!