Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Scannt Daten, führt Abgleiche durch und erstellt Sequenzen basierend auf den Prädikaten.
Übereinstimmende Datensätze werden gemäß den in den Schritten des Operators definierten Prädikaten bestimmt. Ein Prädikat kann vom Zustand abhängen, der durch vorherige Schritte generiert wird. Die Ausgabe für den übereinstimmenden Datensatz wird durch den Eingabedatensatz und die zuordnungen bestimmt, die in den Schritten des Operators definiert sind.
Syntax
T| scan [ with_match_id=MatchIdColumnName ] [ declare(ColumnDeclarations) ] with(StepDefinitions)
ColumnDeclarations-Syntax
Columnname:ColumnType[=DefaultValue ] [, ... ]
StepDefinition-Syntax
step
StepName [ outputlastnone = | all | ] :Bedingung [ Spaltenzuweisung= [,=> ... ];
Erfahren Sie mehr über Syntaxkonventionen.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| T | string |
✔️ | Die Tabellarische Eingabequelle. |
| MatchIdColumnName | string |
Der Name einer Spalte vom Typ long , die als Teil der Scanausführung an die Ausgabe angefügt wird. Gibt den 0-basierten Index der Übereinstimmung für den Datensatz an. |
|
| ColumnDeclarations | string |
Deklariert eine Erweiterung für das Schema von T. Diese Spalten sind in den Schritten Werte zugewiesen. Wenn sie nicht zugewiesen ist, wird der DefaultValue zurückgegeben. Sofern nicht anders angegeben, ist nullDefaultValue . |
|
| StepName | string |
✔️ | Wird verwendet, um auf Werte im Status der Überprüfung für Bedingungen und Zuordnungen zu verweisen. Der Schrittname muss eindeutig sein. |
| Condition | string |
✔️ | Ein Ausdruck, der ausgewertet true wird oder false definiert, welche Datensätze aus der Eingabe mit dem Schritt übereinstimmen. Ein Datensatz stimmt mit dem Schritt überein, wenn die Bedingung mit dem Status des Schritts oder mit dem Status des vorherigen Schritts übereinstimmt true . |
| Assignment | string |
Ein skalarer Ausdruck, der der entsprechenden Spalte zugewiesen ist, wenn ein Datensatz einem Schritt entspricht. | |
output |
string |
Steuert die Ausgabelogik des Schritts für wiederholte Übereinstimmungen.
all gibt alle Datensätze aus, die dem Schritt entsprechen, last gibt nur den letzten Datensatz in einer Reihe wiederholter Übereinstimmungen für den Schritt aus und none gibt keine Datensätze aus, die dem Schritt entsprechen. Der Standardwert ist all. |
Returns
Ein Datensatz für jede Übereinstimmung eines Datensatzes von der Eingabe zu einem Schritt. Das Schema der Ausgabe ist das Schema der Quelle, die mit der Spalte in der declare Klausel erweitert wird.
Scanlogik
scan überschreitet die serialisierten Eingabedaten, datensätze nach Datensatz, vergleicht jeden Datensatz mit der Bedingung jedes Schritts und berücksichtigt dabei den aktuellen Zustand jedes Schritts.
State
Der zugrunde liegende Zustand des scan Operators kann als Tabelle mit jeweils einer Zeile stepbetrachtet werden. Jeder Schritt behält seinen eigenen Zustand mit den neuesten Werten der Spalten und deklarierten Variablen aus allen vorherigen Schritten und dem aktuellen Schritt. Falls relevant, enthält sie auch die Übereinstimmungs-ID für die fortlaufende Sequenz.
Wenn ein Scanoperator n Schritte mit dem Namen s_1, s_2, ..., s_n hat, würde schritt s_kk Datensätze in seinem Zustand aufweisen, der s_1, s_2, ..., s_k entspricht. Der Schrittname. Das ColumnName-Format wird verwendet, um auf einen Wert im Zustand zu verweisen. Beispielsweise würde auf eine Spalte col1 verwiesen, s_2.col1 die zu Schritt s_2 im Status s_k gehört. Ein ausführliches Beispiel finden Sie in der exemplarischen Vorgehensweise zur Überprüfungslogik.
Der Zustand beginnt leer und wird aktualisiert, wenn ein gescannter Eingabedatensatz einem Schritt entspricht. Wenn der Status des aktuellen Schritts nicht inAktiv ist, wird der Schritt als aktive Sequenz bezeichnet.
Abgleichslogik
Jeder Eingabedatensatz wird von dem letzten Schritt bis zum ersten Schritt anhand aller Schritte in umgekehrter Reihenfolge ausgewertet. Wenn ein Datensatz r anhand eines Schritts s_k ausgewertet wird, wird die folgende Logik angewendet:
Check 1: Wenn der Zustand des vorherigen Schritts (s_k-1) nicht in Betracht kommt und r die Bedingung von s_k erfüllt, tritt eine Übereinstimmung auf. Die Übereinstimmung führt zu den folgenden Aktionen:
- Der Status der s_k wird gelöscht.
- Der Zustand von s_k-1 wird gefördert, um zum Zustand der s_k zu werden.
- Die Zuordnungen von s_k werden berechnet und erweitert r.
- Der erweiterte r wird der Ausgabe und dem Status von s_k hinzugefügt.
Note
Wenn "Check 1 " zu einer Übereinstimmung führt, wird "2" ignoriert, und r bewegt sich, um gegen s_k-1 ausgewertet zu werden.
Überprüfen Sie 2: Wenn der Status von s_k eine aktive Sequenz aufweist oder s_k der erste Schritt ist und r die Bedingung von s_k erfüllt, tritt eine Übereinstimmung auf. Die Übereinstimmung führt zu den folgenden Aktionen:
- Die Zuordnungen von s_k werden berechnet und erweitert r.
- Die Werte, die s_k im Zustand s_k darstellen, werden durch die Werte des erweiterten R ersetzt.
- Wenn s_k definiert
output=allist, wird der ausgabe das erweiterte r hinzugefügt. - Wenn s_k der erste Schritt ist, beginnt eine neue Sequenz, und die Übereinstimmungs-ID steigt um
1. Dies wirkt sich nur auf die Ausgabe aus, wennwith_match_idsie verwendet wird.
Sobald die Überprüfungen für s_k abgeschlossen sind, wird r fort, um gegen s_k-1 ausgewertet zu werden.
Ein ausführliches Beispiel für diese Logik finden Sie in der exemplarischen Vorgehensweise zur Überprüfungslogik.
Examples
Das Beispiel in diesem Abschnitt zeigt, wie Sie die Syntax verwenden, um Ihnen bei den ersten Schritten zu helfen.
In den Beispielen in diesem Artikel werden öffentlich verfügbare Tabellen im Hilfecluster verwendet, z. B. die
StormEventsTabelle in der Beispieldatenbank .
In den Beispielen in diesem Artikel werden öffentlich verfügbare Tabellen verwendet, z. B. die
WeatherTabelle im Beispielkatalog der Wetteranalyse. Möglicherweise müssen Sie den Tabellennamen in der Beispielabfrage so ändern, dass er der Tabelle in Ihrem Arbeitsbereich entspricht.
Kumulierte Summe
Berechnen Sie die kumulierte Summe für eine Eingabespalte. Das Ergebnis dieses Beispiels entspricht der Verwendung von 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 |
Kumulierte Summe für mehrere Spalten mit einer Zurücksetzungsbedingung
Berechnen Sie die kumulierte Summe für zwei Eingabespalten, setzen Sie den Summenwert auf den aktuellen Datensatzwert zurück, wenn die kumulierte Summe 10 oder mehr erreicht hat.
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 |
Weiterleiten einer Spalte
Füllen Sie eine Zeichenfolgenspalte vorwärts aus. Jedem leeren Wert wird der zuletzt angezeigte Nichterwendwert zugewiesen.Each empty value is assigned the last seen nonempty value.
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 |
Tagging von Sitzungen
Teilen Sie die Eingabe in Sitzungen auf: Eine Sitzung endet 30 Minuten nach dem ersten Ereignis der Sitzung, nach dem eine neue Sitzung gestartet wird. Beachten Sie die Verwendung der with_match_id Kennzeichnung, die für jede eindeutige Übereinstimmung (Sitzung) des Scans einen eindeutigen Wert zuweist. Beachten Sie außerdem die besondere Verwendung von zwei Schritten in diesem Beispiel als Bedingung, inSessiontrue sodass alle Datensätze aus der Eingabe erfasst und ausgegeben werden, während endSession Datensätze erfasst werden, die mehr als 30 m vom sessionStart Wert für die aktuelle Übereinstimmung stammen. Der endSession Schritt hat output=none die Bedeutung, dass es keine Ausgabedatensätze erzeugt. Der endSession Schritt wird verwendet, um den Status der aktuellen Übereinstimmung von inSession zu zu endSessionwechseln, sodass eine neue Übereinstimmung (Sitzung) beginnen kann, beginnend mit dem aktuellen Datensatz.
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 |
Berechnen der Sitzungslänge pro Benutzer
Berechnen Sie die Startzeit, die Endzeit und die Dauer der Sitzung der einzelnen Benutzer mithilfe des scan Operators. Eine Sitzung wird als Zeitraum zwischen der Anmeldung eines Benutzers und der nachfolgenden Abmeldung definiert. Durch kombinieren partition und scan mit und output=nonemit output=all diesem Muster wird sichergestellt, dass pro Sitzung (d. h. pro Login/Logout-Paar) statt einer Zeile pro Ereignis eine einzelne Zeile zurückgegeben wird.
Die Logik funktioniert wie folgt:
- In Schritt 1: Erfassen des Anmeldezeitstempels mithilfe eines Scanschritts mit
output=none - In Schritt 2: Ausstrahlen einer Zeile nur dann, wenn ein übereinstimmender Abmeldung mithilfe einer übereinstimmenden Abmeldung gefunden wird
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 |
Ereignisse zwischen Start und Stopp
Suchen Sie alle Abfolgen von Ereignissen zwischen dem Ereignis Start und dem Ereignis Stop , die innerhalb von 5 Minuten auftreten. Weisen Sie für jede Sequenz eine Übereinstimmungs-ID zu.
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 |
Berechnen eines benutzerdefinierten Trichters von Ereignissen
Berechnen Eines Trichterabschlusses der Sequenz Hail ->Tornado>Thunderstorm Wind nach State benutzerdefinierten Schwellenwerten für die Zeiten zwischen den Ereignissen (Tornado innerhalb 1h und Thunderstorm Wind innerhalb ).2h Dieses Beispiel ähnelt dem funnel_sequence_completion-Plug-In, ermöglicht jedoch größere Flexibilität.
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 |
| Sturm | 32 |
Exemplarische Vorgehensweise zur Überprüfungslogik
In diesem Abschnitt wird die Scanlogik mithilfe einer schrittweisen exemplarischen Vorgehensweise der Ereignisse zwischen Start- und Stoppbeispiel veranschaulicht:
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 |
Der Zustand
Stellen Sie sich den Status des scan Operators als Tabelle mit einer Zeile für jeden Schritt vor, in der jeder Schritt über einen eigenen Zustand verfügt. Dieser Zustand enthält die neuesten Werte der Spalten und deklarierten Variablen aus allen vorherigen Schritten und dem aktuellen Schritt. Weitere Informationen finden Sie unter "Bundesland".
In diesem Beispiel kann der Zustand mit der folgenden Tabelle dargestellt werden:
| step | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 |
Das "X" gibt an, dass für diesen Schritt ein bestimmtes Feld irrelevant ist.
Die entsprechende Logik
Dieser Abschnitt folgt der übereinstimmenden Logik durch jeden Datensatz der Events Tabelle und erläutert die Transformation des Zustands und der Ausgabe in jedem Schritt.
Note
Ein Eingabedatensatz wird anhand der Schritte in umgekehrter Reihenfolge ausgewertet, von dem letzten Schritt (s3) bis zum ersten Schritt (s1).
Datensatz 1
| Ts | Event |
|---|---|
| 0m | "A" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Die Prüfung 1 wird nicht übergeben, da der Statuss2leer ist und Check 2 nicht übergeben wird, das3keine aktive Sequenz vorhanden ist. -
s2: Die Prüfung 1 wird nicht übergeben, da der Statuss1leer ist und Check 2 nicht übergeben wird, das2keine aktive Sequenz vorhanden ist. -
s1: Check 1 ist irrelevant, da kein vorheriger Schritt vorhanden ist. Check 2 wird nicht übergeben, weil der Datensatz nicht die Bedingung erfülltEvent == "Start". Datensatz 1 wird verworfen, ohne den Zustand oder die Ausgabe zu beeinträchtigen.
State:
| step | m_id | s1.Ts | s1.Event | s2.Ts | s2.Event | s3.Ts | s3.Event |
|---|---|---|---|---|---|---|---|
| s1 | X | X | X | X | |||
| s2 | X | X | |||||
| s3 |
Datensatz 2
| Ts | Event |
|---|---|
| 1m | "Start" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Die Prüfung 1 wird nicht übergeben, da der Statuss2leer ist und Check 2 nicht übergeben wird, das3keine aktive Sequenz vorhanden ist. -
s2: Die Prüfung 1 wird nicht übergeben, da der Statuss1leer ist und Check 2 nicht übergeben wird, das2keine aktive Sequenz vorhanden ist. -
s1: Check 1 ist irrelevant, da kein vorheriger Schritt vorhanden ist. Check 2 wird übergeben, da der Datensatz die Bedingung vonEvent == "Start". Diese Übereinstimmung initiiert eine neue Sequenz und wirdm_idzugewiesen. Datensatz 2 und seinem_id(0) werden dem Zustand und der Ausgabe hinzugefügt.
State:
| step | 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 |
Datensatz 3
| Ts | Event |
|---|---|
| 2m | "B" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Die Prüfung 1 wird nicht übergeben, da der Statuss2leer ist und Check 2 nicht übergeben wird, das3keine aktive Sequenz vorhanden ist. -
s2: Überprüfung 1 wird übergeben, da der Status nichts1erfüllt ist und der Datensatz die Bedingung erfülltTs - s1.Ts < 5m. Diese Übereinstimmung bewirkt, dass der Zustand ders1Löschung erfolgt und die Reihenfolges1höhergestufts2wird. Datensatz 3 und seinem_id(0) werden dem Zustand und der Ausgabe hinzugefügt. -
s1: Check 1 ist irrelevant, da kein vorheriger Schritt vorhanden ist und Check 2 nicht übergeben wird, da der Datensatz nicht die Bedingung erfülltEvent == "Start".
State:
| step | 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 |
Datensatz 4
| Ts | Event |
|---|---|
| 3m | "D" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Überprüfung 1 wird nicht übergeben, weil der Datensatz nicht die BedingungEvent == "Stop"erfüllt, und Check 2 wird nicht übergeben, das3keine aktive Sequenz vorhanden ist. -
s2: Überprüfung 1 wird nicht übergeben, weil der Statuss1leer ist. Die Prüfung 2 wird bestanden, da sie die Bedingung vonTs - s1.Ts < 5m. Datensatz 4 und seinem_id(0) werden dem Zustand und der Ausgabe hinzugefügt. Die Werte aus diesem Datensatz überschreiben die vorherigen Zustandswerte fürs2.Tsunds2.Event. -
s1: Check 1 ist irrelevant, da kein vorheriger Schritt vorhanden ist und Check 2 nicht übergeben wird, da der Datensatz nicht die Bedingung erfülltEvent == "Start".
State:
| step | 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 |
Datensatz 5
| Ts | Event |
|---|---|
| 4m | "Stop" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Prüfung 1 wird übergeben, weils2sie nicht entsent ist und dies3Bedingung erfülltEvent == "Stop". Diese Übereinstimmung bewirkt, dass der Zustand ders2Löschung erfolgt und die Reihenfolges2höhergestufts3wird. Datensatz 5 und seinem_id(0) werden dem Zustand und der Ausgabe hinzugefügt. -
s2: Die Prüfung 1 wird nicht übergeben, da der Statuss1leer ist und Check 2 nicht übergeben wird, das2keine aktive Sequenz vorhanden ist. -
s1: Check 1 ist irrelevant, da kein vorheriger Schritt vorhanden ist. Check 2 wird nicht übergeben, weil der Datensatz nicht die Bedingung erfülltEvent == "Start".
State:
| step | 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" |
Datensatz 6
| Ts | Event |
|---|---|
| 6m | "C" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Check 1 wird nicht übergeben, weil der Statuss2leer ist und Check 2 nicht übergeben wird, das3dies3Bedingung vonEvent == "Stop". -
s2: Die Prüfung 1 wird nicht übergeben, da der Statuss1leer ist und Check 2 nicht übergeben wird, das2keine aktive Sequenz vorhanden ist. -
s1: Überprüfung 1 wird nicht übergeben, weil kein vorheriger Schritt vorhanden ist, und Check 2 wird nicht übergeben, weil sie nicht die Bedingung erfülltEvent == "Start". Datensatz 6 wird verworfen, ohne den Zustand oder die Ausgabe zu beeinträchtigen.
State:
| step | 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" |
Datensatz 7
| Ts | Event |
|---|---|
| 8m | "Start" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Prüfung 1 wird nicht übergeben, weil der Statuss2leer ist und Check 2 nicht übergeben wird, weil sie nicht die Bedingung erfülltEvent == "Stop". -
s2: Die Prüfung 1 wird nicht übergeben, da der Statuss1leer ist und Check 2 nicht übergeben wird, das2keine aktive Sequenz vorhanden ist. -
s1: Überprüfung 1 wird nicht übergeben, da kein vorheriger Schritt vorhanden ist. Die Prüfung 2 wird bestanden, da sie die Bedingung vonEvent == "Start". Diese Übereinstimmung initiiert eine neue Sequenzs1mit einer neuenm_id. Datensatz 7 und seinem_id(1) werden dem Zustand und der Ausgabe hinzugefügt.
State:
| step | 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
Es gibt nun zwei aktive Sequenzen im Zustand.
Datensatz 8
| Ts | Event |
|---|---|
| 11m | "E" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Prüfung 1 wird nicht übergeben, weil der Statuss2leer ist und Check 2 nicht übergeben wird, weil sie nicht dies3Bedingung erfülltEvent == "Stop". -
s2: Überprüfung 1 wird übergeben, da der Status nichts1erfüllt ist und der Datensatz die Bedingung erfülltTs - s1.Ts < 5m. Diese Übereinstimmung bewirkt, dass der Zustand ders1Löschung erfolgt und die Reihenfolges1höhergestufts2wird. Datensatz 8 und seinem_id(1) werden dem Zustand und der Ausgabe hinzugefügt. -
s1: Check 1 ist irrelevant, da kein vorheriger Schritt vorhanden ist und Check 2 nicht übergeben wird, da der Datensatz nicht die Bedingung erfülltEvent == "Start".
State:
| step | 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" |
Datensatz 9
| Ts | Event |
|---|---|
| 12m | "Stop" |
Aufzeichnen der Auswertung bei jedem Schritt:
-
s3: Prüfung 1 wird übergeben, weils2sie nicht entsent ist und dies3Bedingung erfülltEvent == "Stop". Diese Übereinstimmung bewirkt, dass der Zustand ders2Löschung erfolgt und die Reihenfolges2höhergestufts3wird. Datensatz 9 und seinem_id(1) werden dem Zustand und der Ausgabe hinzugefügt. -
s2: Die Prüfung 1 wird nicht übergeben, da der Statuss1leer ist und Check 2 nicht übergeben wird, das2keine aktive Sequenz vorhanden ist. -
s1: Die Prüfung 1 wird nicht übergeben, weil kein vorheriger Schritt vorhanden ist, und Check 2 wird nicht übergeben, da der Datensatz die Bedingung des Ereignisses nicht erfüllt == "Start".
State:
| step | 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" |
Endgültige Ausgabe
| 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 |