При разработке кросс-таблиц в системе компоновки данных (СКД) часто возникает задача: в строках вывести аналитику (например, номенклатуру или торговые точки), по горизонтали в колонках развернуть периоды (месяцы), а в конце таблицы вывести итоговый расчетный показатель — например, средние продажи за весь период. Если добавить вычисляемое поле в ресурсы и оставить стандартные настройки колонок, платформа автоматически добавит этот ресурс в каждую колонку месяца, что перегружает отчет и делает его нечитаемым.
Разберем причины такого поведения и рассмотрим несколько правильных способов вывода показателя в отдельной колонке в конце отчета.
По умолчанию в СКД дочерние элементы структуры наследуют настройки полей из вышестоящих группировок (свойство Авто на вкладке Выбранные поля). Если в корне отчета или на уровне таблицы выбраны поля КоличествоОборот и СредПродажа, платформа будет выводить оба этих ресурса на пересечении каждой строки и каждой колонки группировки Мес.
Чтобы зафиксировать вывод одного показателя по месяцам, а второго — только один раз в конце таблицы, необходимо либо переопределить состав выбранных полей для конкретных колонок, либо ограничить расчет ресурса по группировкам.
Проанализируем самый гибкий и наглядный подход — создание двух параллельных веток в структуре колонок таблицы.
Мес (период).Мес, перейдем на вкладку Выбранные поля в нижней панели, снимем флаг или удалим элемент Авто и добавим только ресурс КоличествоОборот. Теперь внутри месяцев будет отображаться только количество.Мес, то есть в корень ветки Колонки) добавим еще одну группировку без указания поля (пустая детальная группировка).СредПродажа.В результате такого разделения СКД построит таблицу, где сначала по горизонтали идут колонки по месяцам с продажами, а за ними отдельной фиксированной колонкой выводится расчет среднего значения.
Рассмотрим альтернативный способ, который настраивается на уровне описания ресурсов схемы компоновки данных.
Если для ресурса указать, по каким именно группировкам он должен рассчитываться, платформа автоматически скроет его из тех ячеек, где расчет не предусмотрен.
СредПродажа.Номенклатура, ТорговаяТочка) и ОбщийИтог.Мес включать в этот список не нужно.При такой настройке СКД не станет вычислять и отображать ресурс СредПродажа внутри группировок по месяцам, оставив его вывод только в строках и общих итогах таблицы.
Посмотрим на формулу, которую часто используют в запросе или вычисляемых полях:
СредПродажа = ОбщКол / (РазностьДат(КонецПериода(&НачалоПериода, "Месяц"), &КонецПериода, "Месяц"))
При таком расчете важно учитывать два момента:
РазностьДат: при подсчете разницы между началом года и серединой года функция считает количество границ интервалов. Например, разность между 01.01 и 30.06 вернет 5, а не 6 месяцев. Для корректного деления на количество месяцев периода формулу корректируют с добавлением единицы: РазностьДат(&НачалоПериода, &КонецПериода, "Месяц") + 1.
Сумма(КоличествоОборот) / Количество(Различные Мес)
или стандартной функции Среднее(КоличествоОборот), если каждая запись представляет собой отдельный месяц.Применяя настройку параллельных группировок в колонках таблицы совместно с точечным управлением составом выбранных полей, можно строить отчеты любой сложности с произвольным расположением расчетных показателей.