Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 14 Следующий »

Перед просмотром примеров, изучите процедуру создания мер.

Система проверяет вводимые DAX-формулы на наличие синтаксических ошибок. Неправильно написанные функции подчеркиваются волнистой красной линией, а при наведении курсора мыши на такую функцию появляется пояснительный текст. Это позволяет легко обнаруживать и исправлять ошибки.

Пример 1. Расчет выручки в разбивке по магазинам и по продажам со скидками

  1. Выручка считается по формуле:
    Количество товара в заказе умножить на цену за единицу товара, минус скидка в заказе. Для построчного вычисления используем SUMX:
    SUMX(factonlinesales, factonlinesales[unitprice]*factonlinesales[salesquantity] - factonlinesales[discountamount])

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

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

  4. Если есть необходимость рассчитать сразу продажи со скидками, без использования фильтра, будем использовать следующую формулу:

    CALCULATE(SUMX(factonlinesales, factonlinesales[unitprice]*factonlinesales[salesquantity] - factonlinesales[discountamount]), FILTER(dimpromotion,dimpromotion[promotioncategory] IN{"Store"})
    )


Пример 2. Расчет доли продаж по продуктам внутри бренда

  1. Сначала рассчитаем доли продаж по брендам.
    Removefilters в знаменателе отменяет все фильтры по измерению dimproduct, таким образом, доля считается корректно:

  2. Теперь добавим в разбивку продукт. Мера будет считать долю каждого продукта от общей суммы продаж:

  3. Теперь мы посчитаем долю каждого продукта внутри бренда. Для этого мы сгруппируем продажи по бренду с помощью функции SUMMARIZE:

Пример 3. Расчет итоговой прибыли с учетом типа клиента

Рассчитывать прибыль будем как для физических лиц, у которых имеется скидка, указанная в столбце discountamount, так и для юридических лиц, у которых также есть скидка, указанная в столбце bonus.

Используемые данные:

Таблица фактов

Таблица измерений

fact
Используемые столбцы:

  • salesamount – сумма, которую заплатил клиент с учетом количества;

  • discountamount – сумма скидки;

  • bonus – бонус (отдельный для каждого клиента).

dimcustomer
Используемый столбец:

  • customertype – тип клиента (“Person“ – физическое лицо, “Company“ – юридическое).

Для расчета прибыли для физически лиц, создадим меру Прибыль для физ. лиц и введем следующую формулу:

Прибыль для физ. лиц = CALCULATE (SUMX (fact, fact[salesamount] - fact[discountamount]), FILTER (dimcustomer, dimcustomer[customertype] IN {"Person"} ))

где:

  • fact[discountamount] – скидка, которая вычитается из общей суммы продаж fact[salesamount];

  • функция FILTER фильтрует измерения dimcustomer по значению столбца customertype, в данном случае равному Person - т.е. фильтрует только физических лиц.

Таким образом, формула рассчитывает сумму прибыли для всех фактов, относящихся к физическим лицам.

Аналогичным образом создается мера Прибыль для юр. лиц с тем отличием, что вместо fact[discountamount] мы будем использовать fact[bomus], а вместо IN {"Person"} будем использовать IN {"Company"}:

Прибыль для юр. лиц = CALCULATE (SUMX (fact, fact[salesamount] - fact[bonus]), FILTER (dimcustomer, dimcustomer[customertype] IN {"Company"} ))

В результате мы можем, например, создать следующую диаграмму с использованием созданных мер:

При сложении двух формул, мы получим прибыль с учетом типа клиента:

CALCULATE (
    SUMX (fact, fact[salesamount] - fact[discountamount]), 
    FILTER (dimcustomer, dimcustomer[customertype] IN {"Person"} )
)
    + CALCULATE (
        SUMX (fact, fact[salesamount] - fact[bonus]), 
        FILTER (dimcustomer, dimcustomer[customertype] IN {"Company"} )
)

Пример 4. Расчет суммы продаж за указанный период (несколько месяцев)

В этом примере мы попробуем понять, сколько выручки приносит “целевой“ период.

Используемые данные:

Таблица фактов

Таблица измерений

fact
Используемые столбцы:

  • salesamount – сумма, которую заплатил клиент с учетом количества;

  • onlinesaleskey – уникальный идентификатор заказа (транзакции);

dimdate
Используемый столбец:

  • calendarmonth – год + месяц.

Для получения необходимых расчетов мы будем использовать следующие формулы:

Расчет количества продаж за указанный период:

CALCULATE (
COUNT (fact[onlinesaleskey]),
FILTER (
    dimdate,
    AND (dimdate[calendarmonth] >=
    202207, dimdate[calendarmonth] < 202209)
    )
)

где:

COUNT (fact[onlinesaleskey]) – подсчитывает количество транзакций в столбце onlinesaleskey таблицы фактов fact.

FILTER – фильтрует таблицу dimdate по определенному условию, которое состоит из двух частей:

  • dimdate[calendarmonth] >= 202207 - выбираются только те строки таблицы dimdate, у которых значение в столбце calendarmonth больше или равно 202207 (июль 2022 года);

  • dimdate[calendarmonth] < 202209 - выбираются только те строки, у которых значение в столбце calendarmonth меньше 202209 (сентябрь 2022 года).

Таким образом, фильтр выбирает только те строки из таблицы, которые соответствуют периоду с июля по сентябрь 2022 года.

Расчет суммы продаж за указанный период:

Аналогичным образом мы проведем расчет суммы продаж (с небольшими изменениями):

CALCULATE (
SUM (fact[salesamount]),
FILTER (
    dimdate,
    AND (dimdate[calendarmonth] >=
    202207, dimdate[calendarmonth] < 202209)
    )
)

где:

SUM (fact[salesamount]) – вычисляет сумму значений из столбца salesamount таблицы fact.

FILTER – как показано в примере выше, выбирает только те строки из таблицы, которые соответствуют периоду с июля по сентябрь 2022 года.

В результате выполнения этой формулы будет получена сумма продаж за определенный период времени (с июля по сентябрь 2022 года).

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

Пример 5. Расчет динамики продаж за определенный период

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

Используемые данные:

Таблица фактов

Таблица измерений

fact
Используемые столбцы:

  • salesamount – сумма, которую заплатил клиент с учетом количества;

dimdate
Используемый столбец:

  • calendarmonth – год + месяц;

  • calendaryear – год.

Расчет динамики продаж по месяцам

Для расчета динамики продаж за два месяца (в нашем примере август-сентябрь), мы сделаем следующее:

  1. Сперва мы рассчитаем объем продаж за август. Для этого мы создадим меру с использованием следующей формулы:

    CALCULATE (
    SUM (fact[salesamount]),
    FILTER (dimdate, dimdate[calendarmonth] = 202208)
    )

    где:
    SUM (fact[salesamount]) – вычисляет сумму значений из столбца salesamount таблицы fact;
    FILTER – выбираются только те строки таблицы dimdate, у которых значение в столбце calendarmonth равно 202208 (август 2022 года);

  2. Далее рассчитаем объем продаж за сентябрь. Для этого мы будем использовать аналогичную формулу, в которой заменим лишь номер месяца (август):

    CALCULATE (
    SUM (fact[salesamount]),
    FILTER (dimdate, dimdate[calendarmonth] = 202208)
    )

    где 202209 – сентябрь 2022 года.

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

    CALCULATE (
    SUM (fact[salesamount]),
    FILTER (dimdate, dimdate[calendarmonth] = 202208)
    )
    - CALCULATE (
    SUM (fact[salesamount]),
    FILTER (dimdate, dimdate[calendarmonth] = 202208)
    )

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

Расчет динамики продаж по годам

Динамика продаж по годам рассчитывается аналогичным образом – нам необходимо только заменить месяцы на года и использовать соответствующий столбец (calendaryear), где прописаны года:

CALCULATE (
SUM (fact[salesamount]),
FILTER (dimdate, dimdate[calendaryear] = 2022)
)
- CALCULATE (
SUM (fact[salesamount]),
FILTER (dimdate, dimdate[calendaryear] = 2021)
)

где

FILTER (dimdate, dimdate[calendaryear] = 2022) и FILTER (dimdate, dimdate[calendaryear] = 2021) фильтруют данные по годам.

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

Чтобы иметь быстрый доступ к полученной статистике, можно создать дашборд:

Пример 6. Расчет прибыли по каждой продаже за месяц с учетом дополнительных платежей

Рассмотрим пример, в котором прибыль рассчитывается по каждой продаже с учетом различных платежей (например, за аренду помещений). Дополнительные платежи оплачиваются в разное время и не являются заказами. Рассматриваемый период - сентябрь 2022 года.

Используемые данные:

Таблица фактов

Таблица измерений

fact
Используемые столбцы:

  • salesamount – сумма, которую заплатил клиент с учетом количества;

  • onlinesaleskey – уникальный идентификатор заказа;

  • transactiontype – тип транзакции (order или payment)

dimdate
Используемый столбец:

  • calendarmonth – год + месяц;

Для проведения расчетов мы воспользуемся следующей формулой:

CALCULATE (
	SUMX (fact, fact[salesamount] - fact[discountamount]),
    FILTER (fact, fact[transactiontype] IN {“order”})
)
- CALCULATE (
	SUM (fact[payment]),
    REMOVEFILTERS (fact),
    FILTER (fact, fact[transactiontype] IN {“payment”}),
    FILTER (dimdate, dimdate[calendarmonth] = 202209)
)
/ CALCULATE (
	COUNT (fact[onlinesaleskey]),
	REMOVEFILTERS (fact),
	FILTER (fact, fact[transactiontype] IN {“order”}),
	FILTER (dimdate, dimdate[calendarmonth] = 202209)
)

Первая часть формулы суммирует выручку от каждой продажи:

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
Используемый столбец:

  • salesamount – сумма, которую заплатил клиент с учетом количества;

dimdate
Используемый столбец:

  • calendarmonth – номера месяцев с указанием года. Например: 200801, где 2008 - год.

Для проведения расчетов, воспользуемся следующей формулой:

CALCULATE (
            SUM ( 'facts'[salesamount] ),
            FILTER (
                ALL ( 'dimdate' ),
                AND( 'dimdate'[datekey] >= DATE ( YEAR(MAX('dimdate'[datekey])), 1, 1 ),

                  'dimdate'[datekey] <= MAXX ( 'dimdate', 'dimdate'[datekey] 
                ))
            )
        )

Данная формула легла в основу новой меры – Накопленный итог, и с ее помощью мы визуализировали накопленный итог со сбросом по годам:

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


Смотрите также

📄 Поддерживаемые функции DAX
📄 Создание мер

  • Нет меток