Cy Logic Insights

Дизайн панели управления руководителя: правильные KPI, единый источник истины и производительность с PostgreSQL

Как создать панель управления, которой действительно пользуются руководители? Практическое руководство по выбору KPI, модели данных, материализованным представлениям и просмотру с учетом прав.

Большинство проектов панелей управления заканчиваются одинаково: экраны, открываемые с энтузиазмом в первую неделю, через месяц превращаются в графики, на которые никто не смотрит. Причина обычно не техническая; экран разработан в соответствии с возможностями данных, а не вопросами руководителя. В этой статье мы рассказываем, как сделать наоборот: сначала вопрос, затем показатель, потом модель данных и в последнюю очередь визуализация.

1. Начните с вопроса

Каждый индикатор должен быть привязан к вопросу для принятия решений. «График оборота» — это не индикатор, а данные. А вот вопрос «В каком филиале мы отстаем от цели в этом месяце и почему?» требует разбивки по обороту, цели, филиалу и причине отклонения. Например, для руководителя логистической компании вопросами могут быть: в каком регионе кроется источник задержек поставок, как меняется стоимость на одно транспортное средство, у каких клиентов дебиторская задолженность превышает срок.

2. Выбор KPI: мало, но взаимосвязанно

На экране руководителя достаточно пяти-восьми индикаторов. Для каждого индикатора определяются четыре параметра: определение (формула), источник (какая таблица/система), частота обновления и владелец. Показатель, определение которого невозможно записать, не должен выводиться на экран; такие понятия, как «эффективность», которые каждый рассчитывает по-своему, порождают лишь споры.

3. Единый источник истины (single source of truth)

Надежность панели управления зависит от того, дает ли один и тот же вопрос одинаковый ответ везде. Это означает, что расчеты должны производиться не в инструменте отчетности, а на уровне данных. Представления (view) и материализованные представления в PostgreSQL идеальны для этой задачи: формула KPI определяется один раз, и все экраны считывают одно и то же представление.

-- Örnek: aylık şube performansı (basitleştirilmiş)
create materialized view mv_branch_monthly as
select
  b.id            as branch_id,
  date_trunc('month', s.sold_at) as month,
  sum(s.net_amount)              as revenue,
  max(t.target_amount)           as target,
  sum(s.net_amount) - max(t.target_amount) as variance
from sales s
join branches b on b.id = s.branch_id
left join targets t on t.branch_id = b.id and t.month = date_trunc('month', s.sold_at)
group by b.id, date_trunc('month', s.sold_at);

create unique index on mv_branch_monthly (branch_id, month);
-- Yenileme (zamanlanmış görevle): refresh materialized view concurrently mv_branch_monthly;

4. Производительность: не сканируйте сырые данные при каждом открытии

Экран руководителя должен открываться за считанные секунды. Это обеспечивается материализованными представлениями, правильными индексами и предварительно рассчитанными сводками по периодам. Небольшое количество индикаторов, требующих данных в реальном времени (например, касса на сегодня), подпитывается изделяющимися и легкими запросами. Требование «пусть все будет в реальном времени» часто приводит к результату «пусть ничего не открывается».

5. Просмотр с учетом прав

Эту же панель управления руководитель группы должен видеть для всех компаний, а менеджер филиала — только для своего собственного филиала. Такая фильтрация должна применяться не в интерфейсе, а на уровне данных (безопасность на уровне строк — Row Level Security); в противном случае пользователь, имеющий прямой доступ к API, сможет вытянуть данные других филиалов.

Хорошая панель управления — это экран, на котором руководитель может ответить на вопрос «почему», спустившись к источнику в один клик. Экран, показывающий только графики — это красивая презентация.

6. Принципы визуализации

  • У каждого индикатора должна быть точка для сравнения: цель, прошлый период или среднее значение.
  • Используйте цвета для придания смысла (направление отклонения), а не для украшения.
  • Таблицу следует использовать там, где график не может ее заменить, а график — там, где он не украшает таблицу.
  • Временная зона и валюта должны быть четко указаны в верхней части экрана.

7. Многоисточниковые данные: от Excel к API

Часть источников все еще может находиться в Excel. Это нормально; главное, чтобы передача данных из Excel проходила правила валидации и каждая загрузка регистрировалась. Со временем, по мере увеличения числа источников, питающихся через API, шаг Excel сокращается; однако подход «пусть сначала все источники станут автоматическими, а потом мы сделаем панель управления» откладывает проект на неопределенный срок.

8. После публикации: следите за данными использования

Измеряйте, какие экраны открываются и какие фильтры используются. Показатель, на который не смотрят в течение трех месяцев, либо задает неверный вопрос, либо находится не на своем месте; удаление так же ценно, как и добавление.

Модель данных: измерения и показатели

Данные в основе панели управления следует рассматривать как измерения (филиал, период, группа продуктов, клиент) и показатели (оборот, затраты, количество, дни). Каждый показатель должен заранее знать, по каким измерениям его можно разбить; ситуация, когда «мы можем видеть оборот по клиентам, но не можем видеть затраты», связана с тем, что затраты в исходных системах не связаны с клиентом, и это решается в источнике, а не на панели управления. Поэтому проект панели управления часто начинается с небольших исправлений модели данных в исходных системах.

Частота обновления и метка «последнее обновление»

Каждый индикатор должен наглядно отображать время обновления данных. Руководитель, знающий, что это «вчерашние данные», принимает правильное решение; руководитель, не знающий этого, заявляет, что «система ошибается». Частота обновления варьируется в зависимости от потребностей: баланс кассы — ежечасно, ежемесячная прибыльность — при закрытии периода. Попытка сделать все в режиме реального времени и дорого, и избыточно.

Уведомления: не ждите, пока посмотрят на панель управления

Руководители не открывают панели управления каждый день; важные отклонения должны поступать к ним сами. Предупреждения на основе пороговых значений (просрочен срок дебиторской задолженности, отклонение бюджета превысило определенный процент, запасы упали ниже минимального уровня) отправляются по электронной почте или в виде сообщений, причем уведомление содержит ссылку на соответствующий экран. Пороговые значения определяются и изменяются финансовым или операционным отделом; зашивание пороговых значений в код влечет за собой затраты на разработку при каждом запросе на изменение.

-- Örnek: uyarı kuralı tablosu (kavramsal)
create table alert_rules (
  id          serial primary key,
  metric_key  text not null,        -- örn. 'receivables_overdue'
  comparator  text not null,        -- '>', '<'
  threshold   numeric not null,
  scope       jsonb not null default '{}',   -- şube, şirket filtresi
  recipients  text[] not null,
  is_active   boolean not null default true
);

Мобильный вид

Руководители часто открывают панели управления со своих телефонов. Экран, разработанный для настольных компьютеров и просто уменьшенный, непригоден для использования на телефоне. Приоритетный порядок для мобильного вида: сначала сводные карточки (от пяти до восьми индикаторов), затем один график и в последнюю очередь таблицы. Фильтры должны быть немногочисленными и крупными; трио «все компании / выбрать филиал / выбрать период» удовлетворяет большинство потребностей.

Индикаторы качества данных

Сама панель управления также должна отслеживаться: пропущенные загрузки (данные филиала за этот месяц не поступили), строки, отклоненные при проверке, новые коды, ожидающие сопоставления. Эта панель «состояния данных» обращается не к руководителю, а к ответственному за данные и объясняет, почему цифры на основной панели управления могут быть неполными.

Пример: вид руководителя логистической компании (вымышленный)

  • Количество запланированных и завершенных на сегодня отправок; задержанные вынесены на отдельную карточку.
  • Список задержанных отправок в разрезе регионов; при нажатии открывается карточка отправки.
  • Динамика еженедельных затрат на транспортное средство; ключ распределения указан на экране.
  • Просроченная дебиторская задолженность; в разрезе клиентов, отсортированная по сумме.
  • Состояние данных: транспортные средства, с которых не поступают данные с трекеров.

Этот пример предназначен только для демонстрации структуры; реальные индикаторы выводятся из вопросов руководителя на этапе исследования.

Услуга бизнес-аналитики и отчетности от Cy Logic следует этим принципам: объединение разрозненных источников в единый источник истины и создание быстрых, доступных для запросов экранов с просмотром в соответствии с правами.