Построение воронки продаж в Bi: события, конверсия по этапам и узкие места

Построение воронки продаж в BI сводится к трём вещам: корректно зафиксировать события по каждому этапу, стабильно посчитать конверсию по этапам воронки продаж (без двойного счёта и смещения по времени) и настроить диагностику drop-off, чтобы находить узкие места. Дальше вы упаковываете это в дашборд воронки продаж BI и мониторите отклонения.

Краткая карта важных выводов и решений

  • Начните с выбора гранулярности (лид/сделка/контакт) и строгих определений этапов: это снимает 80% спорных расхождений между отчётами.
  • Фиксируйте этапы как события с timestamp и ключом сущности; сессии используйте только для digital-этапов, не для CRM-стадий.
  • Соберите минимальный набор полей (id, stage, time, owner, source) и встройте проверки качества до загрузки в BI.
  • Считайте конверсию на когорте входа в этап и с единым правилом дедупликации (первое/последнее событие этапа).
  • Для узких мест смотрите не только drop-off, но и время до перехода, долю возвратов назад и долю "зависших".
  • Для витрины и визуализации разделяйте: слой фактов (события), слой агрегатов (по дням/неделям), слой отчёта (Power BI/другой BI).

Архитектура воронки в BI: события, сессии и точность гранулярности

Кому подходит. Если у вас есть повторяемые этапы (лид → квалификация → предложение → сделка) и нужно единообразно сравнивать каналы/менеджеров/продукты, аналитика воронки продаж в BI даёт контролируемую методику и автоматический мониторинг.

Когда лучше не делать воронку в BI в лоб. Если этапы не определены и меняются "по ощущениям", нет уникальных идентификаторов сущностей, или CRM не хранит историю стадий (только текущее значение) - сначала исправьте процесс и сбор истории, иначе отчёт будет "красивым, но неверным".

Что выбрать в качестве "сущности воронки"

  • Лид - для верхнего уровня (маркетинг/SDR), где важна скорость обработки и первичная квалификация.
  • Сделка/Opportunity - для классической продажи, где этапы и сумма привязаны к коммерческому циклу.
  • Контакт/аккаунт - для B2B с несколькими сделками на клиента, но требуется аккуратная логика многократных входов.

События vs сессии: не смешивайте модели

  • События этапов: "сделка переведена в этап X" с точным временем и автором изменения. Это базовый формат для построения воронки продаж в BI.
  • Сессии: нужны, если воронка начинается на сайте/в приложении (просмотр → форма → отправка), но дальше должна "склеиваться" с CRM по идентификаторам (client_id, lead_id, phone/email hash).

Сбор и валидация событий: источники, схемы и гарантии качества данных

Чтобы "воронка продаж в Power BI" была воспроизводимой, сначала подготовьте источники, схему событий и набор проверок. Цель - чтобы одно и то же событие не появлялось дважды, не терялось при загрузке и не ломало историчность стадий.

Что понадобится (доступы и инструменты)

  • Источники: CRM (история стадий/аудит), телефония/чат (если этапы завязаны на контакты), веб-аналитика (если есть digital-этапы).
  • Доступы: чтение таблиц/эндпоинтов истории стадий, справочников менеджеров/каналов, прав на выгрузку изменений (incremental).
  • Хранилище: DWH/ODS (PostgreSQL/ClickHouse/BigQuery/SQL Server) или хотя бы слой витрин, куда выгружаются события.
  • ETL/ELT: любой инструмент, поддерживающий инкрементальные загрузки и контроль дублей (по бизнес-ключу события).
  • BI: Power BI или аналог для визуализации и контроля (для большинства команд удобна связка DWH + Power BI).

Минимальная схема события этапа

  • entity_id (id лида/сделки)
  • event_time (timestamp изменения этапа)
  • stage_from, stage_to
  • actor_id (кто изменил)
  • source_system (CRM/сайт/импорт)
  • ingested_at (время загрузки в DWH, для контроля задержек)

Валидация: примеры SQL/псевдокода для контроля качества

1) Поиск дублей событий (одинаковая сущность, время и целевой этап).

SELECT entity_id, event_time, stage_to, COUNT(*) AS cnt
FROM fact_stage_events
GROUP BY entity_id, event_time, stage_to
HAVING COUNT(*) > 1;

2) Контроль "времени назад" (когда событие пришло позже, чем следующее по времени).

WITH s AS (
  SELECT
    entity_id,
    event_time,
    stage_to,
    LAG(event_time) OVER (PARTITION BY entity_id ORDER BY event_time) AS prev_time
  FROM fact_stage_events
)
SELECT *
FROM s
WHERE prev_time IS NOT NULL AND event_time < prev_time;

3) Проверка пропусков ключевых полей.

SELECT
  SUM(CASE WHEN entity_id IS NULL THEN 1 ELSE 0 END) AS null_entity_id,
  SUM(CASE WHEN event_time IS NULL THEN 1 ELSE 0 END) AS null_event_time,
  SUM(CASE WHEN stage_to  IS NULL THEN 1 ELSE 0 END) AS null_stage_to
FROM fact_stage_events;

Практика безопасных гарантий. Заведите "карантин" для некорректных строк (missing id/time/stage), логируйте аномалии и не допускайте их в витрину воронки, иначе разъедутся конверсии и периоды.

Моделирование этапов воронки: определение шагов, условия перехода и сегментация

Перед расчётами зафиксируйте правила: что считается входом в этап, как обрабатываются повторные входы и что делать с откатами. Это основа для стабильной конверсии по этапам воронки продаж и сопоставимости отчётов.

Риски и ограничения (учтите до внедрения)

  • Смена этапов задним числом (ручные правки в CRM) ломает тренды по дням; нужен аудит и правило пересчёта.
  • Повторные входы в этап без политики дедупликации дают завышение объёма на шагах.
  • Смешение сущностей (лиды и сделки в одной воронке) усложняет интерпретацию; разделяйте или нормализуйте.
  • Неединые определения этапов между командами превращают воронку в "спорный дашборд", а не в инструмент управления.
  • Задержки загрузки создают ложные "провалы" сегодня; нужен мониторинг свежести данных.
  1. Зафиксируйте список этапов и их порядок. Определите конечный набор стадий (без "прочее" внутри воронки) и порядок прохождения. Если в процессе есть развилки (несколько продуктов/каналов), делайте отдельные воронки или сегменты, а не "ветки" в одном шаге.

    • Документируйте этап: бизнес-смысл, критерий попадания, владелец процесса.
    • Согласуйте, где начинается воронка: первый лид, первая сделка или первый контакт.
  2. Определите правило входа в этап (event definition). Для каждого шага задайте условие: какое событие считается входом (stage_to = X), и какой timestamp является "истиной" (event_time из CRM-аудита, а не время выгрузки).

    • Если CRM хранит только текущий этап - сначала включите историю изменений или снимайте снапшоты и восстанавливайте историю.
  3. Выберите дедупликацию и обработку повторных входов. Самый устойчивый вариант: для конверсии использовать первое попадание в этап в рамках сущности, а для времени прохождения - первое попадание и ближайший следующий этап.

    • Политика A: "first touch по этапу" - стабильна для конверсий.
    • Политика B: "last touch по этапу" - полезна, если этап часто корректируют и важен финальный статус перед переходом.
  4. Опишите правила для откатов (stage rollback). Решите, считается ли возврат назад ошибкой данных, особенностью процесса или отдельным сценарием. Отразите это отдельными метриками (доля откатов), а не "чините" конверсию вручную.
  5. Соберите витрину фактов этапов и витрину входов. В фактах храните все события, а для расчётов сделайте производную таблицу "первый вход в этап" на сущность.

    • Факт: все перемещения стадий.
    • Входы: минимальный event_time по (entity_id, stage).
  6. Добавьте сегментацию, но только после стабилизации ядра. Подключите канал, менеджера, продукт, регион, тип клиента. Сегменты должны быть справочниками (dimension tables), чтобы не ломать модель при изменениях.
  7. Проверьте логику на контрольной выборке. Возьмите несколько десятков сущностей и вручную сравните последовательность этапов в BI с CRM-аудитом. Это быстрее, чем искать расхождения по всей базе.

Метрики конверсии и устойчивые способы их расчёта по этапам

Для управляемости нужны метрики, которые не "прыгают" из-за дублей, перезагрузок и смены логики. Используйте расчёты от витрины входов в этап, а не от "всех событий", и фиксируйте единое окно анализа.

Как считать конверсию по шагам (логика)

  • Step conversion: доля сущностей, вошедших в этап N+1 среди вошедших в этап N.
  • Cumulative conversion: доля дошедших до этапа N среди вошедших в первый этап.
  • Time to next stage: медиана/перцентили времени между входами в этапы (при необходимости - с отсечением выбросов по бизнес-правилу).

Чек-лист проверки результата перед публикацией в BI

  • Воронка строится на одной сущности (лид или сделка), ключ не меняется по ходу этапов.
  • Каждый шаг использует одинаковое правило дедупликации (first/last) и оно задокументировано.
  • Период в отчёте относится к дате входа в первый этап (когорта), либо явно подписано другое правило.
  • Есть контроль "свежести" данных: максимальный event_time и ingested_at отображаются на дашборде.
  • Сумма по сегментам не даёт "магического" роста объёма (признак дублей или многозначных атрибутов).
  • Конверсия не превышает 100% на переходах (иначе дубли/разные сущности/неверные связи).
  • Повторные входы и откаты отражены отдельными показателями, а не замаскированы фильтрами.
  • Есть сверка по контрольной выборке: несколько сущностей совпадают с CRM по порядку и датам этапов.

Диагностика узких мест: показатели drop-off, приоритеты исправлений и тестирование гипотез

Узкое место - это не просто низкая конверсия. Это участок, где потери велики, исправление контролируемо, а эффект можно проверить. В аналитике воронки продаж в BI делайте диагностику через сочетание drop-off, времени прохождения и качества данных.

Типовые ошибки и как их распознать (risk-aware)

  1. Ложный drop-off из-за задержки загрузки. Провал "сегодня" при норме "вчера" - часто проблема свежести; лечится мониторингом ingested_at и отсечением неполного дня.
  2. Завышение конверсии из-за дублей событий. Если конверсия на шаге > 100% или объём на шаге растёт - ищите дубли по бизнес-ключу события.
  3. Смещение периода (cohort mismatch). Считаете по дате закрытия, а фильтруете по дате создания - получаете несопоставимые тренды; закрепите правило "дата входа в первый этап" или явно маркируйте "по дате перехода".
  4. Смешение лидов и сделок. Переход "лид → сделка" как смена сущности ломает шаги; нужен мост (lead_id → opportunity_id) и отдельный шаг "создана сделка".
  5. Откаты этапов скрыты фильтрами. Визуально воронка выглядит лучше, но процесс деградирует; добавьте метрику "доля rollback" и список причин.
  6. Неоднозначные сегменты (несколько источников/каналов на одну сущность). Суммы по сегментам больше общего итога - признак M2M; решайте правилом приоритета или отдельной моделью атрибуции.
  7. Смена справочников без версионирования. Переименования этапов/каналов меняют историю; используйте surrogate key и таблицу соответствий.
  8. Тесты гипотез без контроля "качества входа". Улучшили конверсию, но снизили качество лидов; добавьте downstream-метрику (например, доля выигранных/маржа), чтобы не оптимизировать "верх" в ущерб "низу".

Приоритизация исправлений (быстрое правило)

Построение воронки продаж в BI: события, конверсия по этапам и выявление узких мест - иллюстрация
  • Сначала исправляйте то, что влияет на достоверность: дубли, пропуски, неверные связи сущностей.
  • Потом - то, что даёт большой вклад в потери: шаги с высоким drop-off и большим объёмом входа.
  • Затем - оптимизация скорости: этапы с большой длительностью и высокой долей "зависших".

Визуализация и отчётность: дашборды, таблицы сравнения и автоматизация мониторинга

Дашборд нужен не "для красоты", а чтобы быстро ответить: где просадка, в каком сегменте и это данные или процесс. Дашборд воронки продаж BI обычно собирают в Power BI, но структура отчётности важнее инструмента.

Что показывать на дашборде

  • Объём входа в воронку (когорта) и переходы по этапам.
  • Step conversion и cumulative conversion по сегментам.
  • Drop-off (потери) и время до следующего этапа.
  • Индикаторы качества данных: свежесть, доля дублей (если считаете), доля неизвестных значений.

Таблица для сравнения подходов к построению и обновлению

Подход Когда уместен Риски Как снизить риск
Воронка на витрине событий (DWH) + Power BI Нужна единая логика для нескольких отчётов, много сегментов и контроль качества Дольше старт, нужна дисциплина схемы и тестов Сначала MVP на 3-5 этапов, затем расширение; автоматические проверки дублей/пропусков
Расчёт в Power BI (DAX) поверх "сырых" таблиц Быстрый прототип, ограниченный объём данных и один владелец отчёта Легко получить разные трактовки, тяжёлые меры, сложнее отлаживать Вынести дедупликацию и "первый вход в этап" в Power Query/SQL, оставить DAX для агрегаций
Готовая CRM-воронка (встроенные отчёты) Нужна базовая операционная картинка без кастомной интеграции Ограниченная сегментация, слабый контроль качества, трудно склеить с digital Использовать как контрольный источник, параллельно готовить события в DWH

Альтернативы и когда они лучше классической воронки

  1. Когортный отчёт по неделям/месяцам - если цикл длинный и важна динамика созревания (сколько дошло до этапов через N недель).
  2. Скоринговая модель качества входа - если проблема в том, что конверсия падает из-за "дешёвых" лидов, а не из-за работы этапа.
  3. Процесс-майнинг/граф переходов - если много откатов и нелинейных маршрутов, и нужно увидеть реальные траектории.
  4. Отчёт по SLA этапов - если узкое место в скорости реакции (например, "не обработали за X часов" важнее конверсии).

Ответы на типовые затруднения при построении и анализе воронки

Почему конверсия на шаге получается больше 100%?

Обычно это дубли событий или разные сущности на соседних шагах (лид → сделка). Проверьте дедупликацию и наличие мостика между lead_id и opportunity_id.

Какой датой фильтровать воронку: созданием, входом в этап или закрытием?

Для сопоставимости используйте когорту по дате входа в первый этап. Если фильтруете по дате перехода/закрытия, явно подпишите это в отчёте и не сравнивайте напрямую с когортным вариантом.

Что делать, если CRM хранит только текущую стадию без истории?

Без истории вы не построите корректные переходы. Включите аудит изменений или снимайте регулярные снапшоты и восстанавливайте события переходов.

Как учитывать возвраты на предыдущие этапы?

Не "вычищайте" откаты фильтрами. Считайте отдельную метрику rollback-rate и анализируйте причины возврата, параллельно оставляя основную конверсию по первому прохождению.

Можно ли всё сделать только в Power BI без DWH?

Для прототипа - да, но риск расхождений и тяжёлых расчётов выше. Устойчивее вынести слой событий и дедупликации в SQL/витрину, а Power BI оставить для визуализации и сегментов.

Как понять, что просадка - это проблема данных, а не продаж?

Сравните свежесть загрузки, долю пропусков ключевых полей и аномалии дублей с предыдущими периодами. Если одновременно "поехали" техметрики качества, сначала чините пайплайн.

Как связать digital-воронку сайта и CRM-этапы в одну цепочку?

Нужен единый идентификатор или правило склейки (например, lead_id, client_id, устойчивый hash контакта) и явный шаг "создан лид/сделка". Без этого объединённая воронка будет давать некорректные переходы.

Прокрутить вверх