← К списку уроков
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:

  1. Берётся текущий контекст (то что выбрано слайсерами)
  2. Добавляется/переопределяется фильтр Year = 2025
  3. Вычисляется [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