Функция inEventsRange
позволяет найти экземпляры процессов с определенным промежутком событий и отбросить из выборки все, что в него не входит.
Все данные пересчитываются под новое начало и окончание процесса, как будто так и было в модели. На большом объеме данных может потребоваться существенное время на выполнение запроса.
В условии запроса (в where
или в case
) функция должна использоваться не более одного раза.
inEventsRange('событие1', порядковый_номер_события1, 'событие2', порядковый_номер_события2)
событие1 — событие, откуда начинается расчет времени прохождения.
порядковый_номер_события1 — номер появления первого события. Например:
событие2 — событие, когда завершается расчет времени прохождения.
порядковый_номер_события2 - номер появления второго события. Например:
Данные функции не коммутативны, в них важен порядок применения при одновременном использовании. Поэтому если они вместе будут в SQL-запросе, то выполняется:
renameEvents
inEventsRange
hideEvents
/showEvents
Запрос:
select
process.extId as procID,
event.name
from process, event
where inEventsRange('check ticket', 1, 'examine casually', 1)
procID | name |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | pay compensation |
2 | register request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | decide |
2 | reject request |
procID | name |
---|---|
1 | check ticket |
1 | examine casually |
2 | check ticket |
2 | examine casually |
Запрос:
select
process.extId as procID,
event.name
from process, event
where inEventsRange('check ticket', 1, 'examine casually', -1)
procID | name |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | pay compensation |
2 | register request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | decide |
2 | reject request |
procID | name |
---|---|
1 | check ticket |
1 | examine casually |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
Запрос:
select
extId
from process
where inEventsRange('check ticket', 1, 'examine casually', -1)
extId |
---|
1 |
2 |
3 |
extId | name |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | pay compensation |
2 | register request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | decide |
2 | reject request |
3 | register request |
3 | examine thoroughly |
3 | check ticket |
3 | decide |
3 | reject request |
extId |
---|
1 |
2 |
В систему загружены 2 экземпляра процесса. Их визуализация в виджете Variant Explorer выглядит следующим образом:
После применения функции в виде SQL-фильтра происходит обрезка событий экземпляров процессов. Теперь они проходят по одинаковому маршруту, поэтому склеились в одну цепочку.
inEventsRange('КОНТ_Назначена', 1, 'КОНТ_Завершена', -1)
Запрос:
select
extId
from process
where match('"register request" -> .*') and inEventsRange('check ticket', 1, 'examine casually', -1)
extId |
---|
1 |
2 |
3 |
extId | name |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | pay compensation |
2 | register request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | decide |
2 | reject request |
3 | register request |
3 | examine thoroughly |
3 | check ticket |
3 | decide |
3 | reject request |
Нет данных
Пояснение: После обрезки все экземпляры процессов из входной выборки стали начинаться с шага check ticket, то есть ни один из них не попадает под условие
match('"register request" -> .*')
.
Запрос:
select
process.extId as procID,
event.name as activity,
eventNum() as number
from process, event
where inEventsRange('check ticket', 1, 'examine casually', -1)
order by procID, number
procID | name |
---|---|
1 | register request |
1 | check ticket |
1 | examine casually |
1 | decide |
1 | pay compensation |
2 | register request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | decide |
2 | reject request |
procID | activity | number |
---|---|---|
1 | check ticket | 1 |
1 | examine casually | 2 |
2 | check ticket | 1 |
2 | examine casually | 2 |
2 | decide | 3 |
2 | reinitiate request | 4 |
2 | check ticket | 5 |
2 | examine casually | 6 |
Запрос:
select
process.extId as procID,
event.name,
reworkTotal() as "Номер повтора"
from process, event
where inEventsRange('check ticket', 1, 'examine casually', -1)
procID | name |
---|---|
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 |
procID | name | Номер повтора |
---|---|---|
1 | check ticket | 1 |
1 | examine casually | 1 |
1 | decide | 1 |
1 | reinitiate request | 1 |
1 | check ticket | 2 |
1 | examine casually | 2 |
При этом если изменить запрос и обрезать данные от «второго появления check ticket», то номер повтора оставшихся шагов изменится.
select
process.extId as procID,
event.name,
reworkTotal() as "Номер повтора"
from process, event
where inEventsRange('check ticket', 2, 'examine casually', -1)
procID | name | Номер повтора |
---|---|---|
1 | check ticket | 1 |
1 | examine casually | 1 |
Запрос:
select
count(*) as "Кол-во всего",
count(case when match('"check ticket" -> .*') and inEventsRange('check ticket', 1, 'examine casually', -1) then extId else null end) as "Кол-во нач. с check ticket"
from process
extId |
---|
1 |
2 |
3 |
extId | name |
---|---|
1 | register request |
1 | pay compensation |
2 | register request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | check ticket |
2 | examine casually |
2 | decide |
2 | reinitiate request |
2 | examine thoroughly |
2 | check ticket |
2 | decide |
2 | reject request |
3 | register request |
3 | examine thoroughly |
3 | check ticket |
3 | decide |
3 | reject request |
Кол-во всего | Кол-во нач. с check ticket |
---|---|
3 | 1 |