Как посчитать pipeline velocity в SQL
revenue - cost. Что получится, если revenue = 1000, а cost = NULL? И какой вариант устойчиво вернёт 1000 при пропущенном cost?Содержание:
Зачем pipeline velocity
Pipeline velocity — скорость, с которой выручка прокачивается через воронку продаж. Объединяет 4 фактора: число сделок, их размер, win rate и длительность цикла. Чтобы вырастить выручку, можно повлиять на любой из них: больше сделок, крупнее сделки, выше win rate или короче цикл. Velocity — единая метрика, которая отражает результат всех четырёх.
Формула
pipeline_velocity = (open_deals × avg_deal_size × win_rate) / avg_cycle_length_daysРезультат — выручка в день. Например, 100 сделок × $20k × 30% / 60 дней = ожидаемые $10k выручки в день.
Velocity в SQL
WITH metrics AS (
SELECT
COUNT(*) AS open_deals,
AVG(deal_size) AS avg_deal_size,
SUM(CASE WHEN status = 'won' THEN 1 ELSE 0 END)::NUMERIC
/ NULLIF(SUM(CASE WHEN status IN ('won', 'lost') THEN 1 ELSE 0 END), 0) AS win_rate,
AVG(EXTRACT(EPOCH FROM (closed_at - created_at)) / 86400)
FILTER (WHERE status IN ('won', 'lost')) AS avg_cycle_days
FROM deals
WHERE created_at >= CURRENT_DATE - INTERVAL '180 days'
)
SELECT
open_deals,
avg_deal_size,
win_rate,
avg_cycle_days,
open_deals * avg_deal_size * win_rate / NULLIF(avg_cycle_days, 0) AS pipeline_velocity_per_day
FROM metrics;По сегментам
SELECT
customer_segment,
COUNT(*) FILTER (WHERE status = 'open') AS open_deals,
AVG(deal_size) AS avg_size,
SUM(CASE WHEN status = 'won' THEN 1 ELSE 0 END)::NUMERIC
/ NULLIF(SUM(CASE WHEN status IN ('won', 'lost') THEN 1 ELSE 0 END), 0) AS win_rate,
AVG(EXTRACT(EPOCH FROM (closed_at - created_at)) / 86400)
FILTER (WHERE status IN ('won', 'lost')) AS cycle_days
FROM deals
WHERE created_at >= CURRENT_DATE - INTERVAL '180 days'
GROUP BY customer_segment
HAVING COUNT(*) >= 20;Enterprise: низкая velocity (длинные циклы), крупные сделки. SMB: высокая velocity, мелкие сделки. Mid-market — золотая середина.
Как повысить velocity
Разложим velocity на факторы — какой из них тормозит:
SELECT
DATE_TRUNC('quarter', created_at)::DATE AS quarter,
COUNT(*) AS deals,
AVG(deal_size) AS avg_size,
AVG(CASE WHEN status = 'won' THEN 1 ELSE 0 END) AS win_rate,
AVG(EXTRACT(EPOCH FROM (closed_at - created_at)) / 86400) AS cycle_days
FROM deals
WHERE created_at >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY DATE_TRUNC('quarter', created_at)
ORDER BY quarter;Растёт год к году (YoY) — за счёт каких компонентов? Если растёт только длина цикла — проблема в обучении команды продаж. Если падает win rate — проблема в продукте.
Частые ошибки
Ошибка 1. Считать win rate только по открытым сделкам. Win rate нужно считать по закрытым сделкам. Открытые ещё не закрыты, поэтому включать их нельзя.
Ошибка 2. Включать в цикл зависшие сделки. Сделка висит 12 месяцев и перекашивает среднее. Обрезайте цикл сверху (например, 90 днями) или логарифмируйте.
Ошибка 3. Velocity без сегментов. Общая velocity по Enterprise и SMB вместе — плохой сигнал: сегменты слишком разные. Считайте по каждому отдельно.
Ошибка 4. Прогнозировать через velocity. Velocity — описательная метрика, а не прогноз. Простое перемножение факторов расходится с реальностью.
Ошибка 5. Деление на нулевой цикл. Если цикл равен 0 дней (заказали и купили сразу), деление ломается. Оборачивайте знаменатель в NULLIF.
Связанные темы
- Как посчитать deal velocity в SQL
- Как посчитать win rate в SQL
- Как посчитать sales cycle length в SQL
- Как посчитать pipeline coverage в SQL
FAQ
Какой velocity «хороший»?
Зависит от сегмента. Для SMB норма — около $50k в день на одного менеджера, для Enterprise — $5–10k в день на менеджера. Сравнивать имеет смысл только внутри одного сегмента.
Velocity vs ARR?
Velocity — это ежедневный run rate выручки, то есть сколько выручки воронка приносит в день. ARR — та же выручка, но в пересчёте на год. По сути это одна величина в разных масштабах времени.
Можно ли увеличить velocity?
Да, есть четыре рычага: больше сделок (генерация пайплайна), крупнее сделки (апселл), выше win rate (обучение продаж) и короче цикл (оптимизация процесса).
Velocity в разрезе менеджеров?
Да, считать velocity по каждому менеджеру полезно: у топовых она в 2–3 раза выше средней. Это прямая подсказка, кого стоит подтянуть через коучинг.
Обновлять velocity ежедневно?
Нет, для отслеживания тренда достаточно считать раз в месяц или в квартал. Ежедневные значения слишком шумные и скачут от случайных сделок.