Примеры
Перед просмотром примеров, изучите процедуру создания мер.
Система проверяет вводимые DAX-формулы на наличие синтаксических ошибок. Неправильно написанные функции подчеркиваются волнистой красной линией, а при наведении курсора мыши на такую функцию появляется пояснительный текст. Это позволяет легко обнаруживать и исправлять ошибки.
Пример 1. Расчет выручки в разбивке по магазинам и по продажам со скидками
Выручка считается по формуле:
Количество товара в заказе умножить на цену за единицу товара, минус скидка в заказе. Для построчного вычисления используемSUMX
:SUMX ( factonlinesales, factonlinesales[unitprice] * factonlinesales[salesquantity] - factonlinesales[discountamount] )
Для визуализации используем линейчатую диаграмму. На нее мы выведем нашу меру в разбивке по магазинам:
Для того, чтобы отобразить данные по продажам, по которым были акции, используем виджет Фильтр:
Если есть необходимость рассчитать сразу продажи со скидками, без использования фильтра, будем использовать следующую формулу:
CALCULATE ( SUMX ( factonlinesales, factonlinesales[unitprice] * factonlinesales[salesquantity] - factonlinesales[discountamount] ), FILTER ( dimpromotion, dimpromotion[promotioncategory] IN { "Store" } ) )
Пример 2. Расчет доли продаж по продуктам внутри бренда
Сначала рассчитаем доли продаж по брендам.
Removefilters
в знаменателе отменяет все фильтры по измерениюdimproduct
, таким образом, доля считается корректно:Доли по брендам = SUM ( factonlinesales[salesamount] ) / CALCULATE ( SUM ( factonlinesales[salesamount] ), REMOVEFILTERS ( dimproduct ) )
Теперь добавим в разбивку продукт. Мера будет считать долю каждого продукта от общей суммы продаж:
Теперь мы посчитаем долю каждого продукта внутри бренда. Для этого мы сгруппируем продажи по бренду с помощью функции
SUMMARIZE
:
Пример 3. Расчет итоговой прибыли с учетом типа клиента
Рассчитывать прибыль будем как для физических лиц, у которых имеется скидка, указанная в столбце discountamount, так и для юридических лиц, у которых также есть скидка, указанная в столбце bonus.
Используемые данные:
Таблица фактов | Таблица измерений |
---|---|
fact
| dimcustomer
|
Для расчета прибыли для физически лиц, создадим меру Прибыль для физ лиц и введем следующую формулу:
где:
fact[discountamount]
– скидка, которая вычитается из общей суммы продажfact[salesamount]
;функция
FILTER
фильтрует измеренияdimcustomer
по значению столбцаcustomertype
, в данном случае равномуPerson
- т.е. фильтрует только физических лиц.
Таким образом, формула рассчитывает сумму прибыли для всех фактов, относящихся к физическим лицам.
Аналогичным образом создается мера Прибыль для юр лиц с тем отличием, что вместо fact[discountamount]
мы будем использовать fact[bomus]
, а вместо IN {"Person"}
будем использовать IN {"Company"}
:
В результате мы можем, например, создать следующую диаграмму с использованием созданных мер:
При сложении двух формул, мы получим прибыль с учетом типа клиента:
Пример 4. Расчет суммы продаж за указанный период (несколько месяцев)
В этом примере мы попробуем понять, сколько выручки приносит “целевой“ период.
Используемые данные:
Таблица фактов | Таблица измерений |
---|---|
fact
| dimdate
|
Для получения необходимых расчетов мы будем использовать следующие формулы:
Расчет количества продаж за указанный период:
где:
COUNT (fact[onlinesaleskey])
– подсчитывает количество транзакций в столбце onlinesaleskey
таблицы фактов fact
.
FILTER
– фильтрует таблицу dimdate
по определенному условию, которое состоит из двух частей:
dimdate[calendarmonth] >= 202207
- выбираются только те строки таблицыdimdate
, у которых значение в столбцеcalendarmonth
больше или равно202207
(июль 2022 года);dimdate[calendarmonth] < 202209
- выбираются только те строки, у которых значение в столбцеcalendarmonth
меньше202209
(сентябрь 2022 года).
Таким образом, фильтр выбирает только те строки из таблицы, которые соответствуют периоду с июля по сентябрь 2022 года.
Расчет суммы продаж за указанный период:
Аналогичным образом мы проведем расчет суммы продаж (с небольшими изменениями):
где:
SUM (fact[salesamount])
– вычисляет сумму значений из столбца salesamount
таблицы fact
.
FILTER
– как показано в примере выше, выбирает только те строки из таблицы, которые соответствуют периоду с июля по сентябрь 2022 года.
В результате выполнения этой формулы будет получена сумма продаж за определенный период времени (с июля по сентябрь 2022 года).
В качестве итога, используя созданные меры, мы может визуализировать полученные результаты следующим образом:
Пример 5. Расчет динамики продаж за определенный период
В данном примере мы рассчитаем динамику продаж за два месяца и за два календарных года, чтобы понять какие товары не приносят прибыли и исключить их из ассортимента.
Используемые данные:
Таблица фактов | Таблица измерений |
---|---|
fact
| dimdate
|
Расчет динамики продаж по месяцам
Для расчета динамики продаж за два месяца (в нашем примере август-сентябрь), мы сделаем следующее:
Сперва мы рассчитаем объем продаж за август. Для этого мы создадим меру с использованием следующей формулы:
где:
SUM (fact[salesamount])
– вычисляет сумму значений из столбцаsalesamount
таблицыfact
;FILTER
– выбираются только те строки таблицыdimdate
, у которых значение в столбцеcalendarmonth
равно202208
(август 2022 года);Далее рассчитаем объем продаж за сентябрь. Для этого мы будем использовать аналогичную формулу, в которой заменим лишь номер месяца (август):
где
202209
– сентябрь 2022 года.Теперь самое время получить разницу между двумя этими результатами, чтобы определить динамику продаж. Для этого мы вычтем значения, полученные за август из значений, полученных за сентябрь:
Результат можно визуализировать, например, с помощью таблицы или диаграммы:
Расчет динамики продаж по годам
Динамика продаж по годам рассчитывается аналогичным образом – нам необходимо только заменить месяцы на года и использовать соответствующий столбец (calendaryear), где прописаны года:
где
FILTER (dimdate, dimdate[calendaryear] = 2022)
и FILTER (dimdate, dimdate[calendaryear] = 2021)
фильтруют данные по годам.
Созданную меру можно добавить в таблицу для полноты картины:
Чтобы иметь быстрый доступ к полученной статистике, можно создать дашборд:
Пример 6. Расчет прибыли по каждой продаже за месяц с учетом дополнительных платежей
Рассмотрим пример, в котором прибыль рассчитывается по каждой продаже с учетом различных платежей (например, за аренду помещений). Дополнительные платежи оплачиваются в разное время и не являются заказами. Рассматриваемый период - сентябрь 2022 года.
Используемые данные:
Таблица фактов | Таблица измерений |
---|---|
fact
| dimdate
|
Для проведения расчетов мы воспользуемся следующей формулой:
Первая часть формулы суммирует выручку от каждой продажи:
SUMX (fact, fact[salesamount]SUMX (fact, fact[salesamount]
и вычитает сумму скидки:
- fact[discountamount])
Далее применяется фильтр, чтобы учитывать только транзакции типа “order
" в столбце transactiontype
таблицы fact
.
Вторая и третья части рассчитывают дополнительные платежи по каждому заказу:
Во второй части формулы используется CALCULATE-функция, которая вычисляет сумму всех платежей за сентябрь 2022 года, относящихся к продажам за этот же период. Функция REMOVEFILTERS
используется для того, чтобы убрать все фильтры из таблицы fact
. Функция FILTER
добавляет фильтры по типу транзакции и месяцу календаря.
В третьей части CALCULATE-функция подсчитывает количество продаж онлайн за сентябрь 2022 года. Функция REMOVEFILTERS
убирает все фильтры из таблицы "fact
", функция и FILTER
добавляет фильтры по типу транзакции и месяцу календаря.
Дополнительные платежи вычитаются из выручки, и мы получаем прибыль по каждой продаже с учетом дополнительных расходов за сентябрь 2022 года:
Пример 7. Расчет суммы накопленного итога
В данном примере мы рассчитаем накопленный итог продаж за определенный период времени. Для расчетов мы будем использовать формулу, которая позволяет посчитать накопленный итог со сбросом по годам. С помощью такой формулы можно выполнить любое разбиение визуализируемых данных – по дням, неделям, месяцам, кварталам и полугодиям.
Используемые данные
Таблица фактов | Таблица измерений |
---|---|
facts
| dimdate
|
Для проведения расчетов, воспользуемся следующей формулой:
Данная формула легла в основу новой меры – Накопленный итог, и с ее помощью мы визуализировали накопленный итог со сбросом по годам:
На изображении видно, что начиная с первого месяцам 2009 года накопление сбрасывается и происходит дальнейший накопительный расчет.
Накопленный итог без сброса по годам пока не работает.
Данная формула функционирует в бета-режиме. Рекомендуется тестирование на небольшом объеме данных.
Пример 8. Вычисление средней цены товара для каждого чека
В данном примере мы вычислим среднюю цену товара для каждого чека, используя данные о ценах и номерах заказов из таблицы factonlinesales
.
Используемые данные:
Таблица фактов |
---|
factonlinesales
|
Для вычислений мы воспользуемся следующей формулой:
Данная формула состоит из нескольких шагов:
Вычисляется сумма цен всех товаров в чеках без учета фильтров (
REMOVEFILTERS
). Для этого сначала применяется функцияCALCULATE
, которая вычисляет сумму цен всех товаров по каждому уникальному номеру заказа (salesordernumber
) из таблицыfactonlinesales
, затем функцияREMOVEFILTERS
удаляет фильтры, которые могут изменить сумму цен, и возвращает данные без фильтров.Вычисляется количество товаров в каждом чеке без учета фильтров. Для этого также используется функция
CALCULATE
с аналогичными параметрами.Вычисляется средняя цена товара по каждому чеку с помощью функции
DIVIDE
. Результат первого шага делится на результат второго шага, чтобы получить среднюю цену товара по каждому чеку.Результат деления на ноль заменяется на пустую строку (
BLANK()
).
Пример 9. Расчет среднего чека
В данном примере мы рассчитаем сумму среднего чека. Средний чек показывает, сколько готовы тратить клиенты или покупатели. По его сумме делают выводы о лояльности покупателей, их покупательской способности, эффективности маркетинга. Чтобы увеличить средний чек, магазины придумывают акции, сужают или расширяют ассортимент, меняют способы оплаты, раздают промокоды и т.д.
Используемые данные:
Таблица фактов |
---|
факты онлайн продаж
|
Для вычислений мы воспользуемся следующей формулой:
Данная формула сначала вычисляет сумму произведений цены за единицу товара (unitprice
) и количества проданных единиц (salesquantity
) для всех строк таблицы факты онлайн продаж
. Затем она удаляет фильтры (если они есть), примененные к таблице, и суммирует количество номеров заказов (salesordernumber
).
После этого происходит деление на результат второго CALCULATE
, который считает количество уникальных номеров заказов (с помощью DISTINCTCOUNT
), исключая фильтры, и также суммирует номера заказов. Это и дает среднюю цену проданных товаров.
Пример 10. Расчет меры по условию с проверкой на уровне строк и учетом коэффициента
С помощью DAX-формул вы можете вычислять числовую меру, учитывая определённый коэффициент и проверяя выполнение конкретного условия для каждой строки данных. Возможность учёта различных условий и коэффициентов позволяет получить более точные и полезные результаты для анализа данных. Ниже приведено несколько формул, которые позволяют выполнять эти задачи.
Используемые данные:
Таблица фактов |
---|
факты онлайн продаж
|
Формула 1
Формула ниже суммирует значения в столбце salesamount
таблицы факты онлайн продаж, но с одним условием: если значение идентификатора продукта (productkey
) равно 6
, то значение salesamount
умножается на 0.8 (что даёт 80% от исходного значения). Если условие не выполняется, то используется исходное значение salesamount
. Это повторяется для каждой строки в таблице факты онлайн продаж
.
Таким образом, формула дает суммарное значение продаж, но продажи для продукта с идентификатором 6
учитываются с коэффициентом 0.8
.
Формула 2
Формула, приведенная ниже, суммирует значения столбца salesamount
, но только для тех строк, где значение идентификатора продукта отлично от 6
. Если условие не выполняется (т.е. если идентификатором продукта является 6
), то вместо значения salesamount
используется 0
. Результатом является сумма значений из столбца salesamount
для всех строк, где productkey
отличен от 6
. Если в строке productkey
равен 6
, то значение salesamount
в сумму не включается.
Пример 11. Расчет скидки с учётом промоакции
Платформа поддерживает создание вложенных условия с помощью нескольких функций IF. Ниже приведен пример использования вложенной функции IF
внутри функции SUMX
. Данная формула суммирует продажи по всем строкам таблицы factonlinesales
. Если promotionkey
равно 6, то salesamount
умножается на 0,8
. Если promotionkey
равно 7
, то salesamount
умножается на 0,7
. Если ни одно из этих условий не выполняется, то salesamount
остается неизменным. Иными словами, если промоакция имеет код 6, то применяется скидка 20%; если промоакция имеет код 7, то применяется скидка 30%. В противном случае, никаких скидок не применяется.
Смотрите также
На этой странице
Пример 1. Расчет выручки в разбивке по магазинам и по продажам со скидками
Пример 4. Расчет суммы продаж за указанный период (несколько месяцев)
Пример 6. Расчет прибыли по каждой продаже за месяц с учетом дополнительных платежей
Пример 10. Расчет меры по условию с проверкой на уровне строк и учетом коэффициента
Время чтения: 4 мин.
Нужна дополнительная помощь?