SUMX в DAX: когда простой SUM уже не справляется

SUM складывает готовый столбец. SUMX проходит по строкам, считает выражение для каждой и только потом складывает результат. На этой разнице держится половина практики.

Павел отдельно оценивает каждую коробку в ряду, а затем собирает результаты в общий итог
СУТЬ БЕЗ ШУМА

Самое главное — за секунды

Содержание статьи

Поймёте разницу между SUM и SUMX, рассчитаете выручку по строкам и увидите, почему итог меры иногда нельзя получить простой суммой столбца.

Если в таблице уже есть столбец Сумма, достаточно SUM. Но часто нужного столбца нет: есть количество, цена и скидка. Тогда результат для каждой строки надо сначала вычислить. SUMX берёт таблицу, проходит по её строкам, считает выражение и складывает получившиеся числа. Буква X в названии как раз намекает на итератор. Никакой тайной математики, просто аккуратный цикл внутри модели.

Что это значит простыми словами

SUM(Продажи[Сумма]) складывает значения одного столбца. SUMX(Продажи, Продажи[Количество] × Продажи[Цена]) сначала умножает количество на цену в каждой строке, а затем суммирует. Это важно для скидок, себестоимости, взвешенных средних и любых расчётов, где строка влияет на итог. Среднюю цену нельзя честно получить как среднее двух средних, а валовую прибыль — как разницу двух случайных агрегатов.

Формула и логика расчёта

Синтаксис: SUMX(таблица, выражение). Таблица может быть исходной или отфильтрованной. Внутри выражения действует строковый контекст: DAX знает, какую строку сейчас обрабатывает. Если выражение вызывает меру, появляется взаимодействие со filter context. Поэтому сложные SUMX лучше строить ступенями: базовые меры отдельно, фильтрация отдельно, итоговая итерация отдельно.

Подробный пример с числами

Павел запускает отдельный расчёт для каждой строки, после чего результаты складываются в общий итог

Есть три позиции заказа. Первая: 10 штук по 1 000 рублей, скидка 10%. Вторая: 5 штук по 2 000 рублей без скидки. Третья: 2 штуки по 4 000 рублей, скидка 25%. Выручка по строкам: 9 000, 10 000 и 6 000 рублей. SUMX по выражению Количество × Цена × (1 − Скидка) вернёт 25 000 рублей. Если сначала сложить количество и цену, а потом перемножить, получится бессмысленная цифра. А если усреднить скидки без веса, итог тоже уедет.

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

Как использовать в бизнесе

SUMX полезна, когда показатель должен отражать реальную экономику операции: выручку после скидки, переменную себестоимость, комиссию маркетплейса, стоимость доставки, плановую загрузку. Я не начинаю с функции. Сначала фиксирую формулу одной строки операции. Когда она понятна финансовому специалисту, переносим её в DAX и проверяем на конкретных документах.

Когда применять этот подход

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

Как проверить результат

Павел сравнивает простое сложение и построчный расчёт на одном наборе товаров

Полезная проверка — сумма по документам. Сначала посчитайте меру на уровне каждой позиции, затем сверните позиции до заказа и сравните итог с учётной системой. Отдельно найдите заказ с возвратом, скидкой и пустым значением. Именно такие строки показывают, что выражение работает не только на аккуратном демонстрационном наборе.

Как собрать расчёт по шагам

1. Определите уровень строки

Решите, что является одной операцией: позиция заказа, платёж, день или клиент.

2. Запишите выражение

Соберите формулу результата одной строки обычными словами и на одном числовом примере.

3. Выберите таблицу

Передайте SUMX только нужные строки; фильтрацию лучше видеть отдельно.

4. Сверьте ручной пример

Пересчитайте несколько строк калькулятором и сравните с Power BI.

5. Проверьте производительность

На большой модели уберите лишние итерации и заранее подготовьте устойчивые признаки в источнике.

Ограничения и типичные ошибки

  • Использовать SUMX там, где достаточно SUM одного готового столбца.
  • Итерировать таблицу с дублями и незаметно удваивать результат.
  • Считать среднее из средних без правильного веса.
  • Собирать огромную формулу, которую невозможно проверить на одной строке.

После изменения модели проверьте контрольный набор вручную и запишите дату проверки. Если источник, связь или определение показателя изменились, старый результат уже нельзя молча сравнивать с новым.

Как я делаю это в проектах

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

Что сделать прямо сейчас

Найдите одну меру SUMX и проверьте её на трёх строках исходных данных, включая скидку или другое изменяемое условие.

Если хотите собрать расчёт вместе с моделью и нормальной проверкой данных, можно обсудить задачу с ФАНалитикой. Начнём с одного показателя и доведём его до решения, а не до ещё одной формулы в коллекции.

Первичные источники

ПО ТЕМЕ

Продолжить разбираться

Похожие материалы, которые развивают тему и помогают посмотреть на задачу с другой стороны.

Павел переставляет прозрачные фильтры перед одним расчётом и получает изменившийся результат
Управление5 мин389

CALCULATE в DAX: как меняется контекст фильтра

CALCULATE нужна, когда меру надо посчитать не в текущем наборе данных, а в специально изменённом контексте. Разберём это на продажах без магии и шаманства вокруг DAX.

↗

Можно просто написать

Познакомимся и обсудим задачу

Расскажите, что хотите улучшить или в чём пока не можете разобраться. Необязательно приходить с готовым ТЗ — вместе посмотрим на ситуацию и поймём, с чего начать.

Работаем без заявки.

Не оставляйте номер и не ждите звонка. Просто напишите сами туда, где вам удобно.