При настройке отчетов в Системе Компоновки Данных (СКД) часто возникает ситуация, когда детальные записи рассчитываются верно, а итоговые показатели по группировкам выдают странные или неверные значения. Особенно часто это проявляется при использовании формул вида (Сумма(Колонка1) / Сумма(Колонка2) - 1) * 100. Давайте разберемся, почему так происходит и как привести отчет к корректному виду.
Основная причина ошибки кроется в том, как именно СКД обрабатывает ресурсы. Когда мы записываем формулу в поле Ресурсы, система для каждой группировки вычисляет Сумма(Колонка1) и Сумма(Колонка2) независимо друг от друга внутри этой группировки. После этого выполняется математическое действие.
Проблема возникает из-за того, что сумма отношений (процентов, полученных на детальном уровне) математически не равна отношению сумм (общих итогов по группировке). Если задача состоит в том, чтобы получить средневзвешенный результат или корректное отношение общих итогов, простая формула в ресурсах может давать неверную интерпретацию данных. Для изучения базовых принципов работы с итогами подойдёт пример настройки ресурсов в табличном отчёте СКД.
Первым делом проанализируем настройки самих ресурсов. В СКД существует колонка Рассчитывать по. Если она пустая, система пытается самостоятельно определить контекст, что не всегда ведет к ожидаемому результату.
Ресурсы в СКД.Рассчитывать по укажем явную группировку, для которой необходимо производить расчет. Если необходимо, чтобы итог считался на основе данных вышестоящей группировки, убедимся, что выбрана соответствующая иерархическая структура.Если простая формула не дает нужного результата, на помощь приходит мощная функция ВычислитьВыражение(). Она позволяет задать контекст вычисления, выходящий за рамки текущей строки или стандартного агрегата.
Эта функция позволяет нам буквально сказать системе: «Возьми результат вычисления Колонки1 по определенной группировке и раздели его на результат Колонки2 по той же самой группировке». Это исключает усреднение уже посчитанных процентов и заставляет СКД оперировать исходными данными группировок.
Пример использования функции:
ВычислитьВыражение("Сумма(Колонка1)", "Группировка") / ВычислитьВыражение("Сумма(Колонка2)", "Группировка")
Используя этот подход, мы гарантируем, что в числителе и знаменателе окажутся именно те суммы, которые мы видим в итогах соответствующих группировок.
Часто наиболее надежным и понятным методом является перенос логики расчета из Ресурсов в Вычисляемые поля.
Вычисляемые поля.(Колонка1 / Колонка2 - 1) * 100.Ресурсах для этого поля установим функцию Сумма() (или Среднее(), в зависимости от бизнес-логики отчета).Таким образом, СКД сначала рассчитает значение для каждой детальной записи, а затем корректно агрегирует их на уровнях группировок. Это позволяет избежать конфликтов при вычислении итогов, так как система будет работать с уже подготовленными данными.
Когда вы сталкиваетесь с «неправильным» расчетом итога, всегда задавайте себе вопрос: должен ли итог быть результатом агрегации предыдущих строк или результатом математической операции над суммарными значениями группировок?
Вычисляемые поля с агрегацией в Ресурсах.ВычислитьВыражение() с четким указанием области действия.Рассчитывать по, так как именно она определяет «границы» видимости данных для каждой строки отчета.Постепенно применяя эти методы, вы сможете добиться корректного отображения любых, даже самых сложных аналитических данных в ваших отчетах на СКД.