Отчёт по срокам сделки
Отчёт по срокам сделки в MacroCRM находится в блоке Отчёты, разделе Продажи: воронка.
Этот отчёт является ключевым инструментом для глубокого анализа и оптимизации процесса продаж. Он предоставляет общую картину эффективности на каждом этапе, позволяя аналитикам и руководителям отдела продаж точно определить, какие подразделения или менеджеры закрывают сделки быстрее всего. Также он помогает выявить узкие места в воронке, отображая длительность каждого этапа — от первичной обработки до бронирования и финальной сделки. Используя такие показатели, как Общий и Средний срок сделки в сочетании с детализацией по этапам (Неразобранное, Проверка, Подбор и т.д.), вы получаете возможность принимать обоснованные решения для системного сокращения цикла продаж.
Работа с отчётом
Фильтры отчёта
Дата:
При открытии отчёта фильтр по умолчанию выбирает тип «Дата появления заявки».
Нажмите на тип даты, чтобы выбрать событие, по которому будет ограничена выборка заявок (например, «Дата начала сделки»).

Отдел и Менеджер (Ответственный):
Эти фильтры используют формат и позволяют точно отсортировать данные отчёта по конкретным отделам продаж и ответственным сотрудникам в сделке.
Сотрудник сопровождения сделки и Опции:
Фильтрует отчёт по сопровождающему сотруднику. Для более наглядной работы с этим фильтром рекомендуется включить опцию «Группировать по сотруднику сопровождения».
При активации этой опции в отчёте устанавливается следующая иерархия вложенности: Сотрудник сопровождения Отдел продаж Менеджер (Ответственный).
Технический паспорт отчёта
Структура и источник данных

Отчёт представляет собой комбинацию данных по длительности этапов и количеству сделок.
Данные в системе
Общий срок сделок (1).
Показатель Общий срок сделок (1) представляет собой суммарную продолжительность пребывания всех завершенных заявок от до фактического перехода в статус Сделка проведена.
Принцип выбора данных в MacroData (без учёта фильтров):
Для получения этих данных необходимо связать таблицы estate_buys
и estate_buys_statuses_log
, чтобы найти дату перехода в финальный статус (100) и рассчитать временную разницу.
SELECT
T1.manager_name,
T1.total_seconds,
CASE
WHEN T1.total_seconds >= 31536000
THEN CONCAT(FLOOR(T1.total_seconds / 31536000), ' г ', FLOOR((T1.total_seconds % 31536000) / 2592000), ' мес')
ELSE CONCAT(T1.total_seconds, ' с')
END AS total_time_formatted
FROM
(
SELECT
U.users_name AS manager_name,
SUM(TIMESTAMPDIFF(SECOND, EB.date_added, EBSL.log_date)) AS total_seconds
FROM
estate_buys EB
INNER JOIN
estate_buys_statuses_log EBSL
ON EB.id = EBSL.estate_buy_id AND EBSL.status_to = 100 AND EBSL.status_from <> 100
INNER JOIN
users U ON EB.manager_id = U.id
WHERE
EB.status = 100
GROUP BY
U.users_name
) AS T1
ORDER BY
T1.total_seconds DESC;
Всего сделок (2).
Количество Всего сделок (2) соответствует числу заявок, которые имеют текущий и подпадают под условия фильтрации.
Проверка данных в CRM: Для проверки перейдите в Листинг заявок и установите фильтр по дате и текущему статусу Сделка проведена. Обратите внимание, чтобы в обоих периодах был выбран одинаковый тип даты.

Принцип выбора данных в MacroData (без учёта фильтров):
SELECT
U.users_name AS manager_name,
COUNT(EB.id) AS "Всего сделок"
FROM
users U
INNER JOIN
estate_buys EB ON U.id = EB.manager_id
WHERE
EB.status = 100
GROUP BY
U.id, U.users_name
ORDER BY
"Всего сделок" DESC;
Проверка длительности этапов (4-9).
Статусы Неразобранное, Проверка, Подбор, Отложено, Бронь, Сделка в работе (4-9) отражают среднее время пребывания заявки в каждом из этих статусов в .
Принцип выбора данных в MacroData на примере статуса Неразобранное (4):
SELECT
U.users_name AS manager_name,
ROUND(AVG(SD.duration_seconds)) AS "Неразобранное"
FROM
users U
INNER JOIN
estate_buys EB ON U.id = EB.manager_id
INNER JOIN
(
SELECT
EBSL_ENTRY.estate_buy_id,
TIMESTAMPDIFF(SECOND, EB_SUB.date_added, (
SELECT MIN(EBSL_EXIT.log_date)
FROM estate_buys_statuses_log EBSL_EXIT
WHERE EBSL_EXIT.estate_buy_id = EBSL_ENTRY.estate_buy_id
AND EBSL_EXIT.log_date > EBSL_ENTRY.log_date
)) AS duration_seconds
FROM
estate_buys_statuses_log EBSL_ENTRY
INNER JOIN
estate_buys EB_SUB ON EBSL_ENTRY.estate_buy_id = EB_SUB.id
WHERE
EBSL_ENTRY.status_to = 5
AND EB_SUB.status = 100
) AS SD ON EB.id = SD.estate_buy_id
WHERE
EB.status = 100
GROUP BY
U.id, U.users_name
ORDER BY
"Неразобранное" DESC;
Адаптация запроса для других статусов.
Чтобы рассчитать среднее время для любого , выполните следующие три шага:
Измените псевдоним столбца: Замените
AS "Неразобранное"
на нужное название статуса (например,AS "Проверка"
).Измените фильтр статуса: Замените
EBSL_ENTRY.status_to = 5
на требуемый номер статуса (например,10
).Измените логику расчета времени.
Внимание: Для всех статусов, кроме «Неразобранное» (5), измените формулу TIMESTAMPDIFF
в подзапросе SD
, заменив EB_SUB.date_added
на дату входа в статус (EBSL_ENTRY.log_date
):
Для Неразобранного (5):
TIMESTAMPDIFF(SECOND, EB_SUB.date_added, ...)
Для Проверки (10) и всех остальных:
TIMESTAMPDIFF(SECOND, EBSL_ENTRY.log_date, ...)
Расчётные данные
Средний срок сделки (3).
Средний срок сделки (3) — это результат деления Общего срока сделок (1) на Всего сделок (2). Запрос выводит все три столбца для проверки.
Принцип выбора данных в MacroData (без учёта фильтров):
SELECT
U.users_name AS manager_name,
T1.total_seconds AS "Общее время (сек)",
T1.total_deals AS "Всего сделок",
T1.avg_sec_to_deal AS "Средний срок сделки (сек)"
FROM
users U
INNER JOIN
(
SELECT
EB.manager_id,
SUM(TIMESTAMPDIFF(SECOND, EB.date_added, EBSL.log_date)) AS total_seconds,
COUNT(EB.id) AS total_deals,
ROUND(SUM(TIMESTAMPDIFF(SECOND, EB.date_added, EBSL.log_date)) / COUNT(EB.id)) AS avg_sec_to_deal
FROM
estate_buys EB
INNER JOIN
estate_buys_statuses_log EBSL
ON EB.id = EBSL.estate_buy_id AND EBSL.status_to = 100 AND EBSL.status_from <> 100
WHERE
EB.status = 100
GROUP BY
EB.manager_id
) AS T1 ON U.id = T1.manager_id
ORDER BY
T1.avg_sec_to_deal DESC;
Last updated