При разработке аналитических отчетов в системе компоновки данных (СКД) часто возникает задача сравнения показателей текущего периода с предыдущим. Типичный пример: отчет по продажам, где в колонках расположены месяцы, а в строках — категории товаров. Чтобы понять динамику, нам необходимо вычислить коэффициент отношения количества текущего месяца к предыдущему. Рассмотрим подробнее несколько способов реализации этой задачи: от использования встроенных функций языка выражений СКД до изменения структуры запроса.
Это наиболее современный и эффективный метод, который позволяет выполнять вычисления «на лету» без усложнения основного запроса. Функция ВычислитьВыражение позволяет обращаться к значениям других группировок или строк. Разберем по шагам, как настроить расчет коэффициента в поле «Ресурсы».
Для получения значения из предыдущей колонки (месяца) мы будем использовать следующий синтаксис в выражении ресурса:
Сумма(Количество) / ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Предыдущая", "Предыдущая")
Проанализируем параметры этой функции:
Важный нюанс: при таком расчете в самом первом месяце отчета возникнет ошибка деления на ноль или пустое значение, так как для него нет «предыдущей» записи. Чтобы отчет выглядел корректно, применим проверку:
ВЫБОР
КОГДА ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Предыдущая", "Предыдущая") > 0
ТОГДА Сумма(Количество) / ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Предыдущая", "Предыдущая")
ИНАЧЕ 0
КОНЕЦ
Если наш отчет представлен в виде кросс-таблицы, где месяцы — это колонки, нам нужно убедиться, что СКД понимает направление расчета. Выясним причину, по которой итоги могут считаться неверно: по умолчанию ресурс может рассчитываться для всех группировок сразу.
Чтобы коэффициент считался строго по горизонтали (по месяцам внутри категории товара), выполним следующие действия:
Месяц).Если использование сложных функций выражений кажется неудобным, мы можем решить задачу на уровне формирования данных. Рассмотрим ситуацию, когда мы соединяем набор данных сам с собой.
Для этого создадим два идентичных набора данных (запроса). Назовем их ОсновнойНабор и ПредыдущийПериод. В основном наборе мы получаем текущие данные, а во втором — те же данные, но будем связывать их со смещением по времени.
В настройках «Связи наборов данных» укажем следующее условие:
Источник связи: ОсновнойНабор
Приемник связи: ПредыдущийПериод
Условие связи: ОсновнойНабор.Категория = ПредыдущийПериод.Категория
И ОсновнойНабор.Месяц = ДобавитьКДате(ПредыдущийПериод.Месяц, "МЕСЯЦ", 1)
После такой настройки в каждой строке ОсновногоНабора нам станет доступно поле ПредыдущийПериод.Количество. Теперь расчет коэффициента превращается в простую арифметику в поле «Вычисляемые поля» или в ресурсах:
ЕстьNull(Количество, 0) / ЕстьNull(КоличествоПрошлыйМесяц, 1)
Иногда требуется найти отношение не к предыдущему месяцу, а к самому первому месяцу в выбранном периоде (базисный индекс). В этом случае мы снова воспользуемся функцией ВычислитьВыражение, но заменим параметры смещения.
Посмотрим на пример выражения:
Сумма(Количество) / ВычислитьВыражение("Сумма(Количество)", "Месяц", "Группировка", "Первая", "Первая")
Использование ключевого слова "Первая" заставит систему всегда брать значение из самой первой колонки текущей строки, что позволит построить график роста относительно начала года.
Чтобы отчет был читаемым, рекомендуем применить следующие настройки оформления для вычисляемого коэффициента:
ЧЦ=10; ЧДЦ=2 (числовое, 2 знака после запятой).Таким образом, мы проанализировали основные инструменты СКД для работы с временными смещениями. Использование встроенной функции ВычислитьВыражение является наиболее гибким методом, так как оно корректно работает даже при наличии фильтров и различных уровней группировок в отчете.