Cvičení 3 — Kontext výpočtu: CALCULATE, ALL a Iterátory
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
Measure: Sales % of Total (% z celkového prodeje)
[Sales % of Total] =
DIVIDE(
[Total Sales],
CALCULATE([Total Sales], ALL(FactInternetSales)),
0
)
- Rows: DimProductCategory → EnglishProductCategoryName
- Columns: DimDate → Datum → CalendarYear
- Values: [Total Sales] a [Sales % of Total]
Measure: Sales % of Category (% v rámci kategorie)
[Sales % of Category] =
DIVIDE(
[Total Sales],
CALCULATE(
[Total Sales],
ALL(DimProductSubcategory)
),
0
)
Measure: Sales USA (Statický filtr)
[Sales USA] =
CALCULATE(
[Total Sales],
DimGeography[CountryRegionCode] = "US"
)
Measure s SUMX Iterátorem
[Total Sales SUMX] =
SUMX(
FactInternetSales,
FactInternetSales[OrderQuantity] * FactInternetSales[UnitPrice]
)
Measure s VAR pro čitelnost
[Sales Growth vs US] =
VAR CurrentSales = [Total Sales]
VAR USSales = [Sales USA]
RETURN
DIVIDE(CurrentSales - USSales, USSales, 0)
Bonus: Context Transition Vysvětlení
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.
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).
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í.