
Мера или вычисляемый столбец DAX: как выбрать расчет для отчета


В Power BI одна и та же бизнес-задача может привести к двум разным типам расчета. Если создать вычисляемый столбец DAX, значение появится у каждой строки таблицы еще во время обновления модели. Если создать меру, число будет считаться в момент, когда визуал запрашивает результат, и изменится при фильтрации отчета. На практике путаница возникает в простом вопросе: нужно ли вам значение для каждой строки или нужен итог, который должен реагировать на выбор пользователя.
Ниже разберем это на условных продажах по двум категориям в Power BI Desktop. Цель узкая: понять, что выбрать для суммы продаж в отчете, где пользователь переключает категории. Заодно проверим частую ошибку, когда одинаково названный показатель ведет себя по-разному в столбце и в мере.
Сначала решите, где должен жить результат: в строке или в визуале
Вычисляемый столбец подходит, когда значение логически принадлежит каждой записи. Типичный пример — сумма по строке, метка сегмента, признак скидки, код периода, статус заказа. Такие данные удобно использовать в строках таблицы, в срезах и в фильтрах. Но важно помнить: после загрузки модели этот результат становится статичным до следующего обновления данных. Пользователь может отбирать категорию, месяц или менеджера, а само значение в строке не пересчитается.
Мера нужна, когда ответ должен зависеть от текущего набора видимых данных. Это обычная ситуация для карточек, диаграмм, итогов по категориям и долей. Визуал передает мере свой фильтр: например, на странице выбрана категория A или только март, и мера считает именно по этим строкам. Поэтому вопрос выбора удобно свести к двум проверкам. Первая: требуется ли результат на уровне каждой записи? Вторая: должен ли этот результат меняться от фильтров отчета?
На одном и том же слове «выручка» ответы могут быть разными. Сумма строки — это хороший кандидат на вычисляемый столбец. Итоговая выручка по выбранным данным — это уже мера. Эти объекты могут использовать похожие выражения DAX, но смысл задается не только формулой, а еще и типом расчета и контекстом, в котором он выполняется.
Вычисляемый столбец на учебных данных
Учебный пример
Возьмем условную таблицу Sales с шестью продажами. Среда примера — Power BI Desktop, язык расчетов — DAX.
| Строка | Категория | Количество | Цена |
|---|---|---|---|
| 1 | A | 2 | 100 |
| 2 | A | 1 | 150 |
| 3 | A | 3 | 80 |
| 4 | B | 4 | 50 |
| 5 | B | 2 | 120 |
| 6 | B | 1 | 90 |
Если нам нужна сумма по каждой продаже, создаем вычисляемый столбец:
LineAmount = Sales[Quantity] * Sales[UnitPrice]
После расчета получаем значения по строкам: 200, 150, 240, 200, 240 и 90. Это уже проверяемый результат. По категории A сумма строк равна 590, по категории B — 530, общий итог — 1120. Такой столбец полезен, если вы хотите видеть сумму по записи в табличном визуале, строить на его основе группировки или добавлять условную классификацию вроде «крупная продажа / обычная продажа».
Здесь видно, что такое расчет по строке. Для каждой записи Power BI берет количество и цену именно из этой строки и сохраняет результат в модели. Если затем на странице отчета выбрать только категорию B, значения 200, 240 и 90 просто останутся у своих строк. Они не пересчитываются в другие числа, потому что фильтр лишь скрывает часть таблицы, а не меняет ранее сохраненный результат.
Мера и изменение фильтра отчета
Теперь создадим меру для итоговой выручки:
Total Sales = SUM(Sales[LineAmount])
Эта мера не хранит готовый результат в строках. Она считается тогда, когда визуал просит значение. Если поставить ее в карточку без фильтров, результат будет 1120. Если выбрать в срезе категорию A, мера вернет 590. Если выбрать категорию B, вернет 530. Это и есть нужное поведение для показателя отчета: число меняется вместе с фильтром.
На практике именно здесь проходит граница между двумя типами расчета. Когда вы строите карточку «Выручка», столбец не нужен сам по себе: пользователю не требуется хранить итог 1120 в каждой записи. Нужен ответ на текущий вопрос визуала: «сколько продаж видно сейчас?». Поэтому мера точнее отражает смысл показателя.
Если сумма по строке нигде отдельно не используется, можно обойтись и без столбца LineAmount, посчитав итог напрямую в мере:
Total Sales = SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])
Но для учебного сравнения удобнее оставить оба объекта: столбец показывает расчет по строке, а мера — итог по текущему фильтру. Так проще увидеть разницу во времени расчета и в контексте.
Проверка выбора на одном показателе: где возникает ошибка
Частая ошибка выглядит безобидно: автор отчета хочет вывести общую выручку и создает не меру, а вычисляемый столбец с таким выражением:
ReportTotalColumn = SUM(Sales[LineAmount])
На учебных данных общий итог равен 1120, и именно это число Power BI запишет в каждую строку столбца. Причина проста: столбец считается при обновлении модели и не получает тот фильтр, который позже появится на карточке или диаграмме. В результате в шести строках таблицы вы увидите одно и то же значение 1120.
Дальше ошибка усиливается. Если положить такой столбец в визуал со стандартной агрегацией Sum и отфильтровать категорию A, в визуале останутся три строки, каждая со значением 1120. Сумма даст 3360 вместо правильных 590. Это удобная проверка на здравый смысл: если итог по одной категории вдруг больше общего итога по всем данным, выбор типа расчета был неправильным.
Для того же бизнес-смысла мера работает корректно:
ReportTotal = SUM(Sales[LineAmount])
В карточке без фильтра она покажет 1120, по категории A — 590, по категории B — 530. В этом примере разницу видно даже при одинаковом тексте выражения. Но не стоит переносить это поведение на все DAX-формулы без проверки: на результат влияют и тип расчета, и контекст, и сами функции, которые вы используете.
Короткое правило выбора и как проверить себя за минуту
Если вам нужно выбрать между вычисляемым столбцом и мерой, пройдите короткую последовательность. Сначала спросите себя: «Это свойство одной строки или итог по набору строк?» Затем — «Должно ли значение меняться, когда пользователь выбирает категорию, дату или менеджера?» Если ответ на второй вопрос «да», почти всегда начинайте с меры. Если значение должно жить у записи и использоваться как поле для среза, фильтра или группировки, смотрите в сторону вычисляемого столбца.
- Создайте минимальный набор данных, где итог легко проверить вручную.
- Посчитайте общий итог без фильтра.
- Поставьте фильтр по одной категории.
- Сравните результат с ручной арифметикой.
Для нашего учебного набора правильная ручная проверка такая: общий итог 1120, категория A — 590, категория B — 530. Если отчет показывает эти числа в карточке с мерой, расчет выбран удачно. Если после фильтрации значение не меняется или, наоборот, суммируется повторно по строкам, вы, скорее всего, пытаетесь решать задачу меры вычисляемым столбцом.
Практический вывод простой: строчный результат — столбец, итог под фильтром — мера. Это не отменяет более сложных DAX-сценариев, но для отчетов по продажам такое правило снимает большую часть типовых ошибок еще до написания длинных формул.
Если хотите потренировать именно такие различия в учебной программе, посмотрите, есть ли в ней не только синтаксис DAX, но и задания на проверку результата под фильтром. В сохраненной программе онлайн-курса Power BI есть темы по моделированию данных и DAX, включая CALCULATE, SUMX и FILTER, а также отдельные модули по группировке и агрегированию данных в Power Query. Для этой темы полезен формат, где вы вручную сверяете итог без фильтра и по каждой категории, а не просто повторяете формулу.





















