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ů
GOC644 · Cvičení 3

Cvičení 3 — Kontext výpočtu: CALCULATE, ALL a Iterátory

Manipulace s filtračním kontextem a iterátory pro pokročilé výpočty
⏱ ~30 minut🗂 Cíl: Pochopit filtrační kontext a funkce ALL, CALCULATE, VAR

Cíle cvičení

  • Pochopit kontext výpočtu (filter context)
  • Naučit se CALCULATE funkci a funkci ALL
  • Vytvořit measures s relativními a absolutními filtry
  • Použít iterátory (SUMX) pro řádkové výpočty
  • Použít VAR proměnné pro čitelnost
1

Measure: Sales % of Total (% z celkového prodeje)

ℹ️ Koncept: Tato míra vrátí procent z celkového prodeje, který překonáme v daném kontextu (např. v dané kategorii produktu nebo roce). Používáme ALL() k vypnutí filtru na tabulku FactInternetSales.
1
Přejděte do zobrazení Model V levém panelu klikněte na ikonu Model.
2
Vytvořte novou míru "Sales % of Total" V pásu karet klikněte na Nová míra. Zadejte:
DAX
[Sales % of Total] =
DIVIDE(
    [Total Sales],
    CALCULATE([Total Sales], ALL(FactInternetSales)),
    0
)
💡 Zobrazit nápovědu
CALCULATE s ALL(FactInternetSales) vymaže všechny filtry na tabulku FactInternetSales a vrátí součet za všechny řádky. Poté vydělíme aktuální [Total Sales] (v kontextu filtrů) celkovým součtem.
3
Otevřete Report a testujte míru Přejděte do Report zobrazení. Vytvořte Matrix vizualizaci s:
  • Rows: DimProductCategory → EnglishProductCategoryName
  • Columns: DimDate → Datum → CalendarYear
  • Values: [Total Sales] a [Sales % of Total]
💡 Zobrazit nápovědu
ALL(FactInternetSales) odstraní všechny filtry z FactInternetSales — jmenovatel je vždy Grand Total bez ohledu na rok nebo kategorii. Procenta proto nesčítají 100% v každém sloupci ani řádku — sčítají 100% pouze v buňce Grand Total celé matice. Pokud chcete 100% v každém sloupci (roce), použijte ALL(DimProductCategory). Pokud vidíte desítky, změňte formátování [Sales % of Total] na "Procento".
2

Measure: Sales % of Category (% v rámci kategorie)

ℹ️ Koncept: Procento prodeje v rámci kategorie. Vymaže filtry na podkategorii a produkt, ale ZACHOVÁVÁ filtr na kategorii.
1
Vytvořte míru "Sales % of Category"
DAX
[Sales % of Category] =
DIVIDE(
    [Total Sales],
    CALCULATE(
        [Total Sales],
        ALL(DimProductSubcategory)
    ),
    0
)
💡 Zobrazit nápovědu
ALL(DimProductSubcategory) vypíná filtr na podkategorie, ale ostatní filtry (na kategorii a rok) zůstávají. Tak vidíme procento prodeje z každé podkategorie vůči celé kategorii.
2
Přidejte míru do vaší Matrix vizualizace Do Values Matrix vizualizace přidejte [Sales % of Category]. Měla by vám ukázat procenta v rámci každé kategorie.
3

Measure: Sales USA (Statický filtr)

ℹ️ Koncept: CALCULATE s konkrétní podmínkou filtruje data bez ohledu na kontext vizualizace.
1
Vytvořte míru "Sales USA"
DAX
[Sales USA] =
CALCULATE(
    [Total Sales],
    DimGeography[CountryRegionCode] = "US"
)
💡 Zobrazit nápovědu
Tato míra VŽDY vrátí součet prodejů z USA, bez ohledu na to, jaké filtry jsou ve vizualizaci. Filtry z vizualizace se kombinují s tímto filtrem.
2
Ověřte míru v tabulce Přidejte [Sales USA] do Card vizualizace. Měla by zobrazit součet prodejů z USA.
4

Measure s SUMX Iterátorem

ℹ️ Koncept: SUMX iteruje přes tabulku a aplikuje výraz na každý řádek. Je to alternativa k SUM pro složitější výpočty.
1
Vytvořte míru "Total Sales SUMX"
DAX
[Total Sales SUMX] =
SUMX(
    FactInternetSales,
    FactInternetSales[OrderQuantity] * FactInternetSales[UnitPrice]
)
💡 Zobrazit nápovědu
SUMX iteruje přes každý řádek FactInternetSales a vynásobí Quantity × UnitPrice, poté sčítá. Měla by vrátit stejnou hodnotu jako [Total Sales] (nebo velmi blízkou, pokud existují slevy).
2
Porovnejte [Total Sales] a [Total Sales SUMX] Vytvořte Card vizualizaci s oběma měřeními a vizuálně je porovnejte. Měly by být téměř identické.
💡 Poznámka: Pokud se liší, může to být proto, že [Total Sales] zahrnuje slevy. SUMX počítá Quantity × UnitPrice bez zohlednění slev.
5

Measure s VAR pro čitelnost

ℹ️ Koncept: VAR (Variable) proměnné činí DAX čitelnějším a efektivnějším tím, že uloží mezivýsledky.
1
Vytvořte míru "Sales Growth vs US"
DAX
[Sales Growth vs US] =
VAR CurrentSales = [Total Sales]
VAR USSales = [Sales USA]
RETURN
    DIVIDE(CurrentSales - USSales, USSales, 0)
💡 Zobrazit nápovědu
VAR deklaruje proměnné (CurrentSales a USSales). RETURN vrací konečný výraz. Tímto způsobem je kód čitelnější a DAX engine počítá proměnné pouze jednou.
2
Otestujte míru s procenty Přidejte [Sales Growth vs US] do vizualizace a nastavte formát na "Procento". Měla by vám porovnat aktuální prodeje s USA (0 pro USA, kladné pro vyšší prodeje, záporné pro nižší).
6

Bonus: Context Transition Vysvětlení

⚠️ Pokročilé téma: Context transition je pokročilý koncept. Přečtěte si vysvětlení, ale nemusíte ho implementovat.
1
Co je Context Transition?

Context transition se stane, když použijete measure (která existuje v kontextu řádku) v calculated column. Řádkový kontext (row context) se konvertuje na filtrační kontext (filter context).

Příklad: Pokud v calculated column napíšete [Total Sales], measure se vyhodnotí s filtrem na daný řádek.

2
Praktická demonstrace (volitelné) V DimProduct vytvořte calculated column:
DAX
Product Sales = [Total Sales]

Tento sloupec zobrazí součet prodejů pro daný produkt. Přestože [Total Sales] je measure, zde se vyhodnotí v řádkovém kontextu (každý řádek = jeden produkt).

💡 Zobrazit nápovědu
Pokud vidíte stejné číslo ve všech řádcích, kontext transition se neuskutečnil. Pokud vidíte různá čísla pro různé produkty, úspěšně jste viděli context transition v akci.
3
Kdy CALCULATE explicitně vyvolá context transition?

Pokud napíšete CALCULATE([Total Sales]) v calculated column, CALCULATE aktivně způsobí context transition — převede row context na filter context. Výsledek je identický s přímou referencí na measure [Total Sales] v calculated column (obojí vyvolá context transition). CALCULATE context transition nezruší — naopak ji explicitně vynutí.

✓ Úspěšně jste dokončili Cvičení 3, pokud: Máte 5+ measures s CALCULATE a ALL, vidíte je v Matrix/Card vizualizacích, a chápete, jak se CALCULATE mění filtrační kontext.