При построении аналитических отчетов в системе компоновки данных (СКД) нередко возникает необходимость оценить разброс значений относительно среднего уровня — рассчитать среднеквадратичное (стандартное) отклонение или дисперсию. Рассмотрим, какими встроенными возможностями обладает платформа 1С:Предприятие 8.3 и как правильно настроить такие вычисления в отчете.
Начиная с версии платформы 1С 8.3, в язык выражений системы компоновки данных добавлены специализированные статистические агрегатные функции. Разберем основные из них:
(N - 1), где N — количество элементов в выборке. Если группировка содержит всего одно значение, функция возвращает NULL из-за невозможности деления на ноль.N). При расчете для единственного значения функция возвращает 0.Проанализируем пошаговый порядок добавления расчета в схему компоновки данных:
Посмотрим на примеры выражений для ресурсов:
Для расчета несмещенного стандартного отклонения по выборке:
СтандартноеОтклонениеВыборки(СуммаПродажи)
Для расчета отклонения генеральной совокупности:
СтандартноеОтклонениеГенеральнойСовокупности(Количество)
При необходимости можно задать индивидуальные формулы для разных уровней группировок (колонка Рассчитывать по...), например, вычислять стандартное отклонение только для итоговых строк конкретных разрезов отчета или общего итога.
Выясним важные технические нюансы, о которых следует помнить при использовании статистических агрегатов:
NULL, а также пустые и нечисловые данные автоматически отсекаются платформой и не увеличивают количество записей N в формуле. Если весь набор данных группировки состоит исключительно из NULL, результатом функции также будет NULL.ВЫБРАТЬ) эти функции недоступны.Если требуется реализовать нестандартную математическую логику обработки ряда чисел, рассмотрим вариант с передачей массива данных во встроенный язык 1С через функцию общего модуля:
Массив(), чтобы собрать все значения группировки в коллекцию.Пример выражения на вкладке «Ресурсы»:
МойСтатистическийМодульКлиентСервер.РассчитатьОтклонение(Массив(СуммаПродажи))
Пример кода экспортной функции в общем модуле:
Функция РассчитатьОтклонение(МассивЗначений) Экспорт
КоличествоЭлементов = МассивЗначений.Количество();
Если КоличествоЭлементов < 2 Тогда
Возврат 0;
КонецЕсли;
// Вычисляем среднее арифметическое
Сумма = 0;
Для Каждого ТекЗначение Из МассивЗначений Цикл
Сумма = Сумма + ТекЗначение;
КонецЦикла;
Среднее = Сумма / КоличествоЭлементов;
// Вычисляем сумму квадратов отклонений
СуммаКвадратов = 0;
Для Каждого ТекЗначение Из МассивЗначений Цикл
Отклонение = ТекЗначение - Среднее;
СуммаКвадратов = СуммаКвадратов + (Отклонение * Отклонение);
КонецЦикла;
// Возвращаем стандартное отклонение выборки
Возврат Math.Sqrt(СуммаКвадратов / (КоличествоЭлементов - 1));
КонецФункции
Использование встроенной функции СтандартноеОтклонениеВыборки() в СКД является предпочтительным способом решения задачи, так как расчет выполняется на уровне платформы без дополнительных накладных расходов на вызовы процедур встроенного языка.