DAX
June 30, 2022

Как посчитать средний чек...?

Вы спросите:

- Что сложного посчитать средний чек? И что за многоточие в заголовке?

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

Кстати, про некоторые нюансы расчёта среднего можно почитать в статье "PowerBI - расчёт среднего с помощью DAX"

А теперь вопрос, который скрыт за многоточием: Как посчитать средний чек только по тем чекам, в которые входит выбранный товар?

Небольшой пример:

Пример данных для расчёта

В примере выше всего 3 чека на сумму 170, а значит средний чек будет равен 56,66. Но, если мы хотим посчитать среднее значение по чекам, в которых была конфета, а таких чеков было 2 на сумму 120, то мы получим средний чек равный 60.

Обратимся к уже знакомому набору данных:

Схема модели данных

Создадим две простые меры, а также срез для выбора товара, относительно которого будем считать, и визуализацию в виде таблицы:

Базовые меры

Добавим меру, которая считает средний чек:

Средний чек по одному товару

Как видно на скриншоте, средний чек, как и сумма заказов, и количество заказов, рассчитывается в контексте фильтра по товару "AWC Logo Cap". То есть в знаменателе находится верное число - количество заказов, в которых присутствует данный товар, а вот в числителе сумма заказов неверная, так как не учитываются прочие товары, которые были в этих заказах.

Создадим новую меру, чтобы рассчитать верную сумму заказов:

Сумма по всем товарам в выбранных заказах

Что происходит в мере:

  • С помощью функции ALL сбрасываются все фильтры с таблицы Products (Товаров)
  • С помощью функции VALUES сохраняются фильтры по номеру заказа

Для тех, кто только начинает изучать DAX или ещё плохо разбирается в том как работают контексты, поясню, что на аргументы фильтра (всё что указано после запятой после первого аргумента - выражения или меры) функции CALCULATE, также действуют внешние фильтры. Таким образом, в ALL мы получаем список всех товаров, а выражение VALUES(Sales[OrderNumber]) сначала фильтруется значением среза по товарам, так как соответствующий фильтр приходит по связи из таблицы Products в таблицу Sales. Затем полученная таблица применяется в качестве фильтра к выражению [Sum Orders Qty]. При этом оба выражения фильтра действуют как логическое И.

Осталось создать меру, которая посчитает средний чек только по тем чекам, в которые входит выбранный товар:

Итоговый результат

Как видите, всё достаточно просто, но вот если вы захотите посчитать средний чек только по тем чекам, в которые входят все 2, 3...N выбранных товаров, то это будет задача уже посложнее и тема другой статьи)).

Ниже отчёт, чтобы посмотреть и ссылка, чтобы скачать.