При построении аналитических отчетов в 1С мы часто сталкиваемся с необходимостью визуализации разнородных данных. Типичный пример — лепестковая (радарная) диаграмма, на которой нужно отобразить показатели с кардинально разными единицами измерения и диапазонами. Представим ситуацию: один показатель имеет норму от 0.1 до 1, а другой — от 800 до 1100. При прямой отрисовке первый показатель превратится в неразличимую точку в центре графика, в то время как второй займет все полезное пространство. Разберем, как решить эту задачу с помощью математического масштабирования и приведения данных к единому виду.
Проанализируем самый простой и интуитивно понятный способ — приведение всех значений к диапазону от 0 до 1 (или от 0% до 100%). Этот метод позволяет увидеть положение значения относительно его собственных границ нормы, а не в абсолютных величинах.
Для реализации этого метода нам необходимо знать минимально допустимое значение Минимум (нижняя граница нормы) и максимально допустимое Максимум (верхняя граница нормы) для каждого показателя. Формула расчета будет выглядеть следующим образом:
Результат = (ТекущееЗначение - Минимум) / (Максимум - Минимум)
Рассмотрим подробнее на примере:
Теперь на диаграмме оба значения будут находиться примерно на середине радиуса, что позволяет визуально сравнить их эффективность, несмотря на разницу в физических величинах. Посмотрим на пример функции на языке 1С:
Функция РассчитатьНормированноеЗначение(Значение, МинНорма, МаксНорма) Экспорт
Если МаксНорма = МинНорма Тогда
Возврат 0;
КонецЕсли;
Результат = (Значение - МинНорма) / (МаксНорма - МинНорма);
Возврат Результат;
КонецФункции
Выясним причину, по которой обычное линейное нормирование иногда неудобно: оно не дает наглядного представления о том, насколько сильно значение вышло за границы нормы. Если значение меньше минимума, мы получим отрицательное число, если больше максимума — число больше 1.
Для создания идеальной лепестковой диаграммы разберем стратегию «целевого коридора». Идея заключается в том, чтобы зафиксировать границы нормы на определенных графических отметках. Например, договоримся, что на нашей диаграмме:
В таком случае, если мы соединим точки 0.3 по всем осям, мы получим идеальный внутренний многоугольник нормы, а точки 0.7 — внешний. Пользователь сразу увидит: если линия показателя «гуляет» между этими кольцами — всё в порядке.
Проанализируем ситуацию, когда разброс данных составляет несколько порядков (например, от 1 до 10 000) и нам важно видеть динамику изменений как в малых, так и в больших числах. В этом случае обычная линейная шкала бесполезна. Поможет использование логарифма.
Применение функции Log10 позволяет «сжать» большие значения сильнее, чем маленькие. Однако стоит помнить, что логарифмическая шкала сложна для восприятия неподготовленным пользователем, так как расстояние между 1 и 10 на графике будет таким же, как между 100 и 1000. В 1С это можно реализовать через обращение к математическим функциям:
// Пример использования натурального логарифма
ЗначениеДляГрафика = Log(ТекущееЗначение);
Разберем более продвинутый статистический подход. Если задача стоит не просто в сравнении с нормой, а в поиске аномалий среди множества датчиков, целесообразно использовать Z-оценку. Она показывает, на сколько стандартных отклонений текущее значение удалено от среднего арифметического.
Формула: z = (x - μ) / σ, где μ — среднее значение, а σ — стандартное отклонение.
Этот метод полностью лишает данные размерности. Все показатели будут центрированы вокруг нуля. На лепестковой диаграмме это выглядит как отклонения от центрального круга (среднего значения). Все, что выходит за пределы ±2 или ±3, считается критическим выбросом.
При работе с объектом Диаграмма в 1С, помните о следующих нюансах:
1. Индивидуальные подписи. Поскольку мы выводим на диаграмму «искусственные» нормированные величины (0.44, 0.5 и т.д.), реальные значения (0.5 и 950) нужно выводить в легенду или в подсказки при наведении. Используйте свойство Текст для точек серии диаграммы.
2. Фиксация шкалы. Чтобы диаграмма не «прыгала» при изменении данных, всегда жестко задавайте границы шкалы значений. Для нормированных данных это обычно диапазон от 0 до 1 или от -0.5 до 1.5 (если важны выходы за границы).
// Пример настройки осей диаграммы
Диаграмма.ОбластьЗначений.МинимальноеЗначение = 0;
Диаграмма.ОбластьЗначений.МаксимальноеЗначение = 1;
Диаграмма.ОбластьЗначений.АвтоМаксимум = Ложь;
Диаграмма.ОбластьЗначений.АвтоМинимум = Ложь;
3. Визуальное зонирование. Если вы используете метод «целевого коридора», добавьте на диаграмму две дополнительные серии данных — «Минимум» и «Максимум». Закрасьте область между ними (если тип диаграммы позволяет) или просто сделайте их пунктирными линиями. Это создаст визуальный ориентир для пользователя, относительно которого он будет оценивать реальные показатели.
Использование вышеперечисленных методов позволяет превратить хаотичный набор цифр в наглядный инструмент бизнес-анализа, где состояние системы считывается одним взглядом на форму геометрической фигуры.