При разработке кросс-таблиц в Системе компоновки данных (СКД) часто возникает задача, когда ресурс должен рассчитываться по одной формуле в подвале колонок (по вертикали), а в итогах строк (по горизонтали) — совершенно по другому алгоритму или на основании другого показателя.
По умолчанию, если на вкладке Ресурсы задать выражение только для значения ОбщийИтог или оставить поле Рассчитывать по... пустым, платформа применяет указанное агрегатное выражение ко всем итогам без разделения направлений. Разберем по шагам, как настроить раздельный расчет штатным функционалом СКД и альтернативными способами.
Проанализируем механику работы СКД: в кросс-таблице ячейка итога по горизонтали вычисляется в контексте группировки строк (например, Группа), итог по вертикали — в контексте группировки колонок (например, Период), а правый нижний угол — в контексте общего пересечения ОбщийИтог.
СКД позволяет добавлять в список ресурсов одно и то же поле несколько раз, указывая для каждой строки индивидуальное выражение и конкретную группировку в колонке Рассчитывать по....
Рассмотрим пошаговую настройку для таблицы со строками Группа и колонками Период:
Сумма(СуммаОборот).Период. В поле Выражение задаем формулу вертикального итога, например: Сумма(СуммаОборот).Группа. В поле Выражение задаем индивидуальный алгоритм (например, среднее значение или вывод соседнего ресурса): Среднее(СуммаОборот) или Сумма(ДругойРесурс).ОбщийИтог и прописываем необходимое итоговое выражение.Если горизонтальный итог требует сложных математических операций с массивом значений по периодам, воспользуемся специализированными функциями компоновки данных в поле Выражение ресурса:
ВычислитьВыражение("Выражение", "Группа") — позволяет выполнить расчет формулы строго в контексте указанной группировки строк.ВычислитьВыражениеСГруппировкойМассив("Сумма(Поле)", "Период") — собирает значения вдоль колонок периода в массив, к которому затем можно применить внешнюю агрегатную функцию.Посмотрим на пример вычисления среднего значения по колонкам строки через массив:
Среднее(ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Период"))
Если в отчете используется множество ресурсов, и нестандартный итог требуется только для одного из них, можно изменить структуру колонок таблицы:
Период и в окне Другие настройки отключим вывод общих итогов по горизонтали (параметр Расположение общих итогов по горизонтали = Нет).Период, добавим соседнюю группировку колонок без указания поля (пустая группировка).Итого по строке).Разберем важные нюансы, которые необходимо учитывать при настройке:
ГруппаИерархия).