Функция lead_event
возвращает значение из строки с указанным сдвигом, которое следует за текущим значением строки.
Данные автоматически разделены (partition by) по экземплярам процесса. Строки заранее отсортированы по дате начала, потом по признаку сортировки (sorting) и потом по дате окончания на основании указанного маппинга в модели данных.
Значения NULL
учитываются при работе функции.
lead_event( таблица.колонка [, сдвиг] )
таблица.колонка — имя столбца из таблицы журнала событий, по которому будет работать функция. Выражения не поддерживаются внутри функции.
сдвиг — количество значений, следующих за текущей строкой в указанном столбце. Если не указано, то берется значение по умолчанию — 1.
Запрос:
select
case_id,
activity,
lead_event(event_log.activity) as "Предыдущий шаг"
from event_log
case_id | activity |
---|---|
1 | register request |
1 | examine thoroughly |
1 | check ticket |
1 | decide |
1 | reject request |
2 | register request |
2 | examine casually |
2 | check ticket |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | pay compensation |
Экз. процесса | Шаг | Следующий шаг |
---|---|---|
1 | register request | examine thoroughly |
1 | examine thoroughly | check ticket |
1 | check ticket | decide |
1 | decide | reject request |
1 | reject request | |
2 | register request | examine casually |
2 | examine casually | check ticket |
2 | check ticket | decide |
2 | decide | reinitiate request |
2 | reinitiate request | examine thoroughly |
2 | examine thoroughly | check ticket |
2 | check ticket | pay compensation |
2 | pay compensation |
Запрос:
select
case_id,
activity,
lead_event(event_log.activity, 2) as "Предыдущий шаг"
from event_log
case_id | activity |
---|---|
1 | register request |
1 | examine thoroughly |
1 | check ticket |
1 | decide |
1 | reject request |
2 | register request |
2 | examine casually |
2 | check ticket |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | pay compensation |
Экз. процесса | Шаг | Следующий шаг |
---|---|---|
1 | register request | check ticket |
1 | examine thoroughly | decide |
1 | check ticket | reject request |
1 | decide | |
1 | reject request | |
2 | register request | check ticket |
2 | examine casually | decide |
2 | check ticket | reinitiate request |
2 | decide | examine thoroughly |
2 | reinitiate request | check ticket |
2 | examine thoroughly | pay compensation |
2 | check ticket | |
2 | pay compensation |
Запрос:
select
activity as "Событие",
lead_event(event_log.activity) as "Предыдущее событие",
count(*) as "Кол-во переходов"
from event_log
group by activity, lag_event(event_log.activity)
order by count(*) desc
case_id | activity |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | reinitiate request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | reinitiate request |
1 | examine thoroughly |
1 | check ticket |
1 | decide |
1 | reject request |
Событие | Следующее событие | Кол-во переходов |
---|---|---|
examine casually | decide | 2 |
decide | reinitiate request | 2 |
check ticket | examine casually | 2 |
reject request | 1 | |
reinitiate request | examine thoroughly | 1 |
reinitiate request | check ticket | 1 |
register request | check ticket | 1 |
examine thoroughly | check ticket | 1 |
decide | reject request | 1 |
check ticket | decide | 1 |
Запрос:
select
user as "Исполнитель",
lag_event(event_log.user) as "Предыдущий исполнитель",
count(*) as "Кол-во переходов"
from event_log
group by user, lag_event(event_log.user)
order by count(*) desc
case_id | resource |
---|---|
1 | Ellen |
1 | Pete |
1 | Mike |
1 | Sara |
1 | Sara |
1 | Ellen |
1 | Mike |
1 | Sara |
1 | Sara |
1 | Sean |
1 | Pete |
1 | Sara |
1 | Mike |
Исполнитель | Предыдущий исполнитель | Кол-во переходов |
---|---|---|
Sara | Sara | 2 |
Mike | Sara | 2 |
Sean | Pete | 1 |
Sara | Sean | 1 |
Sara | Mike | 1 |
Sara | Ellen | 1 |
Pete | Sara | 1 |
Pete | Mike | 1 |
Mike | 1 | |
Ellen | Pete | 1 |
Ellen | Mike | 1 |
Запрос:
select
activity as "Событие",
lead_event(event_log.activity) as "Предыдущее событие",
avg(lead_event(event_log.start_timestamp) - end_timestamp) as "Ср. время между событиями"
from event_log
group by activity, lead_event(event_log.activity)
Или также можно взять следующее значение поля interval_fact
уже заранее рассчитанное системой с данной характеристикой. Оно считается автоматически в каждой из моделей.
select
activity as "Событие",
lead_event(event_log.activity) as "Предыдущее событие",
avg(lead_event(event_log.interval_fact)) as "Cр. следующий интервал"
from event_log
group by activity, lead_event(event_log.activity)
Если объединить запросы, то будет видно, что данные одинаковые.
select
activity as "Событие",
lead_event(event_log.activity) as "Предыдущее событие",
avg(lead_event(event_log.start_timestamp) - end_timestamp) as "Ср. время между событиями",
avg(lead_event(event_log.interval_fact)) as "Cр. следующий интервал"
from event_log
group by activity, lead_event(event_log.activity)
case_id | activity | Дата старта | Дата окончания |
---|---|---|---|
1 | register request | 2010-12-30 11:32:00 | 2010-12-30 11:42:00 |
1 | check ticket | 2010-12-30 12:12:00 | 2010-12-30 12:55:00 |
1 | examine casually | 2010-12-30 14:16:00 | 2010-12-30 15:16:00 |
1 | decide | 2011-01-05 11:22:00 | 2011-01-05 11:32:00 |
1 | pay compensation | 2011-01-08 12:05:00 | 2011-02-08 12:05:00 |
Событие | Следующее событие | Время между событиями | Следующий интервал |
---|---|---|---|
register request | check ticket | 1800 | 1800 |
check ticket | examine casually | 4860 | 4860 |
examine casually | decide | 504360 | 504360 |
decide | pay compensation | 261180 | 261180 |
pay compensation |