Как принять общий P90, если филиалы прислали только свои показатели
Филиалы прислали P90 и число передач. Владелец просит общий показатель сети, но этих карточек может не хватить. До согласования выгрузки определите, какой результат нужен и какие сведения позволят его проверить. Разберём выбор на полном учебном наборе.

Зафиксируйте, какой итог принимаете
Задача здесь узкая: принять общий показатель уже завершённых передач заказов. В учебном периоде с 1 по 7 сентября 2026 года включительно по UTC учтены все 20 подходящих передач двух филиалов. Каждая завершилась внутри периода, имеет отдельный ID и принадлежит ровно одному филиалу. Измеряем время от готовности полного комплекта до физической передачи исполнителю. Единица — минута; сохранённые значения целые, разрешение записи — одна минута. Все наблюдения имеют одинаковый вес.
Используем ближайший ранг: сортируем длительности, берём позицию ceil(0,90 × n), считая с единицы и округляя вверх. Интерполяции нет. Это соответствует дискретному процентилю; непрерывный вариант может интерполировать между значениями. Определения PostgreSQL. Поэтому вместе с P90 сохраняйте метод.
Это полная совокупность завершённых передач по заданному условию, а не вся работа сети. Открытые заказы не превращаются в завершённые длительности; их отдельный контроль описан в руководстве по диспетчеризации. На этих числах нельзя оценить будущий сервис, причины задержек или потребность в сотрудниках.
Одинаковые карточки допускают два итога
Рассмотрим два вымышленных варианта одного отчёта, не два последовательных периода. В каждом филиал А показывает десять наблюдений и P90 = 10 минут, филиал Б — десять наблюдений и P90 = 100 минут. Полные длительности ниже; повторяющиеся числа относятся к разным передачам.
| Вариант | Филиал А | Филиал Б |
|---|---|---|
| Первый | 1, 1, 1, 1, 1, 1, 1, 1, 10, 120 | 50, 50, 50, 50, 50, 50, 50, 50, 100, 120 |
| Второй | 1, 1, 1, 1, 1, 1, 1, 1, 10, 11 | 50, 50, 50, 50, 50, 50, 50, 50, 100, 120 |
В каждом филиале P90 занимает девятую позицию: карточки действительно совпадают. В объединённом ряду нужна восемнадцатая позиция. В первом варианте перед ней стоят восемь единиц, десятка и восемь значений 50: всего 17 наблюдений. Восемнадцатое равно 100. Во втором добавилось значение 11 вместо 120, и восемнадцатое теперь равно 50.
Среднее филиальных P90 с весами по числу наблюдений равно (10 × 10 + 100 × 10) / 20 = 55 минут в обоих вариантах. Оно не совпадает ни с одним правильным общим P90. Следовательно, карточек недостаточно для восстановления такого итога в общем случае. Исправление весов не вернёт потерянные значения.
Меняется и ответ на учебный вопрос «не менее 90% этих передач заняли не более 60 минут?». В первом варианте уложились 17 из 20, то есть 85%; во втором — 18 из 20, то есть 90%. Это проверка условного порога по прошлым наблюдениям, без договорного SLA или обещания следующему клиенту.
Карточки совпали. Общий ряд различается.
Филиал А: n = 10; P90 = 10 мин
Филиал Б: n = 10; P90 = 100 мин
В каждой ячейке: позиция → минуты
Первый вариант
- 1 → 1
- 2 → 1
- 3 → 1
- 4 → 1
- 5 → 1
- 6 → 1
- 7 → 1
- 8 → 1
- 9 → 10
- 10 → 50
- 11 → 50
- 12 → 50
- 13 → 50
- 14 → 50
- 15 → 50
- 16 → 50
- 17 → 50
- 18 → 100
- 19 → 120
- 20 → 120
Позиция 18: общий P90 = 100 мин
Второй вариант
- 1 → 1
- 2 → 1
- 3 → 1
- 4 → 1
- 5 → 1
- 6 → 1
- 7 → 1
- 8 → 1
- 9 → 10
- 10 → 11
- 11 → 50
- 12 → 50
- 13 → 50
- 14 → 50
- 15 → 50
- 16 → 50
- 17 → 50
- 18 → 50
- 19 → 100
- 20 → 120
Позиция 18: общий P90 = 50 мин
Вместо строк можно сохранить точные частоты
Для самого расчёта необязательно передавать отдельную строку каждой передачи. Можно перечислить каждое сохранённое значение длительности и число его повторений. Складывая количества при одинаковом значении по непересекающимся филиалам, получаем тот же набор с той же кратностью. Затем накапливаем количество от меньших значений к большим.
| Минуты | Первый: количество | Первый: накоплено | Второй: количество | Второй: накоплено |
|---|---|---|---|---|
| 1 | 8 | 8 | 8 | 8 |
| 10 | 1 | 9 | 1 | 9 |
| 11 | 0 | 9 | 1 | 10 |
| 50 | 8 | 17 | 8 | 18 |
| 100 | 1 | 18 | 1 | 19 |
| 120 | 2 | 20 | 1 | 20 |
В первом столбце накоплений 18 достигается на 100 минутах, во втором — на 50. Это точное восстановление процентиля записанных значений. Секунды, которых нет в исходной записи, таблица не восстанавливает. Восемь передач по 50 минут нельзя сократить до одного наблюдения: одинаковое время не означает одинаковый заказ.
Но частоты не сохраняют идентификаторы отдельных передач и сами не доказывают отсутствие пересечения выгрузок. Запросите реестр включённых частей: филиал, период, фильтры, версию и подтверждение единственного включения каждой передачи. Если нужна проверка состава по ID, её проводят по разрешённому первичному источнику. Для теста достаточно вымышленных идентификаторов; контакты клиентов не нужны.
Диапазоны дают границу, а не точное значение
Теперь оставим только количества в интервалах (0; 10], (10; 60], (60; 120]: левая граница исключена, правая включена. Для второго варианта получаем 9, 9 и 2. Заменим все восемь значений 50 на 59. Количества останутся прежними, но P90 станет 59 вместо 50.
По этой интервальной сводке восемнадцатая позиция находится в (10; 60]. При целых минутах это значения от 11 до 60; выбрать одно из них нельзя. Середина интервала 35 не становится точным результатом. Для реальной выгрузки отдельно задайте нули, ошибки, значения за крайними границами и одинаковые границы у всех частей.
Если нужен только ответ про 60 минут, достаточно числа уложившихся и общего количества при одном условии «не более». В наших вариантах это 17/20 и 18/20. Такой запрос уже, чем запрос P90. Порядок объединения долей разобран в руководстве по KPI сети.
Когда подходит приближённый итог
Если допускается оценка, запросите сохранённое состояние алгоритма для объединения, а не список готовых P50/P90/P95. BigQuery KLL допускает объединение; проверенные функции имеют статус Preview. Нужны допустимые состояния совместимого типа. При разной точности обычно действует наименьшая; документация оговаривает исключение для малых агрегатов, ещё хранящих вход точно. Повторное построение может менять ответ. Гарантия относится к ошибке ранга, а не к фиксированным минутам. Обычные приближённые агрегаты BigQuery не предоставляют сохраняемое состояние для повторной агрегации. Функции KLL; состояния и точность.
Запишите реализацию, версию, тип, точность, совместимость и документированное вероятностное правило ошибки. Несколько совпадений с эталоном не доказывают это правило. Для решения около 60 минут нужны подходящие именно ему основания. Не обещайте одинаковый результат каждого повторного запуска.
Согласуйте будущие разрезы и исправления
Сводка целого филиала не позволяет потом выделить только вечерние передачи, если время суток в ней уже отсутствует. Даже точные частоты всей точки не отвечают на произвольный новый фильтр. До подготовки данных перечислите нужные разрезы. Например, отдельные непересекающиеся ячейки «филиал × день × способ передачи» позволят собрать согласованные комбинации этих ячеек, но не восстановят новый признак заказа.
Для исправленной записи заранее установите, кто выпускает новую версию затронутой части, как она заменяет прежнюю и как подтверждается полный состав итогового набора. Не объединяйте старую и исправленную версии одной части как разные наблюдения. Сохраните связь между версиями данных и принятым результатом по регламенту воспроизводимой аналитики.
Для состояния алгоритма отдельно подтвердите путь пересборки; произвольное удаление записи не предполагается.
Достаточность сводки для расчёта не разрешает удалять первичные записи или расширять доступ. Запрашивайте только необходимые разрешённые данные; сроки хранения и права согласуются отдельно.
Проверьте представление на контрольном наборе
Передайте аналитику оба исходных варианта и назовите ожидаемый вид ответа. Проверка должна относиться к выбранному представлению, иначе интервальную оценку легко принять за точное число.
- Точный расчёт: строки и точные частоты дают 100 в первом варианте и 50 во втором; количество в каждом равно 20.
- Повторная группировка: разделение тех же записей на другие непересекающиеся части не меняет точный ответ. Равные длительности сохраняют все повторения.
- Повторная передача части: уже учтённая версия выявляется до объединения. Совпадение общего количества само по себе не подтверждает состав.
- Пустая группа: при отсутствии подходящих наблюдений показывается «нет данных», а не нулевой P90. Неполученный филиал отдельно помечается как пропуск.
- Интервалы: два набора с 50 и 59 дают одинаковые количества и один допустимый диапазон; ни один произвольно выбранный центр не подписан точным.
В решении владельца запишите: принят точный показатель записанных длительностей; принят только диапазон; принята оценка с указанным правилом ошибки; либо нужный показатель пока не подтверждён. Укажите представление, область данных, версию и незакрытые ограничения.
Для отчётности SABSUS используйте этот набор как требование к обсуждаемой конфигурации. Поддержку нужных выгрузок и расчётов подтверждают отдельно. Полезный итог встречи — согласованный состав данных и доказательство допустимого ответа, по которому можно принять отчёт.
Источники и продолжение
Документация поясняет определения и один пример реализации. Числовые наборы и проверки в статье авторские.
Источники проверены 17 октября 2026 года. Все передачи вымышлены. Арифметика проверена отдельно; PostgreSQL, BigQuery и SABSUS на этих данных не запускались.