Power BI·Сложный·18 мин
DAX: CALCULATE и контекст
Главная функция DAX — CALCULATE. Контекст фильтров, FILTER, ALL.
DAX: CALCULATE и контекст
CALCULATE — самая важная функция DAX. Она позволяет переопределить контекст фильтрации меры. Понимание CALCULATE = понимание DAX.
Базовый синтаксис
CALCULATE( <выражение>, <фильтр1>, <фильтр2>, ... )
Берёт выражение и применяет к нему дополнительные фильтры.
Простой пример: выручка только за 2025
Revenue 2025 =
CALCULATE(
[Total Revenue],
Calendar[Year] = 2025
)
Внутри CALCULATE:
- Берётся текущий контекст (то что выбрано слайсерами)
- Добавляется/переопределяется фильтр
Year = 2025 - Вычисляется
[Total Revenue]в этом новом контексте
Замена vs добавление фильтров
-- Заменяет фильтр Year:
CALCULATE([Total Revenue], Calendar[Year] = 2025)
-- Добавляет фильтр Customer Type, не трогает Year:
CALCULATE([Total Revenue], Customer[Type] = "VIP")
Правило: если фильтр уже есть на колонку —
CALCULATEего заменяет. Если фильтра нет — добавляет.
ALL — снять все фильтры
% of Total =
DIVIDE(
[Total Revenue],
CALCULATE([Total Revenue], ALL(Products))
)
ALL(Products) снимает все фильтры с таблицы Products. Результат: какой % выручки у текущей категории от общего итога.
FILTER — сложные условия
High Value Orders =
CALCULATE(
[Total Revenue],
FILTER(
fact_Orders,
fact_Orders[Sales] > 1000
)
)
FILTER нужен когда условие не просто column = value, а сравнение или вычисление.
REMOVEFILTERS — современная замена ALL
CALCULATE([Total Revenue], REMOVEFILTERS(Products[Category]))
Более явная семантика — снимаем фильтр конкретно с категории, остальные остаются.
Что важно запомнить
CALCULATEбез 2-го аргумента =[Мера](бессмысленно, но возможно)- 90% твоих DAX-задач решаются через
CALCULATE + ALL + FILTER - Не используй
CALCULATEвнутриCALCULATEесли можно одним — каждый вложенный изменяет контекст - Чем сложнее модель, тем чаще нужен
CALCULATE— изучи его глубоко - На собеседовании джунов в DA — точно спросят про
CALCULATE