Как в отчете на СКД найти клиентов, которые пропустили определенные этапы воронки продаж?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При построении аналитических отчетов по воронке продаж в 1С часто возникает задача выявления «разрывов» в движении клиента. Например, нам нужно найти тех клиентов, которые прошли 1, 2 и 3 этапы, но перескочили через 4-й, попав сразу на 5-й. Поскольку история передвижений хранится в виде отдельных записей, стандартный запрос по регистру покажет только существующие записи. Если записи об этапе нет, мы не увидим ее в отчете. Давайте разберем, как эффективно решить эту проблему.

Решение через построение полной матрицы данных (Декартово произведение)

Самая распространенная ошибка при решении данной задачи — это прямая попытка соединить историю с этапами. Чтобы увидеть отсутствие данных, нам нужно сначала сформировать «полную матрицу», где для каждого клиента будет представлен каждый из возможных этапов. Только после этого мы сможем «наложить» на эту матрицу реальную историю.

Разберем алгоритм по шагам:

  1. Сформируем виртуальную таблицу всех возможных этапов.
  2. Получим список всех клиентов, у которых есть хотя бы одна запись в истории.
  3. Выполним перекрестное соединение (без условий) для создания матрицы «Клиент — Этап».
  4. Присоединим реальные данные из регистра истории с помощью ЛЕВОЕ СОЕДИНЕНИЕ.

Рассмотрим пример запроса для создания такой структуры:


ВЫБРАТЬ 
    Этапы.КодЭтапа КАК КодЭтапа
ПОМЕСТИТЬ ВсеЭтапы
ИЗ (ВЫБРАТЬ "01" КАК КодЭтапа ОБЪЕДИНИТЬ 
    ВЫБРАТЬ "02" ОБЪЕДИНИТЬ 
    ВЫБРАТЬ "03" ОБЪЕДИНИТЬ 
    ВЫБРАТЬ "04" ОБЪЕДИНИТЬ 
    ВЫБРАТЬ "05") КАК Этапы;

ВЫБРАТЬ 
    Клиенты.Ссылка КАК Клиент,
    ВсеЭтапы.КодЭтапа КАК КодЭтапа
ПОМЕСТИТЬ Матрица
ИЗ Справочник.Клиенты КАК Клиенты, ВсеЭтапы КАК ВсеЭтапы;

ВЫБРАТЬ 
    Матрица.Клиент,
    Матрица.КодЭтапа,
    ВЫБОР КОГДА История.Этап ЕСТЬ NULL ТОГДА "Пропущен" ИНАЧЕ "Пройден" КОНЕЦ КАК Статус
ИЗ Матрица КАК Матрица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсторияПередвижений КАК История
ПО Матрица.Клиент = История.Клиент И Матрица.КодЭтапа = История.Этап;

Теперь в результате запроса для каждого клиента мы имеем строку по каждому этапу. Если этап не был пройден, в поле Статус мы получим значение «Пропущен», по которому в системе СКД можно легко настроить отбор или условное оформление.

Использование хэш-функции для группировки по наборам этапов

Если задача состоит не просто в поиске одного пропущенного этапа, а в аналитике целых «сценариев» прохождения воронки, можно воспользоваться методом расчета хэш-функции. Это позволяет сгруппировать клиентов по идентичным наборам этапов.

Суть метода заключается в следующем:

Это мощный инструмент для выявления аномальных цепочек продаж. Вы можете заранее рассчитать хэш для «правильной» воронки и в отчете на СКД отбирать всех, у кого результат вычислений отличается от эталонного.

Работа с количеством пройденных этапов

Иногда достаточно просто проверить, сколько уникальных этапов прошел клиент. В СКД это реализуется без написания сложных вложенных запросов. Создайте вычисляемое поле в наборе данных:

КоличествоЭтапов = Количество(Различные Этап)

В настройках СКД на вкладке «Отбор» укажите условие: КоличествоЭтапов < 5. Это сразу отсеет тех, кто не дошел до финала. Если нужно найти конкретно пропуск 4-го этапа, добавьте в отбор условие: КодЭтапа = 4 И Статус = "Пропущен".

Практические рекомендации

При реализации любого из этих подходов, следуйте этим советам:

Попробуйте внедрить метод «полной матрицы» с ЛЕВОЕ СОЕДИНЕНИЕ — это наиболее универсальный и понятный способ для большинства задач в 1С:СКД. Удачи в разработке!

← На главную