Всем привет! Небольшая проблема возникла при разработке отчета на СКД.
Вообщем есть некая воронка продаж. Есть справочник этапов их 5. Теоретически клиент передвигается по этапам воронок от 1 к 5. Каждое передвижение создает запись в регистре истории передвижений (Клиент, этап).
Отчет показывает по клиенту историю передвижения по этапам. Вроде все просто.
Но клиент может пройти 1,2,3 и потом сразу на 5 этап. Те 4 пропустил.
Нужно в отчете сделать отбор тех клиентов кто не был на 4 например этапе. Но на самом деле он мог не быть на других этапах (2,3,4 мог пропустить)
И вот не могу придумать как показать если записи нет в регистре.
Прошу совета.
Вообщем есть некая воронка продаж. Есть справочник этапов их 5. Теоретически клиент передвигается по этапам воронок от 1 к 5. Каждое передвижение создает запись в регистре истории передвижений (Клиент, этап).
Отчет показывает по клиенту историю передвижения по этапам. Вроде все просто.
Но клиент может пройти 1,2,3 и потом сразу на 5 этап. Те 4 пропустил.
Нужно в отчете сделать отбор тех клиентов кто не был на 4 например этапе. Но на самом деле он мог не быть на других этапах (2,3,4 мог пропустить)
И вот не могу придумать как показать если записи нет в регистре.
Прошу совета.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Таблицу истории передвижений соединить внутренним соединением с таблицей содержащей все 5 этапов, по этапу. Получим клиентов прошедших все этапы. Затем эту таблицу истории передвижений соединить с таблицей содержащей все этапы, кроме 4-го и исключить клиентов полученных в первом запросе. И так перебрать все все возможные варианты исключая из них ранее полученных клиентов.
При кампоновке результата программный отбор, собираем все этапы, исключаем который указал пользователь, отбор новая группа И
отбор новый элемент правое значение равно в списке отобранных и не равно новый элемент отбора элемент пользователя, помоему должно получится
отбор новый элемент правое значение равно в списке отобранных и не равно новый элемент отбора элемент пользователя, помоему должно получится
ВЫБРАТЬ
1 КАК Позиция, 1 КАК ЧленРяда
ПОМЕСТИТЬ СтепеннойРяд
ОБЪЕДИНИТЬ
ВЫБРАТЬ 2,31
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПОДСТРОКА("0123456789", СтепеннойРяд.Позиция, 1) КАК Символ,
СтепеннойРяд.Позиция КАК Код
ПОМЕСТИТЬ КодоваяТаблица
ИЗ
СтепеннойРяд КАК СтепеннойРяд
ИНДЕКСИРОВАТЬ ПО
Символ
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ "Клиент1" КАК Ссылка, "01" КАК КодЭтапа
ПОМЕСТИТЬ ИсходныеДанные
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ИсходныеДанные.Ссылка КАК Ссылка,
ПОДСТРОКА(ИсходныеДанные.КодЭтапа, СтепеннойРяд.Позиция, 1) КАК СимволКода,
СтепеннойРяд.ЧленРяда КАК ЧленРяда
ПОМЕСТИТЬ ОтдельныеСимволы
ИЗ
ИсходныеДанные КАК ИсходныеДанные,
СтепеннойРяд КАК СтепеннойРяд
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ОтдельныеСимволы.Ссылка КАК Ссылка,
СУММА(ОтдельныеСимволы.ЧленРяда * КодоваяТаблица.Код) КАК Хэш
ПОМЕСТИТЬ ВыходныеДанные
ИЗ
ОтдельныеСимволы КАК ОтдельныеСимволы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ КодоваяТаблица КАК КодоваяТаблица
ПО ОтдельныеСимволы.СимволКода = КодоваяТаблица.Символ
СГРУППИРОВАТЬ ПО
ОтдельныеСимволы.Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВыходныеДанные.Ссылка КАК Ссылка
ИЗ
ВыходныеДанные КАК ВыходныеДанные
ИТОГИ ПО
Хэш
ПоказатьЗапрос группирует клиентов имеющих одинаковые наборы этапов. Статья
Все что остается это отбирать по значениям хэша.
сейчас проверить не могу, но на вскидку - берем справочник этапы, через левое соединение соединяем его с истории передвижений по полю этап, берем клиента из правой таблицы, этап из левой и добавляем 3-е поле где выбор если клиент есть нулл тогда "пропуск" иначе "ок".
В результате получаем таблицу из 3 колонок, где на каждого клиента по 5 этапов и напротив каждого есть метка, дальше в компановке дело техники
В результате получаем таблицу из 3 колонок, где на каждого клиента по 5 этапов и напротив каждого есть метка, дальше в компановке дело техники
(7)
Не будет по 5 этапов на каждого клиента.
ВЫБРАТЬ "01" КАК КодЭтапа
ПОМЕСТИТЬ Этапы
ОБЪЕДИНИТЬ
ВЫБРАТЬ "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ "Клиент1" КАК Клиент, "01" КАК КодЭтапа
ПОМЕСТИТЬ История
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
История.Клиент КАК Клиент,
Этапы.КодЭтапа КАК КодЭтапа,
ВЫБОР КОГДА История.Клиент ЕСТЬ NULL ТОГДА "-" ИНАЧЕ "+" КОНЕЦ КАК Поле1
ИЗ Этапы КАК Этапы ЛЕВОЕ СОЕДИНЕНИЕ История КАК История ПО (Этапы.КодЭтапа = История.КодЭтапа)
ПоказатьНе будет по 5 этапов на каждого клиента.
Прикрепленные файлы:
(8)
А как тогда правильнее сделать? Я в той статье вообще ничего понял)) Очень интересно, но нифига не понял как применить.
ВЫБРАТЬ "01" КАК КодЭтапа
ПОМЕСТИТЬ Этапы
ОБЪЕДИНИТЬ
ВЫБРАТЬ "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ "Клиент1" КАК Клиент, "01" КАК КодЭтапа
ПОМЕСТИТЬ История
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
История.Клиент КАК Клиент,
Этапы.КодЭтапа КАК КодЭтапа,
ВЫБОР КОГДА История.Клиент ЕСТЬ NULL ТОГДА "-" ИНАЧЕ "+" КОНЕЦ КАК Поле1
ИЗ Этапы КАК Этапы ЛЕВОЕ СОЕДИНЕНИЕ История КАК История ПО (Этапы.КодЭтапа = История.КодЭтапа)
ПоказатьПОМЕСТИТЬ Этапы
ОБЪЕДИНИТЬ
ВЫБРАТЬ "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "05"
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ "Клиент1" КАК Клиент, "01" КАК КодЭтапа
ПОМЕСТИТЬ История
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "05"
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
История.Клиент КАК Клиент,
Этапы.КодЭтапа КАК КодЭтапа,
ВЫБОР КОГДА История.Клиент ЕСТЬ NULL ТОГДА "-" ИНАЧЕ "+" КОНЕЦ КАК Поле1
ИЗ Этапы КАК Этапы ЛЕВОЕ СОЕДИНЕНИЕ История КАК История ПО (Этапы.КодЭтапа = История.КодЭтапа)
А как тогда правильнее сделать? Я в той статье вообще ничего понял)) Очень интересно, но нифига не понял как применить.
(9) Еще может вот такой вариант проканать
Но нужно прописать все комбинации и продумать порядок для правильного исключения предыдущих.
ВЫБРАТЬ "01" КАК КодЭтапа
ПОМЕСТИТЬ Этапы
ОБЪЕДИНИТЬ
ВЫБРАТЬ "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ "Клиент1" КАК Клиент, "01" КАК КодЭтапа
ПОМЕСТИТЬ История
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент1", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "02"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "04"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент2", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "03"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент3", "05"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "01"
ОБЪЕДИНИТЬ
ВЫБРАТЬ "Клиент4", "05"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ История.Клиент КАК Клиент, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ История.КодЭтапа) КАК КодЭтапа
ПОМЕСТИТЬ Этапы12345
ИЗ Этапы КАК Этапы ВНУТРЕННЕЕ СОЕДИНЕНИЕ История КАК История ПО (Этапы.КодЭтапа = История.КодЭтапа)
СГРУППИРОВАТЬ ПО История.Клиент
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ История.КодЭтапа) = 5
;
ВЫБРАТЬ История.Клиент, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ История.КодЭтапа) КАК КодЭтапа
ПОМЕСТИТЬ Этапы135
ИЗ Этапы КАК Этапы ВНУТРЕННЕЕ СОЕДИНЕНИЕ История КАК История ПО (Этапы.КодЭтапа = История.КодЭтапа)
И (Этапы.КодЭтапа В ("01", "03", "05")) и не История.Клиент в (Выбрать Этапы12345.Клиент Из Этапы12345)
СГРУППИРОВАТЬ ПО История.Клиент
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ История.КодЭтапа) = 3
;
ВЫБРАТЬ История.Клиент, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ История.КодЭтапа) КАК КодЭтапа
ПОМЕСТИТЬ Этапы15
ИЗ Этапы КАК Этапы ВНУТРЕННЕЕ СОЕДИНЕНИЕ История КАК История
ПО (Этапы.КодЭтапа = История.КодЭтапа) И (Этапы.КодЭтапа В ("01", "05")) И НЕ История.Клиент в (Выбрать Этапы135.Клиент Из Этапы135) И НЕ История.Клиент В (Выбрать Этапы12345.Клиент Из Этапы12345)
СГРУППИРОВАТЬ ПО История.Клиент
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ История.КодЭтапа) = 2
ПоказатьНо нужно прописать все комбинации и продумать порядок для правильного исключения предыдущих.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот