С этого урока начинается практическая часть: разбираем ключевые функции DAX по группам, и все примеры считаем на нашем учебном наборе. Откройте его в Power BI и повторяйте — числа должны совпадать.
Первая группа — агрегации. Это те самые SUM, AVERAGE, COUNT, которые вы знаете по Excel. Они берут столбец и сворачивают его в одно число под текущим контекстом.
Сумма и среднее
Выручка = SUM ( Продажи[Сумма] )
Свёртывает столбец Сумма в итог. По всему набору — около 9,8 млн ₽; в строке таблицы по округам — отдельно по каждому.
Средняя строка продажи = AVERAGE ( Продажи[Сумма] )
Среднее по столбцу Сумма. Но осторожно: это среднее по строкам продаж, а не средний чек. В одном заказе несколько строк — а AVERAGE усредняет строки, не заказы. Средний чек считается иначе (через итераторы — следующий урок).
AVERAGE(Продажи[Сумма]) — это не «средний чек». Это средняя величина строки. Если бизнес-смысл — «средний заказ», нужна агрегация по заказам, а не по строкам.
Подсчёты: COUNT, COUNTROWS, DISTINCTCOUNT
Считать «сколько» можно по-разному, и разница важна.
Число строк продаж = COUNTROWS ( Продажи )
COUNTROWS считает строки таблицы. Самый предсказуемый счётчик — берите его по умолчанию.
Число заказов = DISTINCTCOUNT ( Продажи[НомерЗаказа] )
DISTINCTCOUNT считает уникальные значения. Заказов меньше, чем строк, потому что в одном заказе несколько позиций. Это и есть настоящее «число заказов».
Проданных товаров (SKU) = DISTINCTCOUNT ( Продажи[КодТовара] )
Сколько разных товаров вообще продавалось.
COUNT считает непустые числовые значения в столбце и легко вводит в заблуждение на пустых и текстовых. Для «сколько строк» берите COUNTROWS(Таблица) — он считает строки и не зависит от содержимого конкретного столбца.
Минимум и максимум
Максимальная продажа = MAX ( Продажи[Сумма] )
Минимальная продажа = MIN ( Продажи[Сумма] )
MIN/MAX работают и с числами, и с датами: MAX(Календарь[Дата]) вернёт последнюю дату в контексте — это пригодится в нарастающих итогах и time intelligence.
Явные меры против «перетащил поле»
Power BI умеет агрегировать поле, если просто бросить его в визуал (implicit measure). Не делайте так. Всегда пишите явную меру с именем:
- её видно и можно переиспользовать;
- логику видно и легко поправить;
- на ней строятся другие меры (
Средний чекссылается на[Выручка]).
Любой показатель — это именованная мера, а не «поле, которое Power BI сам просуммировал». Это первая привычка аккуратной модели.
Напишите Выручка = SUM ( Продажи[Сумма] ) и Заказов = DISTINCTCOUNT ( Продажи[НомерЗаказа] ), положите обе в карточки. Какие числа должны выйти на всём наборе?
Показать ответ
Выручка = 9 826 588 ₽, Заказов = 1194. Строк в Продажи — 3000, но это позиции заказов; уникальных заказов — 1194. Если выручка близка, но не сходится до рубля — почти всегда дело в типе столбца Сумма (загрузился текстом).
Что дальше
Агрегации сворачивают готовый столбец. Но что, если нужного столбца нет — например, выручку надо собрать из количества и цены, которая лежит в другой таблице? Тут на сцену выходят итераторы — функции с буквой X. Следующий урок.