Записки охотника

Быстрые меры, или хозяйкам на заметку

Мелкие радости
Рвав-рвав, сегодня я — собака-грязесобирака!

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

Пример:

  • Имеется таблица, содержащая исходную информацию в виде даты, номенклатуры и количества товаров:

Таблица
Товары на складе

Задача:

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

  • быстрые меры — построение автоматическим путем;
  • обычные меры — построение вручную.

Решение при помощи функционала «Быстрые меры»:

Согласно документации, данный функционал построения мер «…запускает набор команд DAX в фоновом режиме на основе данных, которые вы вводите в диалоговое окно…».
По своей сути — это некий помощник пользователя, предлагающий использовать встроенные механизмы для выполнения тех или иных расчетов.

  • Для запуска данного функционала можно, например, нажать кнопку «Быстрая мера», расположенную на закладке «Главная»:

Быстрая мера
Создание быстрой меры: шаг 1

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

Быстрая мера
Создание быстрой меры: шаг 2

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

Быстрая мера =
CALCULATE (
SUM ('Товары на складе'[Количество]),
FILTER (
ALLSELECTED ('Товары на складе'[Дата]),
ISONORAFTER ('Товары на складе'[Дата], MAX ('Товары на складе'[Дата]), DESC)
)
)

  • Проверка получившегося результата:

Матрица
Накопительный итог при помощи функционала "Быстрая мера"

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

Формирование меры для подсчета нарастающего итога вручную:

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

Мера =
CALCULATE (
SUM ('Товары на складе'[Количество]),
FILTER (
ALL ('Товары на складе'),
'Товары на складе'[Дата] <= MAX ('Товары на складе'[Дата])
),
VALUES ('Товары на складе'[Товар])
)

  • Проверка получившегося результата:

Матрица
Накопительный итог

Рвав-рвав, здесь конечная формула получилась гораздо «легче», и теперь главное — это проверить корректность полученного результата.

Сопоставление результатов:

  • При отсутствии фильтрации данных оба расчета идентичны и работают корректно, поскольку значение нарастающего итога для месяца на последнюю дату считается как:
— для 1-ой строки: 10 + 15 + 20 = 45;
— для 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» даже при фильтрации периода, однако это неявное поведение, по сути фильтр здесь влияет только на количество столбцов визуального элемента;
  • Дополнительная логика, встроенная в механизм «Быстрые меры» иногда может быть не совсем понятна конечному пользователю, однако это не означает, что данная конструкция является неправильной / некорректной / и пр., просто она другая, и ее применение может быть действительно обосновано.

Танки грязи не боятся,
Ваш Смайл.