Функция 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 |