Урок 15 · 8 мин чтения

Контекст фильтра на пальцах

Почему одна и та же мера в разных ячейках таблицы показывает разные числа — главная идея DAX.

В прошлом уроке мы написали меру Выручка = SUM ( Продажи[Сумма] ) — и она сама пересчиталась под срез по региону. Как? Ответ — контекст фильтра. Это главная идея DAX; поняв её, вы понимаете девяносто процентов остального.

Мера считается не один раз

Кажется, что мера выдаёт «одно число». На самом деле она считается заново для каждой ячейки, где появляется. И каждый раз — под свой набор фильтров.

Положите выручку в таблицу по регионам:

РегионВыручка
ЦФО1 240
ПФО880
ЮФО560
Итого2 680

SUM ( Продажи[Сумма] ) тут посчитался четыре раза. В строке «ЦФО» — только по продажам ЦФО. В строке «ПФО» — только по ПФО. В «Итого» — по всем. Формула одна, числа разные, потому что окружение у каждой ячейки своё.

Про числа

Цифры в таблице — условные, для наглядности механики. На сквозном наборе курса (его мы качали в уроке про набор данных) выручка крупнее — ЦФО ≈ 2,5 млн ₽, итог ≈ 9,8 млн ₽; сверяться с этими значениями будем в уроках про функции агрегации.

Что создаёт контекст

Это окружение — набор активных фильтров — и называется контекстом фильтра. Его формируют:

  • строки и столбцы визуала (регион в строке таблицы);
  • срезы (slicer по дате, по категории);
  • другие визуалы на странице (кликнули по столбику — отфильтровали остальные);
  • сама мера, если внутри неё есть CALCULATE (об этом ниже).
Главное правило

Мера не считает «всё подряд». Она считает то, что видно в текущем контексте. Регион в строке, июль в срезе, клик по графику — всё это сужает данные ещё до того, как SUM берётся за работу.

Почему «Итого» — не сумма строк

Частый шок новичка: мера в строке «Итого» иногда не равна сумме строк выше. Это не баг.

«Итого» — это та же мера, посчитанная в контексте «все строки сразу», а не сложение результатов по строкам. Для простой суммы итог совпадёт. Но для меры вроде «% выполнения плана» или «средний чек» итог считается по своей логике — и он правильный, просто это не арифметическая сумма ячеек.

Не пугайтесь

Если итог «не сходится» — почти всегда это не ошибка, а напоминание: мера в каждой ячейке (включая итоговую) пересчитывается под свой контекст.

CALCULATE — когда контекст меняют намеренно

Иногда контекст нужно поменять прямо в мере. Например, посчитать выручку только по молочке независимо от того, что выбрано в отчёте. Для этого есть CALCULATE — функция, которая меняет фильтры перед расчётом:

Выручка по молочке =
CALCULATE ( [Выручка], Товары[Категория] = "Молочка" )

CALCULATE — самая мощная функция DAX, и почти все продвинутые меры строятся на ней. Но фундамент под ней — тот самый контекст фильтра. Освоили идею «мера считается под текущие фильтры» — дальше CALCULATE ложится естественно.

Что дальше

Данные разложены, связаны, посчитаны. Пора показать их человеку. В следующем уроке — как выбирать график под задачу, а не по привычке тянуться к круговой.

Почему мера «Выручка» в строках «ЦФО» и «ПФО» показывает разные числа?
Одна и та же мера пересчитывается для каждой ячейки под её контекст фильтра. В строке «ЦФО» виден только ЦФО, в «ПФО» — только ПФО. Это и есть главная идея DAX.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43