Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přepněte služby pomocí rozevíracího seznamu Verze . Přečtěte si další informace o navigaci.
Platí pro: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Kontroluje data, shody a vytváří sekvence na základě predikátů.
Odpovídající záznamy se určují podle predikátů definovaných v krocích operátora. Predikát může záviset na stavu, který je generován předchozími kroky. Výstup pro odpovídající záznam je určen vstupním záznamem a přiřazeními definovanými v krocích operátora.
Syntax
T| scan [ with_match_id=MatchIdColumnName ] [ declare(ColumnDeclarations) ] with(StepDefinitions)
Syntaxe ColumnDeclarations
Columnname:ColumnType[=DefaultValue ] [, ... ]
Syntaxe StepDefinition
step
StepName [ output = all | last | none] : Podmínka [ =>sloupce= [, ... ] ];
Přečtěte si další informace o konvencích syntaxe.
Parameters
| Name | Typ | Required | Description |
|---|---|---|---|
| T | string |
✔️ | Vstupní tabulkový zdroj. |
| MatchIdColumnName | string |
Název sloupce typu long , který je připojen k výstupu jako součást provádění kontroly. Označuje index založený na 0 shody záznamu. |
|
| ColumnDeclarations | string |
Deklaruje rozšíření schématu T. Tyto sloupce jsou v krocích přiřazené hodnotami. Pokud není přiřazeno, vrátí se hodnota DefaultValue . Není-li zadáno jinak, hodnota DefaultValue je null. |
|
| StepName | string |
✔️ | Slouží k odkazování na hodnoty ve stavu vyhledávání podmínek a přiřazení. Název kroku musí být jedinečný. |
| Condition | string |
✔️ | Výraz, který se vyhodnotí true jako nebo false který definuje, které záznamy ze vstupu odpovídají kroku. Záznam odpovídá kroku, pokud je true podmínka se stavem kroku nebo stavem předchozího kroku. |
| Assignment | string |
Skalární výraz, který je přiřazen k odpovídajícímu sloupci, když záznam odpovídá kroku. | |
output |
string |
Řídí výstupní logiku kroku u opakovaných shod.
all výstupy všech záznamů odpovídajících kroku, last výstupy pouze posledního záznamu v řadě opakujících se shod pro tento krok a none neprovádí výstup záznamů odpovídajících kroku. Výchozí hodnota je all. |
Returns
Záznam pro každou shodu záznamu ze vstupu do kroku. Schéma výstupu je schéma zdroje rozšířeného se sloupcem v klauzuli declare .
Logika skenování
scan přejde přes serializovaná vstupní data, záznam podle záznamu, porovnává každý záznam s podmínkou každého kroku při zohlednění aktuálního stavu každého kroku.
State
Základní stav operátoru scan lze považovat za tabulku s řádkem pro každý stepoperátor . Každý krok udržuje svůj vlastní stav s nejnovějšími hodnotami sloupců a deklarovanými proměnnými ze všech předchozích kroků a aktuálního kroku. V případě potřeby také obsahuje ID shody pro probíhající sekvenci.
Pokud má operátor kontroly n kroků pojmenovaných s_1, s_2, ..., s_n potom krok s_k by měl záznamy k ve svém stavu odpovídající s_1, s_2, ..., s_k.
StepName. Formát ColumnName slouží k odkazu na hodnotu ve stavu. Například by odkazoval na sloupecs_2.col1, col1 který patří ke kroku s_2 ve stavu s_k. Podrobný příklad najdete v názorném postupu logiky kontroly.
Stav se spustí prázdný a aktualizuje se vždy, když naskenovaný vstupní záznam odpovídá kroku. Pokud je stav aktuálního kroku neprázdný, označuje se tento krok jako aktivní sekvence.
Odpovídající logika
Každý vstupní záznam se vyhodnotí vůči všem krokům v obráceném pořadí od posledního kroku k prvnímu. Při vyhodnocení záznamu r v určitém kroku s_k se použije následující logika:
Kontrola 1: Pokud je stav předchozího kroku (s_k-1) neprázdný a r splňuje podmínkus_k, dojde ke shodě. Shoda vede k následujícím akcím:
- Stav s_k se vymaže.
- Stav s_k-1 se podporuje tak, aby se stal stavem s_k.
- Přiřazení s_k se počítají a rozšiřují r.
- Rozšířený r se přidá do výstupu a do stavu s_k.
Note
Pokud výsledkem kontroly 1 je shoda, bude kontrola 2 ignorována a r se bude vyhodnocovat proti s_k-1.
Kontrola 2: Pokud má stav s_k aktivní sekvenci nebo s_k je prvním krokem a r splňuje podmínkus_k, dojde ke shodě. Shoda vede k následujícím akcím:
- Přiřazení s_k se počítají a rozšiřují r.
- Hodnoty, které představují s_k ve stavu s_k , se nahradí hodnotami rozšířeného r.
- Pokud je s_k definován jako
output=all, rozšířené r se přidá do výstupu. - Pokud je s_k prvním krokem, zahájí se nová sekvence a ID shody se zvýší o
1. To má vliv jenom na výstup přiwith_match_idpoužití.
Po dokončení kontrol s_kse r přesune k vyhodnocení s_k-1.
Podrobný příklad této logiky najdete v názorném průvodci logikou kontroly.
Examples
Příklad v této části ukazuje, jak použít syntaxi, která vám pomůže začít.
Příklady v tomto článku používají veřejně dostupné tabulky v clusteru nápovědy, jako je
StormEventstabulka v databázi Ukázky.
Příklady v tomto článku používají veřejně dostupné tabulky, například
Weathertabulku v galerii ukázek analýzy počasí. Možná budete muset změnit název tabulky v ukázkovém dotazu tak, aby odpovídal tabulce v pracovním prostoru.
Kumulativní součet
Vypočítá kumulativní součet vstupního sloupce. Výsledek tohoto příkladu odpovídá použití row_cumsum().
range x from 1 to 5 step 1
| scan declare (cumulative_x:long=0) with
(
step s1: true => cumulative_x = x + s1.cumulative_x;
)
Output
| x | cumulative_x |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
Kumulativní součet ve více sloupcích s podmínkou resetování
Spočítejte kumulativní součet pro dva vstupní sloupce, obnovte hodnotu součtu na aktuální hodnotu záznamu, kdykoli kumulativní součet dosáhl hodnoty 10 nebo více.
range x from 1 to 5 step 1
| extend y = 2 * x
| scan declare (cumulative_x:long=0, cumulative_y:long=0) with
(
step s1: true => cumulative_x = iff(s1.cumulative_x >= 10, x, x + s1.cumulative_x),
cumulative_y = iff(s1.cumulative_y >= 10, y, y + s1.cumulative_y);
)
Output
| x | y | cumulative_x | cumulative_y |
|---|---|---|---|
| 1 | 2 | 1 | 2 |
| 2 | 4 | 3 | 6 |
| 3 | 6 | 6 | 12 |
| 4 | 8 | 10 | 8 |
| 5 | 10 | 5 | 18 |
Vyplnění sloupce vpřed
Vyplňte sloupec řetězce dopředu. Každé prázdné hodnotě je přiřazena poslední zobrazená neprázdná hodnota.
let Events = datatable (Ts: timespan, Event: string) [
0m, "A",
1m, "",
2m, "B",
3m, "",
4m, "",
6m, "C",
8m, "",
11m, "D",
12m, ""
]
;
Events
| sort by Ts asc
| scan declare (Event_filled: string="") with
(
step s1: true => Event_filled = iff(isempty(Event), s1.Event_filled, Event);
)
Output
| Ts | Event | Event_filled |
|---|---|---|
| 00:00:00 | A | A |
| 00:01:00 | A | |
| 00:02:00 | B | B |
| 00:03:00 | B | |
| 00:04:00 | B | |
| 00:06:00 | C | C |
| 00:08:00 | C | |
| 00:11:00 | D | D |
| 00:12:00 | D |
Označování relací
Rozdělte vstup do relací: Relace končí 30 minut po první události relace, po které se spustí nová relace. Všimněte si použití příznaku with_match_id , který přiřadí jedinečnou hodnotu pro každou jedinečnou shodu (relaci) kontroly. Všimněte si také, že speciální použití dvou kroků v tomto příkladu má inSession jako podmínku, aby zachytil a vypíše všechny záznamy ze vstupu, true zatímco endSession zaznamenává záznamy, ke kterým dochází více než 30 m z sessionStart hodnoty aktuální shody. Tento endSession krok znamená output=none , že nevytáčí výstupní záznamy. Tento endSession krok slouží k posunu stavu aktuální shody od inSession aktuálního endSessionzáznamu, což umožňuje zahájení nové shody (relace) od aktuálního záznamu.
let Events = datatable (Ts: timespan, Event: string) [
0m, "A",
1m, "A",
2m, "B",
3m, "D",
32m, "B",
36m, "C",
38m, "D",
41m, "E",
75m, "A"
]
;
Events
| sort by Ts asc
| scan with_match_id=session_id declare (sessionStart: timespan) with
(
step inSession: true => sessionStart = iff(isnull(inSession.sessionStart), Ts, inSession.sessionStart);
step endSession output=none: Ts - inSession.sessionStart > 30m;
)
Output
| Ts | Event | sessionStart | session_id |
|---|---|---|---|
| 00:00:00 | A | 00:00:00 | 0 |
| 00:01:00 | A | 00:00:00 | 0 |
| 00:02:00 | B | 00:00:00 | 0 |
| 00:03:00 | D | 00:00:00 | 0 |
| 00:32:00 | B | 00:32:00 | 1 |
| 00:36:00 | C | 00:32:00 | 1 |
| 00:38:00 | D | 00:32:00 | 1 |
| 00:41:00 | E | 00:32:00 | 1 |
| 01:15:00 | A | 01:15:00 | 2 |
Výpočet délky relace na uživatele
Pomocí operátoru scan vypočítejte počáteční čas relace, koncový čas a dobu trvání relace každého uživatele. Relace se definuje jako období mezi přihlášením uživatele a následným odhlášením. Díky kombinování partition a scan s output=none a output=all, tento vzor zajišťuje, že jeden řádek se vrátí na relaci (tj. na dvojici přihlášení/odhlášení) místo řádku na událost.
Logika funguje podle:
- V kroku s1: Zachycení časového razítka přihlášení pomocí kroku kontroly s
output=none - V kroku s2: Generování řádku pouze v případech, kdy se najde odpovídající odhlášení pomocí
output=all
let LogsEvents = datatable(Timestamp:datetime, userID:int, EventType:string)
[
datetime(2024-05-28 08:15:23), 1, "login",
datetime(2024-05-28 08:30:15), 2, "login",
datetime(2024-05-28 09:10:27), 3, "login",
datetime(2024-05-28 12:30:45), 1, "logout",
datetime(2024-05-28 11:45:32), 2, "logout",
datetime(2024-05-28 13:25:19), 3, "logout"
];
LogsEvents
| sort by userID, Timestamp
| partition hint.strategy=native by userID (
sort by Timestamp asc
| scan declare (start: datetime, end: datetime, sessionDuration: timespan) with (
step s1 output=none: EventType == "login" => start = Timestamp;
step s2 output=all: EventType == "logout" => start = s1.start, end = Timestamp, sessionDuration = Timestamp - s1.start;
)
)
| project start, end, userID, sessionDuration
Output
| userID | start | end | sessionDuration |
|---|---|---|---|
| 1 | 2024-05-28 08:15:23.0000 | 2024-05-28 12:30:45.0000 | 04:15:22 |
| 3 | 2024-05-28 09:10:27.0000 | 2024-05-28 13:25:19.0000 | 04:14:52 |
| 2 | 2024-05-28 08:30:15.0000 | 2024-05-28 11:45:32.0000 | 03:15:17 |
Události mezi spuštěním a zastavením
Najděte všechny posloupnosti událostí mezi událostí Start a událostí Stop , ke kterým dochází během 5 minut. Přiřaďte ID shody pro každou sekvenci.
let Events = datatable (Ts: timespan, Event: string) [
0m, "A",
1m, "Start",
2m, "B",
3m, "D",
4m, "Stop",
6m, "C",
8m, "Start",
11m, "E",
12m, "Stop"
]
;
Events
| sort by Ts asc
| scan with_match_id=m_id with
(
step s1: Event == "Start";
step s2: Event != "Start" and Event != "Stop" and Ts - s1.Ts <= 5m;
step s3: Event == "Stop" and Ts - s1.Ts <= 5m;
)
Output
| Ts | Event | m_id |
|---|---|---|
| 00:01:00 | Start | 0 |
| 00:02:00 | B | 0 |
| 00:03:00 | D | 0 |
| 00:04:00 | Stop | 0 |
| 00:08:00 | Start | 1 |
| 00:11:00 | E | 1 |
| 00:12:00 | Stop | 1 |
Výpočet vlastního trychtýře událostí
Výpočet dokončení trychtýře sekvence Hail –>Tornado>Thunderstorm Wind s State vlastními prahovými hodnotami v časech mezi událostmi (Tornadouvnitř 1h a Thunderstorm Wind uvnitř).2h Tento příklad je podobný modulu plug-in funnel_sequence_completion, ale umožňuje větší flexibilitu.
StormEvents
| partition hint.strategy=native by State
(
sort by StartTime asc
| scan with
(
step hail: EventType == "Hail";
step tornado: EventType == "Tornado" and StartTime - hail.StartTime <= 1h;
step thunderstormWind: EventType == "Thunderstorm Wind" and StartTime - tornado.StartTime <= 2h;
)
)
| summarize dcount(State) by EventType
Output
| EventType | dcount_State |
|---|---|
| Hail | 50 |
| Tornado | 34 |
| Větrná bouře | 32 |
Průvodce logikou prohledávání
Tato část ukazuje logiku kontroly pomocí podrobného návodu k událostem mezi spuštěním a příkladem zastavení :
let Events = datatable (Ts: timespan, Event: string) [
0m, "A",
1m, "Start",
2m, "B",
3m, "D",
4m, "Stop",
6m, "C",
8m, "Start",
11m, "E",
12m, "Stop"
]
;
Events
| sort by Ts asc
| scan with_match_id=m_id with
(
step s1: Event == "Start";
step s2: Event != "Start" and Event != "Stop" and Ts - s1.Ts <= 5m;
step s3: Event == "Stop" and Ts - s1.Ts <= 5m;
)
Output
| Ts | Event | m_id |
|---|---|---|
| 00:01:00 | Start | 0 |
| 00:02:00 | B | 0 |
| 00:03:00 | D | 0 |
| 00:04:00 | Stop | 0 |
| 00:08:00 | Start | 1 |
| 00:11:00 | E | 1 |
| 00:12:00 | Stop | 1 |
Stav
Stav operátoru scan si můžete představit jako tabulku s řádkem pro každý krok, ve kterém má každý krok svůj vlastní stav. Tento stav obsahuje nejnovější hodnoty sloupců a deklarovaných proměnných ze všech předchozích kroků a aktuálního kroku. Další informace najdete v tématu Stav.
V tomto příkladu může být stav reprezentován následující tabulkou:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 |
Symbol "X" označuje, že pro daný krok není relevantní konkrétní pole.
Odpovídající logika
Tato část se řídí odpovídající logikou při každém záznamu Events tabulky a vysvětluje transformaci stavu a výstupu v jednotlivých krocích.
Note
Vstupní záznam se vyhodnocuje podle kroků v obráceném pořadí od posledního kroku (s3) po první krok (s1).
Záznam 1
| Ts | Event |
|---|---|
| 0m | "A" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože stavs2je prázdný a kontrola 2 není předána, protožes3chybí aktivní sekvence. -
s2: Kontrola 1 není předána, protože stavs1je prázdný a kontrola 2 není předána, protožes2chybí aktivní sekvence. -
s1: Kontrola 1 není relevantní, protože neexistuje žádný předchozí krok. Kontrola 2 není předána, protože záznam nesplňuje podmínkuEvent == "Start". Záznam 1 se zahodí, aniž by to ovlivnilo stav nebo výstup.
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 |
Záznam 2
| Ts | Event |
|---|---|
| 1m | "Start" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože stavs2je prázdný a kontrola 2 není předána, protožes3chybí aktivní sekvence. -
s2: Kontrola 1 není předána, protože stavs1je prázdný a kontrola 2 není předána, protožes2chybí aktivní sekvence. -
s1: Kontrola 1 není relevantní, protože neexistuje žádný předchozí krok. Kontrola 2 je předána, protože záznam splňuje podmínkuEvent == "Start". Tato shoda zahájí novou sekvenci a přiřadí sem_id. Záznam 2 a jehom_id(0) se přidají do stavu a výstupu.
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | 0 | 00:01:00 | "Start" | X | X | X | X |
| s2 | X | X | |||||
| s3 |
Záznam 3
| Ts | Event |
|---|---|
| 2m | "B" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože stavs2je prázdný a kontrola 2 není předána, protožes3chybí aktivní sekvence. -
s2: Kontrola 1 je předána, protože stavs1je neprázdný a záznam splňuje podmínkuTs - s1.Ts < 5m. Tato shoda způsobí, že se stavs1vymaže a pořadís1bude povýšeno nas2. Záznam 3 a jehom_id(0) se přidají do stavu a výstupu. -
s1: Kontrola 1 není relevantní, protože neexistuje žádný předchozí krok a kontrola 2 není předána, protože záznam nesplňuje podmínkuEvent == "Start".
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | 0 | 00:01:00 | "Start" | 00:02:00 | "B" | X | X |
| s3 |
Záznam 4
| Ts | Event |
|---|---|
| 3m | "D" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože záznam nesplňuje podmínkuEvent == "Stop", a kontrola 2 není předána, protožes3chybí aktivní sekvence. -
s2: Kontrola 1 se nepředá, protože stavs1je prázdný. Projde kontrolou 2 , protože splňuje podmínkuTs - s1.Ts < 5m. Záznam 4 a jehom_id(0) se přidají do stavu a výstupu. Hodnoty z tohoto záznamu přepíší předchozí hodnoty stavu pros2.Tsas2.Event. -
s1: Kontrola 1 není relevantní, protože neexistuje žádný předchozí krok a kontrola 2 není předána, protože záznam nesplňuje podmínkuEvent == "Start".
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | 0 | 00:01:00 | "Start" | 00:03:00 | "D" | X | X |
| s3 |
Záznam 5
| Ts | Event |
|---|---|
| 4m | "Stop" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 je předána, protožes2je neprázdná a splňuje podmínkus3Event == "Stop". Tato shoda způsobí, že se stavs2vymaže a pořadís2bude povýšeno nas3. Záznam 5 a jehom_id(0) se přidají do stavu a výstupu. -
s2: Kontrola 1 není předána, protože stavs1je prázdný a kontrola 2 není předána, protožes2chybí aktivní sekvence. -
s1: Kontrola 1 není relevantní, protože neexistuje žádný předchozí krok. Kontrola 2 není předána, protože záznam nesplňuje podmínkuEvent == "Start".
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 | 0 | 00:01:00 | "Start" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Záznam 6
| Ts | Event |
|---|---|
| 6m | "C" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože stavs2je prázdný a kontrola 2 není předána, protožes3nesplňuje podmínkus3Event == "Stop". -
s2: Kontrola 1 není předána, protože stavs1je prázdný a kontrola 2 není předána, protožes2chybí aktivní sekvence. -
s1: Kontrola 1 není předána, protože neexistuje žádný předchozí krok a kontrola 2 není předána, protože nesplňuje podmínkuEvent == "Start". Záznam 6 se zahodí, aniž by to ovlivnilo stav nebo výstup.
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 | 0 | 00:01:00 | "Start" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Záznam 7
| Ts | Event |
|---|---|
| 8m | "Start" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože stavs2je prázdný a kontrola 2 není předána, protože nesplňuje podmínkuEvent == "Stop". -
s2: Kontrola 1 není předána, protože stavs1je prázdný a kontrola 2 není předána, protožes2chybí aktivní sekvence. -
s1: Kontrola 1 se nepředá, protože neexistuje žádný předchozí krok. Projde kontrolou 2 , protože splňuje podmínkuEvent == "Start". Tato shoda iniciuje novou sekvencis1s novoum_id. Záznam 7 a jehom_id(1) se přidají do stavu a výstupu.
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | 1 | 00:08:00 | "Start" | X | X | X | X |
| s2 | X | X | |||||
| s3 | 0 | 00:01:00 | "Start" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Note
Ve stavu jsou teď dvě aktivní sekvence.
Záznam 8
| Ts | Event |
|---|---|
| 11m | "E" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 není předána, protože stavs2je prázdný a kontrola 2 není předána, protože nesplňuje podmínkus3Event == "Stop". -
s2: Kontrola 1 je předána, protože stavs1je neprázdný a záznam splňuje podmínkuTs - s1.Ts < 5m. Tato shoda způsobí, že se stavs1vymaže a pořadís1bude povýšeno nas2. Záznam 8 a jehom_id(1) se přidají do stavu a výstupu. -
s1: Kontrola 1 není relevantní, protože neexistuje žádný předchozí krok a kontrola 2 není předána, protože záznam nesplňuje podmínkuEvent == "Start".
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | 1 | 00:08:00 | "Start" | 00:11:00 | "E" | X | X |
| s3 | 0 | 00:01:00 | "Start" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Záznam 9
| Ts | Event |
|---|---|
| 12m | "Stop" |
Zaznamenat vyhodnocení v každém kroku:
-
s3: Kontrola 1 je předána, protožes2je neprázdná a splňuje podmínkus3Event == "Stop". Tato shoda způsobí, že se stavs2vymaže a pořadís2bude povýšeno nas3. Záznam 9 a jehom_id(1) se přidají do stavu a výstupu. -
s2: Kontrola 1 není předána, protože stavs1je prázdný a kontrola 2 není předána, protožes2chybí aktivní sekvence. -
s1: Kontrola 1 není předána, protože neexistuje žádný předchozí krok a kontrola 2 se nepředá, protože záznam nesplňuje podmínku Event == "Start".
State:
| krokovat | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 | 1 | 00:08:00 | "Start" | 00:11:00 | "E" | 00:12:00 | "Stop" |
Konečný výstup
| Ts | Event | m_id |
|---|---|---|
| 00:01:00 | Start | 0 |
| 00:02:00 | B | 0 |
| 00:03:00 | D | 0 |
| 00:04:00 | Stop | 0 |
| 00:08:00 | Start | 1 |
| 00:11:00 | E | 1 |
| 00:12:00 | Stop | 1 |