Вычисляемые столбцы против мер

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

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

Почему это важнее всего

Это различие — самая частая причина ошибок у новичков и любимый вопрос на собеседовании аналитика. Перепутав столбец и меру, вы получите либо неверные числа, либо раздутую медленную модель. Понять разницу — значит перейти от «случайно работает» к осознанному DAX.

Вычисляемый столбец

Столбец добавляется в таблицу и заполняется значением для каждой строки — один раз при обновлении данных. Он работает в контексте строки: в формуле доступны другие столбцы той же строки. Результат физически хранится в модели и занимает память.

-- Вычисляемый столбец в таблице Sales:
Итого по строке = Sales[quantity] * Sales[price]

Тут для каждой продажи перемножаются её количество и цена. Это уместно: значение осмысленно на уровне строки и пригодится как атрибут (например, для фильтра «крупные заказы»).

Мера

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

-- Мера:
Общая выручка = SUMX( Sales, Sales[quantity] * Sales[price] )

Та же логика «количество × цена», но результат суммируется по всем видимым строкам и подстраивается под фильтры отчёта.

Сравнение в лоб

СвойствоВычисляемый столбецМера
Когда считаетсяпри обновлении, построчнопри показе, в контексте
Контекстстрокифильтра
Хранится в моделида (занимает память)нет
Реагирует на срезынет (значение фиксировано)да
Для чегоатрибут строки, ключ, признакпоказатели: суммы, доли, KPI

Правило выбора

Спросите себя: «Мне нужно значение в каждой строке (чтобы фильтровать/группировать) или агрегат, реагирующий на отчёт?» Атрибут строки (категория цены, флаг «VIP», год из даты) — столбец. Любой показатель, который должен меняться от срезов (выручка, средний чек, доля) — мера. Практическое правило: по умолчанию делай меру; столбец — только когда значение реально нужно как атрибут строки.

Как работает под капотом

Вычисляемый столбец материализуется: его значения сжимаются и лежат в VertiPaq рядом с остальными столбцами, увеличивая размер модели. Мера хранится лишь как выражение; при каждом обновлении визуала движок берёт текущий контекст фильтра, формирует нужный набор строк и считает агрегат. Поэтому мер можно иметь сотни почти без затрат памяти, а каждый лишний вычисляемый столбец на миллионах строк — это мегабайты.

Частые ошибки

  • Делать столбец там, где нужна мера. Тогда число не реагирует на срезы и зря тратит память.
  • Делать меру вместо атрибута строки. Меру нельзя положить на ось или в срез как категорию.
  • Считать «итог» столбцом и потом суммировать его. Часто это можно и нужно сделать одной мерой через SUMX.

Итог

  • Столбец считается построчно при обновлении и хранится; мера считается на лету в контексте фильтра.
  • Столбец — для атрибутов строки (фильтры, группировки); мера — для показателей, реагирующих на отчёт.
  • По умолчанию выбирайте меру; столбцы добавляйте экономно.
Проверьте себя
1. В каком контексте работает вычисляемый столбец?
AВ контексте фильтра
BВ контексте строки
CВне всякого контекста
DВ контексте визуала
2. Что нужно для показателя, который должен меняться при выборе среза (например, выручка по региону)?
AВычисляемый столбец
BМера
CТекстовый столбец
DНовая таблица