KPI — показатель, выбранный для отслеживания цели. Число не устанавливает причину и не доказывает коммерческую ценность или безопасность.
Составить договор измерения
Запишите цель, формулу, единицу, числитель, знаменатель, аудиторию и период. Назовите ответственного и решение. Стоимость лида не равна стоимости нового клиента: укажите состав затрат и определение результата.
Проверить изменение до действия
Проверьте охват, повторы, задержки и изменения определений. Среднее долей не обязательно равно общей доле: используйте соответствующие количества. Порог требует расследования, а не даёт готовую причину. Инструмент не гарантирует качество сбора.
| Пункт | Что документировать |
|---|---|
| Определение | Записанные формула, единица и охват |
| Качество | Проверены охват, повторы и доступность |
| Решение | Ясные ответственный, действие и ограничения |
Источники и проверка
Свяжите каждый KPI с контрактом и решением.
Полезная метрика определяет действие, которое должно быть оправдано изменением. Перед установкой целевого значения задокументируйте формулу, совокупность, источник и условия, чтобы число было неполным. Панель мониторинга может правильно соответствовать своему определению, но не отвечать на бизнес-вопрос, если единица измерения или область применения отличаются.
- Запишите числитель, знаменатель и исключения.
- Проверьте известный случай от события до графика.
- Покажите последнее обновление и периоды, которые все еще не завершены.
Первичный источник: Google SRE — Data Processing Pipelines. Связанный метод: прочитать практическое руководство.
Придайте KPI контекст.
KPI в процентах должен иметь единицы измерения, количество и период. В противном случае идентичные значения могут представлять очень разные объемы и неопределенности.
- Публикуйте числитель и знаменатель вместе с ставкой.
- Документируйте частичный сбор данных и отсутствие данных о целевой аудитории перед интерпретацией.
Первичный источник: NIST/SEMATECH — Confidence intervals for proportions. Связанный метод: прочитать практическое руководство.
Целостность соединений данных
Соединение таблиц может размножить строки и исказить суммы.
- Строка заказов означает заказ, а строка позиций — товар в нём. До объединения проверьте повторяющиеся и пустые ключи.
- Сгруппируйте позиции по ключу заказа. Соединение с этим результатом не повторяет сумму заказа для каждой позиции. Сверьте сумму с исходной таблицей заказов.
- LEFT JOIN сохраняет заказы без позиций, но WHERE по правой таблице может их удалить. Отсутствие соответствия не означает нулевую сумму.
Воспроизводимый приёмочный случай
Вымышленный пример: данные не описывают клиента или наблюдаемый результат.
Посмотреть данные случая
{
"orders": [
{
"id": 1,
"total": 100
},
{
"id": 2,
"total": 200
}
],
"line_order_ids": [
1,
1,
2
],
"sum_before": 300,
"sum_after_raw_join": 400
}Ожидаемое решение
400 дважды учитывает заказ. Сначала сгруппируйте строки по заказу, чтобы получить 300. Проверить также два вымышленных заказа по 100: сумма 200. SUM(DISTINCT total) вернёт 100, удалив допустимое значение. Проверять идентификаторы и кардинальность соединения, а не устранять повторы сумм.
Воспроизводимые SQL-запросы
Вымышленный пример: заказы на 100 и 200 и три позиции для 1, 1 и 2. Запросы используют только VALUES; выполняйте их в тестовой среде.
WITH orders(id, total) AS (VALUES (1, 100), (2, 200)),
lines(order_id) AS (VALUES (1), (1), (2))
SELECT COUNT(*) AS rows, SUM(o.total) AS total
FROM orders o JOIN lines l ON l.order_id = o.id;WITH orders(id, total) AS (VALUES (1, 100), (2, 200)),
lines(order_id) AS (VALUES (1), (1), (2)),
per_order AS (
SELECT order_id, COUNT(*) AS line_count
FROM lines GROUP BY order_id
)
SELECT COUNT(*) AS orders, SUM(o.total) AS total
FROM orders o LEFT JOIN per_order l ON l.order_id = o.id;Прямое соединение даёт три строки и 400. Предварительная агрегация возвращает два заказа и 300.
WITH orders(id, total) AS (VALUES (1, 100), (2, 100))
SELECT SUM(total) AS correct_total,
SUM(DISTINCT total) AS distinct_total
FROM orders;При суммах 100 и 100 правильный итог — 200; SUM(DISTINCT total) даёт 100.
Процедура проверки
- Определите детализацию заказов и строк.
- Соедините заказ с двумя строками.
- Сохраните ключи, количества и сверенные суммы.
Достаточно SUM(DISTINCT total)?
Нет. Два заказа по 100 дают 200, а SUM(DISTINCT total) возвращает 100. Исправляйте связь ключей, а не удаляйте равные суммы.
Первичный источник: PostgreSQL — Table expressions and joins. Связанный метод: прочитать практическое руководство.
