Как посчитать Pipeline Coverage в SQL
EXPLAIN вашего отчёта видно, что выполняется Sort по created_at на очень большом наборе строк. Какое действие чаще всего помогает уменьшить работу сортировки?Содержание:
Зачем Pipeline Coverage
В B2B-продажах pipeline coverage показывает, хватит ли открытых сделок, чтобы выполнить план (quota). Если quota $1M, pipeline $1.5M, а win rate 30%, реально закроется только $450K. Coverage 1.5x — покрытия не хватает.
Формула
Pipeline Coverage = Open Pipeline Value / QuotaЗдоровое покрытие: 3-5x quota (с учётом win rate).
Базовый расчёт
Данные: deals(deal_id, stage, value, sales_rep, owner_team).
SELECT
sales_rep,
SUM(value) FILTER (WHERE stage NOT IN ('won', 'lost')) AS open_pipeline,
-- quota — manual config, например 1M per rep per quarter
1000000 AS quarterly_quota,
SUM(value) FILTER (WHERE stage NOT IN ('won', 'lost'))::NUMERIC / 1000000 AS coverage_ratio
FROM deals
GROUP BY sales_rep
ORDER BY coverage_ratio;Coverage <3x — менеджер в зоне риска. Coverage >5x — здоровый уровень.
По стадиям
SELECT
stage,
COUNT(*) AS deals,
SUM(value) AS pipeline_value
FROM deals
WHERE stage NOT IN ('won', 'lost')
GROUP BY stage
ORDER BY
CASE stage
WHEN 'discovery' THEN 1
WHEN 'qualification' THEN 2
WHEN 'demo' THEN 3
WHEN 'proposal' THEN 4
WHEN 'negotiation' THEN 5
END;Weighted Pipeline
Взвешиваем по win rate каждой стадии:
WITH stage_weights AS (
SELECT * FROM (VALUES
('discovery', 0.10),
('qualification', 0.20),
('demo', 0.40),
('proposal', 0.60),
('negotiation', 0.80)
) AS w(stage, win_prob)
)
SELECT
SUM(d.value * w.win_prob) AS weighted_pipeline,
SUM(d.value) AS raw_pipeline,
SUM(d.value * w.win_prob)::NUMERIC / NULLIF(SUM(d.value), 0) AS avg_weight
FROM deals d
JOIN stage_weights w ON w.stage = d.stage
WHERE d.stage NOT IN ('won', 'lost');Weighted pipeline ≈ реалистичный прогноз.
Частые ошибки
Ошибка 1. Учитывать «мёртвые» сделки. Сделка без активности 90+ дней — скорее всего мертва. Исключайте её из coverage.
Ошибка 2. Неверная quota. Quota меняется от квартала к кварталу. Берите текущую.
Ошибка 3. Смешивать разовую и повторяющуюся выручку. В SaaS различайте годовую стоимость контракта (ACV) и разовые платежи.
Ошибка 4. Путать прогноз и факт. Pipeline — это прогноз, а закрытые сделки (closed won) — факт. Не путайте одно с другим.
Ошибка 5. Застрявшие сделки. Сделки, зависшие на стадии demo по полгода, раздувают pipeline без реального шанса на закрытие.
Связанные темы
- Как посчитать Win Rate в SQL
- Как посчитать Magic Number в SQL
- Как посчитать ARR в SQL
- Как посчитать CAC в SQL
FAQ
Какой Pipeline Coverage ok?
Стандартом считается покрытие 3-5x quota. Конкретное число зависит от win rate: чем выше конверсия сделок, тем меньшее покрытие можно считать достаточным.
Weighted или raw pipeline?
Weighted pipeline (взвешенный по вероятности закрытия) даёт реалистичный прогноз выручки. Raw pipeline (сырой) показывает весь потенциальный объём сделок. Для прогноза берут weighted, для оценки общего потенциала — raw.
Coverage low — что делать?
Есть три рычага. Первый — нагнать больше лидов из маркетинга. Второй — ускорить движение сделок по воронке (sales velocity). Третий — пересмотреть quota вниз, если цикл сделки объективно длинный.
Coverage растёт — хорошо?
Не всегда. Рост coverage может означать, что сделки просто не закрываются и застревают на стадиях. Поэтому следите за возрастом сделок (deal age), а не только за самим покрытием.
Pipeline Coverage и forecast accuracy?
Они связаны: чем здоровее pipeline coverage, тем точнее прогноз выручки. Но полагаться только на coverage нельзя — отслеживайте историческую точность своих прогнозов.