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

Функции-агрегации: SUM, COUNT, DISTINCTCOUNT и другие

Базовые кирпичи DAX — суммы, средние и подсчёты. Разбираем, где какой брать и почему COUNTROWS надёжнее COUNT.

С этого урока начинается практическая часть: разбираем ключевые функции DAX по группам, и все примеры считаем на нашем учебном наборе. Откройте его в Power BI и повторяйте — числа должны совпадать.

Первая группа — агрегации. Это те самые SUM, AVERAGE, COUNT, которые вы знаете по Excel. Они берут столбец и сворачивают его в одно число под текущим контекстом.

Сумма и среднее

Выручка = SUM ( Продажи[Сумма] )

Свёртывает столбец Сумма в итог. По всему набору — около 9,8 млн ₽; в строке таблицы по округам — отдельно по каждому.

Средняя строка продажи = AVERAGE ( Продажи[Сумма] )

Среднее по столбцу Сумма. Но осторожно: это среднее по строкам продаж, а не средний чек. В одном заказе несколько строк — а AVERAGE усредняет строки, не заказы. Средний чек считается иначе (через итераторы — следующий урок).

Частая ловушка

AVERAGE(Продажи[Сумма]) — это не «средний чек». Это средняя величина строки. Если бизнес-смысл — «средний заказ», нужна агрегация по заказам, а не по строкам.

Подсчёты: COUNT, COUNTROWS, DISTINCTCOUNT

Считать «сколько» можно по-разному, и разница важна.

Число строк продаж = COUNTROWS ( Продажи )

COUNTROWS считает строки таблицы. Самый предсказуемый счётчик — берите его по умолчанию.

Число заказов = DISTINCTCOUNT ( Продажи[НомерЗаказа] )

DISTINCTCOUNT считает уникальные значения. Заказов меньше, чем строк, потому что в одном заказе несколько позиций. Это и есть настоящее «число заказов».

Проданных товаров (SKU) = DISTINCTCOUNT ( Продажи[КодТовара] )

Сколько разных товаров вообще продавалось.

COUNTROWS, а не COUNT

COUNT считает непустые числовые значения в столбце и легко вводит в заблуждение на пустых и текстовых. Для «сколько строк» берите COUNTROWS(Таблица) — он считает строки и не зависит от содержимого конкретного столбца.

Минимум и максимум

Максимальная продажа = MAX ( Продажи[Сумма] )
Минимальная продажа = MIN ( Продажи[Сумма] )

MIN/MAX работают и с числами, и с датами: MAX(Календарь[Дата]) вернёт последнюю дату в контексте — это пригодится в нарастающих итогах и time intelligence.

Явные меры против «перетащил поле»

Power BI умеет агрегировать поле, если просто бросить его в визуал (implicit measure). Не делайте так. Всегда пишите явную меру с именем:

  • её видно и можно переиспользовать;
  • логику видно и легко поправить;
  • на ней строятся другие меры (Средний чек ссылается на [Выручка]).
Правило

Любой показатель — это именованная мера, а не «поле, которое Power BI сам просуммировал». Это первая привычка аккуратной модели.

Проверь себя на наборе

Напишите Выручка = SUM ( Продажи[Сумма] ) и Заказов = DISTINCTCOUNT ( Продажи[НомерЗаказа] ), положите обе в карточки. Какие числа должны выйти на всём наборе?

Показать ответ

Выручка = 9 826 588 ₽, Заказов = 1194. Строк в Продажи — 3000, но это позиции заказов; уникальных заказов — 1194. Если выручка близка, но не сходится до рубля — почти всегда дело в типе столбца Сумма (загрузился текстом).

Что дальше

Агрегации сворачивают готовый столбец. Но что, если нужного столбца нет — например, выручку надо собрать из количества и цены, которая лежит в другой таблице? Тут на сцену выходят итераторы — функции с буквой X. Следующий урок.

Как правильно посчитать число заказов, если в одном заказе несколько строк?
COUNTROWS посчитает строки (их больше, чем заказов). Число именно заказов — это число уникальных номеров заказа, то есть DISTINCTCOUNT по столбцу НомерЗаказа.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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