Как посчитать pipeline velocity в SQL
Содержание:
Зачем pipeline velocity
Pipeline velocity — скорость, с которой revenue прокачивается через sales pipeline. Объединяет 4 фактора: число сделок, размер, win rate, длительность цикла. Если хотите вырастить revenue, можно либо: больше сделок, либо больший размер, либо выше win rate, либо короче cycle. Velocity — единая metrика, отражающая результат всех 4.
Формула
pipeline_velocity = (open_deals × avg_deal_size × win_rate) / avg_cycle_length_daysРезультат — revenue per day. Если 100 деалов × $20k × 30% / 60 days = $10k per day expected revenue.
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: low velocity (long cycles), high deal size. SMB: high velocity, low deal size. Mid-market — sweet spot.
Как повысить velocity
Decompose: какой фактор давит:
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 rise — какие компоненты? Если только cycle растёт — sales-team training. Если win rate падает — product issue.
Частые ошибки
Ошибка 1. Считать на open deals only. Win rate должна быть на closed deals. Open ещё не closed → нельзя.
Ошибка 2. Cycle включать stagnant deals. Deal сидит 12 months → distortion average. Cap at 90 days или log-transform.
Ошибка 3. Velocity без segments. Enterprise + SMB blended velocity — bad signal. Each independently.
Ошибка 4. Forecasting через velocity. Velocity — описательная metrika, не forecast. Просто умножение vs reality differs.
Ошибка 5. Деления на zero cycle. Если cycle 0 days (заказали и купили сразу) — деление ломается. NULLIF.
Связанные темы
- Как посчитать deal velocity в SQL
- Как посчитать win rate в SQL
- Как посчитать sales cycle length в SQL
- Как посчитать pipeline coverage в SQL
FAQ
Какой velocity «хороший»?
Зависит от segment. SMB $50k/day per rep — норма. Enterprise $5-10k/day per rep.
Velocity vs ARR?
Velocity — ежедневный run rate revenue. ARR — annualized.
Можно ли increase velocity?
4 рычага: больше deals (pipeline gen), bigger size (upsell), higher win rate (sales enablement), shorter cycle (process optim).
Velocity per rep?
Yes — top reps имеют 2-3× higher velocity. Coaching opportunity.
Updated daily?
Monthly или quarterly — для trend. Daily slishком volatile.