Рвав-рвав, сегодня я — собака-грязесобирака!
Перед вами — 5-я заметка из нашего цикла «Мелкие радости», и ниже мы рассмотрим использование функционала построения мер при помощи встроенного мастера — так называемые «Быстрые меры». Принцип работы с функционалом будет рассмотрен на примере расчета накопительного итога.
- Имеется таблица, содержащая исходную информацию в виде даты, номенклатуры и количества товаров:

Задача:
Рассчитать количество товаров с использованием накопительного итога в разрезе соответствующего периода времени (месяц), используя 2 способа создания меры для итогового расчета:
- быстрые меры — построение автоматическим путем;
- обычные меры — построение вручную.
Решение при помощи функционала «Быстрые меры»:
Согласно документации, данный функционал построения мер «…запускает набор команд DAX в фоновом режиме на основе данных, которые вы вводите в диалоговое окно…».
По своей сути — это некий помощник пользователя, предлагающий использовать встроенные механизмы для выполнения тех или иных расчетов.
- Для запуска данного функционала можно, например, нажать кнопку «Быстрая мера», расположенную на закладке «Главная»:

- После этого необходимо выбрать нужный тип расчета (в нашем случае это «Нарастающий итог») и заполнить соответствующие поля:

- При завершении настройки нужно нажать кнопку «OK», при этом результатом данных действий будет сформирована конструкция следующего вида (имя по умолчанию изменено):
Быстрая мера =
CALCULATE (
SUM ('Товары на складе'[Количество]),
FILTER (
ALLSELECTED ('Товары на складе'[Дата]),
ISONORAFTER ('Товары на складе'[Дата], MAX ('Товары на складе'[Дата]), DESC)
)
)
- Проверка получившегося результата:
Рвав-рвав, как вы видите, конструкция довольно монструозная (аж лапки подрагивают!), но зато для того, чтобы ее построить, потребовались минимальные усилия!
Формирование меры для подсчета нарастающего итога вручную:
- Формирование обычной меры для подсчета нарастающего итога вручную может выглядеть следующим образом:
Мера =
CALCULATE (
SUM ('Товары на складе'[Количество]),
FILTER (
ALL ('Товары на складе'),
'Товары на складе'[Дата] <= MAX ('Товары на складе'[Дата])
),
VALUES ('Товары на складе'[Товар])
)
- Проверка получившегося результата:
Рвав-рвав, здесь конечная формула получилась гораздо «легче», и теперь главное — это проверить корректность полученного результата.
Сопоставление результатов:
- При отсутствии фильтрации данных оба расчета идентичны и работают корректно, поскольку значение нарастающего итога для месяца на последнюю дату считается как:
— для 2-ой строки: 30 + 40 + 50 = 120.
Рвав-рвав, по результатам проверки задача считается выполненной, но, как всегда «Дьявол кроется в деталях».
- Если отфильтровать данные по какой-то строке, например, по значению «Груши», оба расчета также идентичны:

- Если отфильтровать данные по выбранным датам, например, по значениям «01.01.2020» и «01.03.2020», итоговые цифры не будут равны друг другу, так как для значения «01.03.2020» быстрая мера показывает результат нарастающего итога, равный «30», а обычная мера — «45»:

Выводы собаки Смайла:
- Как уже говорилось выше, в принципе, задача решена, поскольку при отсутствии фильтра по периоду расчеты обоими способами идентичны;
- При использовании механизма «Быстрые меры» в расчетах присутствует некая дополнительная логика (при фильтрации периода в значение нарастающего итога берется то, что указано явным образом, то есть для значения «01.01.2020» — «10», а «01.03.2020» — «20», сумма чего и составляет показанные в отчете «30».
- Обычная мера также стабильно показывает для значения «Март» нужные «45» даже при фильтрации периода, однако это неявное поведение, по сути фильтр здесь влияет только на количество столбцов визуального элемента;
- Дополнительная логика, встроенная в механизм «Быстрые меры» иногда может быть не совсем понятна конечному пользователю, однако это не означает, что данная конструкция является неправильной / некорректной / и пр., просто она другая, и ее применение может быть действительно обосновано.
Танки грязи не боятся,
Ваш Смайл.