scanoperator
Scant gegevens, overeenkomsten en bouwt reeksen op basis van de predicaten.
Overeenkomende records worden bepaald op basis van predicaten die zijn gedefinieerd in de stappen van de operator. Een predicaat kan afhankelijk zijn van de status die door de vorige stappen wordt gegenereerd. De uitvoer voor de overeenkomende record wordt bepaald door de invoerrecord en toewijzingen die zijn gedefinieerd in de stappen van de operator.
Syntax
T| scan
[ with_match_id
=
MatchIdColumnName ] [ declare
(
ColumnDeclarations)
] with
(
StepDefinitions)
Syntaxis van ColumnDeclarations
Kolomnaam:
ColumnType[=
DefaultValue ] [,
... ]
StepDefinition-syntaxis
step
StepName [ output
| last
= all
| none
] :
Condition [ =>
Kolomtoewijzing=
[,
... ] ];
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
T | string |
✔️ | De invoerbron in tabelvorm. |
MatchIdColumnName | string |
De naam van een kolom van het type long die aan de uitvoer wordt toegevoegd als onderdeel van de scanuitvoering. Geeft de index op basis van 0 aan van de overeenkomst voor de record. |
|
ColumnDeclarations | string |
Declareert een extensie voor het schema van T. Deze kolommen zijn toegewezen waarden in de stappen. Als deze niet is toegewezen, wordt de DefaultValue geretourneerd. Tenzij anders opgegeven, is null DefaultValue . |
|
StepName | string |
✔️ | Wordt gebruikt om te verwijzen naar waarden in de status van het scannen op voorwaarden en toewijzingen. De naam van de stap moet uniek zijn. |
Condition | string |
✔️ | Een expressie die evalueert naar true of false die definieert welke records uit de invoer overeenkomen met de stap. Een record komt overeen met de stap wanneer de voorwaarde true de status van de stap of de status van de vorige stap heeft. |
Toewijzing | string |
Een scalaire expressie die wordt toegewezen aan de bijbehorende kolom wanneer een record overeenkomt met een stap. | |
output |
string |
Hiermee bepaalt u de uitvoerlogica van de stap voor herhaalde overeenkomsten. all voert alle records uit die overeenkomen met de stap, last alleen de laatste record in een reeks herhalende overeenkomsten voor de stap en none voert geen records uit die overeenkomen met de stap. De standaardwaarde is all . |
Retouren
Een record voor elke overeenkomst van een record, van de invoer tot een stap. Het schema van de uitvoer is het schema van de bron, uitgebreid met de kolom in de declare
-component.
Scanlogica
scan
doorloopt de geserialiseerde invoergegevens, record voor record, waarbij elke record wordt vergeleken met de voorwaarde van elke stap, waarbij rekening wordt gehouden met de huidige status van elke stap.
Staat
De onderliggende status van de scan
operator kan worden beschouwd als een tabel met een rij voor elke step
. Elke stap behoudt zijn eigen status met de meest recente waarden van de kolommen en gedeclareerde variabelen uit alle vorige stappen en de huidige stap. Indien relevant, bevat het ook de overeenkomst-id voor de lopende volgorde.
Als een scanoperator n stappen heeft met de namen s_1, s_2, ... , s_n , heeft stap s_kk-records in de status die overeenkomt met s_1, s_2, ... , s_k. De StepName. De indeling ColumnName wordt gebruikt om te verwijzen naar een waarde in de status. verwijst bijvoorbeeld s_2.col1
naar de kolom col1
die behoort tot stap s_2 in de status van s_k. Zie het overzicht van de scanlogica voor een gedetailleerd voorbeeld.
De status begint leeg en wordt bijgewerkt wanneer een gescande invoerrecord overeenkomt met een stap. Wanneer de status van de huidige stap niet geldig is, wordt de stap aangeduid als een actieve reeks.
Overeenkomende logica
Elke invoerrecord wordt geëvalueerd op basis van alle stappen in omgekeerde volgorde, van de laatste stap tot de eerste. Wanneer een record r wordt geëvalueerd op basis van een stap s_k, wordt de volgende logica toegepast:
Controle 1: Als de status van de vorige stap (s_k-1) geen waarde heeft en r voldoet aan de voorwaardevan s_k, treedt er een overeenkomst op. De overeenkomst leidt tot de volgende acties:
- De status van s_k is gewist.
- De staat van s_k-1 wordt gepromoveerd tot de staat van s_k.
- De toewijzingen van s_k worden berekend en uitbreiden r.
- De uitgebreide r wordt toegevoegd aan de uitvoer en aan de status van s_k.
Notitie
Als controle 1 resulteert in een overeenkomst, wordt controle 2 genegeerd en wordt r geëvalueerd op basis van s_k-1.
Controle 2: Als de status van s_k een actieve volgorde heeft of s_k de eerste stap is en r voldoet aan de voorwaardevan s_k, treedt er een overeenkomst op. De overeenkomst leidt tot de volgende acties:
- De toewijzingen van s_k worden berekend en uitbreiden r.
- De waarden die s_k in de status van s_k vertegenwoordigen, worden vervangen door de waarden van de uitgebreide r.
- Als s_k is gedefinieerd als
output=all
, wordt de uitgebreide r toegevoegd aan de uitvoer. - Als s_k de eerste stap is, wordt er een nieuwe reeks gestart en wordt de overeenkomst-id met verhoogd
1
. Dit is alleen van invloed op de uitvoer wanneerwith_match_id
wordt gebruikt.
Zodra de controles voor s_k zijn voltooid, wordt r geëvalueerd op basis van s_k-1.
Zie het overzicht van scanlogica voor een gedetailleerd voorbeeld van deze logica.
Voorbeelden
Cumulatief totaal
De cumulatieve som voor een invoerkolom berekenen. Het resultaat van dit voorbeeld is gelijk aan het gebruik van 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;
)
Uitvoer
x | cumulative_x |
---|---|
1 | 1 |
2 | 3 |
3 | 6 |
4 | 10 |
5 | 15 |
Cumulatieve som voor meerdere kolommen met een voorwaarde voor opnieuw instellen
Bereken de cumulatieve som voor twee invoerkolommen en stel de somwaarde opnieuw in op de huidige recordwaarde wanneer de cumulatieve som 10 of meer heeft bereikt.
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);
)
Uitvoer
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 |
Een kolom vooruit invullen
Een tekenreekskolom vooruit vullen. Aan elke lege waarde wordt de laatst geziene waarde toegewezen.
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);
)
Uitvoer
Ts | Gebeurtenis | 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 |
Sessies taggen
Verdeel de invoer in sessies: een sessie eindigt 30 minuten na de eerste gebeurtenis van de sessie, waarna een nieuwe sessie wordt gestart. Let op het gebruik van with_match_id
vlag, waarmee een unieke waarde wordt toegewezen voor elke afzonderlijke overeenkomst (sessie) van de scan. Let ook op het speciale gebruik van twee stappen in dit voorbeeld, inSession
heeft true
als voorwaarde, zodat alle records van de invoer worden vastgelegd en uitgevoerd, terwijl endSession
records worden vastgelegd die meer dan 30 meter van de sessionStart
waarde voor de huidige overeenkomst plaatsvinden. De endSession
stap betekent output=none
dat er geen uitvoerrecords worden geproduceerd. De endSession
stap wordt gebruikt om de status van de huidige overeenkomst van inSession
naar te endSession
gaan, zodat een nieuwe overeenkomst (sessie) kan beginnen vanaf de huidige record.
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;
)
Uitvoer
Ts | Gebeurtenis | 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 |
Gebeurtenissen tussen starten en stoppen
Alle reeksen gebeurtenissen zoeken tussen de gebeurtenis Start
en de gebeurtenis Stop
die zich binnen 5 minuten voordoen. Wijs een overeenkomst-id toe voor elke reeks.
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;
)
Uitvoer
Ts | Gebeurtenis | m_id |
---|---|---|
00:01:00 | Starten | 0 |
00:02:00 | B | 0 |
00:03:00 | D | 0 |
00:04:00 | Stoppen | 0 |
00:08:00 | Starten | 1 |
00:11:00 | E | 1 |
00:12:00 | Stoppen | 1 |
Een aangepaste trechter met gebeurtenissen berekenen
Bereken een trechtervoltooiing van de reeks Hail
->>State
Tornado
Thunderstorm Wind
met aangepaste drempelwaarden voor de tijden tussen de gebeurtenissen (Tornado
binnen 1h
en Thunderstorm Wind
binnen ).2h
Dit voorbeeld is vergelijkbaar met de funnel_sequence_completion-invoegtoepassing, maar biedt meer flexibiliteit.
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
Uitvoer
EventType | dcount_State |
---|---|
Hagel | 50 |
Tornado | 34 |
Onweerswind | 32 |
Overzicht van scanlogica
In deze sectie wordt de scanlogica gedemonstreerd aan de hand van een stapsgewijs overzicht van het voorbeeld Gebeurtenissen tussen begin en einde :
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;
)
De status
U kunt de status van de scan
operator zien als een tabel met een rij voor elke stap, waarin elke stap een eigen status heeft. Deze status bevat de meest recente waarden van de kolommen en gedeclareerde variabelen uit alle vorige stappen en de huidige stap. Zie Status voor meer informatie.
In dit voorbeeld kan de status worden weergegeven met de volgende tabel:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | X | X | |||||
s3 |
De 'X' geeft aan dat een specifiek veld niet relevant is voor die stap.
De overeenkomende logica
Deze sectie volgt de overeenkomende logica voor elke record van de Events
tabel, waarin de transformatie van de status en uitvoer bij elke stap wordt uitgelegd.
Notitie
Een invoerrecord wordt geëvalueerd op basis van de stappen in omgekeerde volgorde, van de laatste stap (s3
) tot de eerste stap (s1
).
Record 1
Ts | Gebeurtenis |
---|---|
0m | "A" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de status vans2
leeg is en controle 2 wordt niet doorgegeven omdats3
er geen actieve volgorde is.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is en controle 2 wordt niet doorgegeven omdats2
er geen actieve volgorde is.s1
: controle 1 is niet relevant omdat er geen vorige stap is. Controle 2 wordt niet doorgegeven omdat de record niet voldoet aan de voorwaarde vanEvent == "Start"
. Record 1 wordt verwijderd zonder dat dit van invloed is op de status of uitvoer.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | X | X | |||||
s3 |
Record 2
Ts | Gebeurtenis |
---|---|
1m | "Starten" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de status vans2
leeg is en controle 2 wordt niet doorgegeven omdats3
er geen actieve volgorde is.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is en controle 2 wordt niet doorgegeven omdats2
er geen actieve volgorde is.s1
: controle 1 is niet relevant omdat er geen vorige stap is. Controle 2 wordt doorgegeven omdat de record voldoet aan de voorwaarde vanEvent == "Start"
. Deze overeenkomst initieert een nieuwe reeks en dem_id
wordt toegewezen. Record 2 en de bijbehorendem_id
(0
) worden toegevoegd aan de status en de uitvoer.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | 0 | 00:01:00 | "Starten" | X | X | X | X |
s2 | X | X | |||||
s3 |
Record 3
Ts | Gebeurtenis |
---|---|
2m | "B" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de status vans2
leeg is en controle 2 wordt niet doorgegeven omdats3
er geen actieve volgorde is.s2
: controle 1 wordt doorgegeven omdat de status vans1
niet-mpty is en de record voldoet aan de voorwaarde vanTs - s1.Ts < 5m
. Deze overeenkomst zorgt ervoor dat de status vans1
wordt gewist en de volgorde ins1
wordt gepromoveerd naars2
. Record 3 en de bijbehorendem_id
(0
) worden toegevoegd aan de status en de uitvoer.s1
: controle 1 is niet relevant omdat er geen vorige stap is en controle 2 wordt niet doorgegeven omdat de record niet voldoet aan de voorwaarde vanEvent == "Start"
.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | 0 | 00:01:00 | "Starten" | 00:02:00 | "B" | X | X |
s3 |
Record 4
Ts | Gebeurtenis |
---|---|
3m | "D" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de record niet voldoet aan de voorwaarde vanEvent == "Stop"
, en controle 2 wordt niet doorgegeven omdats3
er geen actieve volgorde is.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is. het voldoet aan controle 2 omdat het voldoet aan de voorwaarde vanTs - s1.Ts < 5m
. Record 4 en de bijbehorendem_id
(0
) worden toegevoegd aan de status en de uitvoer. De waarden uit deze record overschrijven de vorige statuswaarden voors2.Ts
ens2.Event
.s1
: controle 1 is niet relevant omdat er geen vorige stap is en controle 2 wordt niet doorgegeven omdat de record niet voldoet aan de voorwaarde vanEvent == "Start"
.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | 0 | 00:01:00 | "Starten" | 00:03:00 | "D" | X | X |
s3 |
Record 5
Ts | Gebeurtenis |
---|---|
4m | "Stop" |
Noteer de evaluatie bij elke stap:
s3
: Controle 1 wordt doorgegeven omdats2
niet-mpty is en voldoet aan des3
voorwaarde vanEvent == "Stop"
. Deze overeenkomst zorgt ervoor dat de status vans2
wordt gewist en de volgorde ins2
wordt gepromoveerd naars3
. Record 5 en de bijbehorendem_id
(0
) worden toegevoegd aan de status en de uitvoer.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is en controle 2 wordt niet doorgegeven omdats2
er geen actieve volgorde is.s1
: controle 1 is niet relevant omdat er geen vorige stap is. Controle 2 wordt niet doorgegeven omdat de record niet voldoet aan de voorwaarde vanEvent == "Start"
.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | X | X | |||||
s3 | 0 | 00:01:00 | "Starten" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Record 6
Ts | Gebeurtenis |
---|---|
6m | "C" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de status vans2
leeg is en controle 2 niet wordt doorgegeven omdats3
niet voldoet aan des3
voorwaarde vanEvent == "Stop"
.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is en controle 2 wordt niet doorgegeven omdats2
er geen actieve volgorde is.s1
: controle 1 is niet geslaagd omdat er geen vorige stap is en controle 2 wordt niet doorgegeven omdat deze niet voldoet aan de voorwaarde vanEvent == "Start"
. Record 6 wordt verwijderd zonder dat dit van invloed is op de status of uitvoer.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | X | X | |||||
s3 | 0 | 00:01:00 | "Starten" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Record 7
Ts | Gebeurtenis |
---|---|
8m | "Starten" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de status vans2
leeg is en controle 2 niet wordt doorgegeven omdat deze niet voldoet aan de voorwaarde vanEvent == "Stop"
.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is en controle 2 wordt niet doorgegeven omdats2
er geen actieve volgorde is.s1
: controle 1 is niet geslaagd omdat er geen vorige stap is. het voldoet aan controle 2 omdat het voldoet aan de voorwaarde vanEvent == "Start"
. Met deze overeenkomst wordt een nieuwe reeks gestart ins1
met een nieuwem_id
. Record 7 en de bijbehorendem_id
(1
) worden toegevoegd aan de status en de uitvoer.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | 1 | 00:08:00 | "Starten" | X | X | X | X |
s2 | X | X | |||||
s3 | 0 | 00:01:00 | "Starten" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Notitie
Er zijn nu twee actieve reeksen in de status.
Record 8
Ts | Gebeurtenis |
---|---|
11m | "E" |
Noteer de evaluatie bij elke stap:
s3
: controle 1 wordt niet doorgegeven omdat de status vans2
leeg is en controle 2 niet wordt doorgegeven omdat deze niet voldoet aan des3
voorwaarde vanEvent == "Stop"
.s2
: controle 1 wordt doorgegeven omdat de status vans1
niet-mpty is en de record voldoet aan de voorwaarde vanTs - s1.Ts < 5m
. Deze overeenkomst zorgt ervoor dat de status vans1
wordt gewist en de volgorde ins1
wordt gepromoveerd naars2
. Record 8 en de bijbehorendem_id
(1
) worden toegevoegd aan de status en de uitvoer.s1
: controle 1 is niet relevant omdat er geen vorige stap is en controle 2 wordt niet doorgegeven omdat de record niet voldoet aan de voorwaarde vanEvent == "Start"
.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | 1 | 00:08:00 | "Starten" | 00:11:00 | "E" | X | X |
s3 | 0 | 00:01:00 | "Starten" | 00:03:00 | "D" | 00:04:00 | "Stop" |
Record 9
Ts | Gebeurtenis |
---|---|
12m | "Stop" |
Noteer de evaluatie bij elke stap:
s3
: Controle 1 wordt doorgegeven omdats2
niet-mpty is en voldoet aan des3
voorwaarde vanEvent == "Stop"
. Deze overeenkomst zorgt ervoor dat de status vans2
wordt gewist en de volgorde ins2
wordt gepromoveerd naars3
. Record 9 en de bijbehorendem_id
(1
) worden toegevoegd aan de status en de uitvoer.s2
: controle 1 wordt niet doorgegeven omdat de status vans1
leeg is en controle 2 wordt niet doorgegeven omdats2
er geen actieve volgorde is.s1
: controle 1 is niet geslaagd omdat er geen vorige stap is. het voldoet aan controle 2 omdat het voldoet aan de voorwaarde vanEvent == "Start"
. Met deze overeenkomst wordt een nieuwe reeks gestart ins1
met een nieuwem_id
.
Staat:
stap | m_id | s1. Ts | s1. Gebeurtenis | s2. Ts | s2. Gebeurtenis | s3. Ts | s3. Gebeurtenis |
---|---|---|---|---|---|---|---|
s1 | X | X | X | X | |||
s2 | X | X | |||||
s3 | 1 | 00:08:00 | "Starten" | 00:11:00 | "E" | 00:12:00 | "Stop" |
Uiteindelijke uitvoer
Ts | Gebeurtenis | m_id |
---|---|---|
00:01:00 | Starten | 0 |
00:02:00 | B | 0 |
00:03:00 | D | 0 |
00:04:00 | Stoppen | 0 |
00:08:00 | Starten | 1 |
00:11:00 | E | 1 |
00:12:00 | Stoppen | 1 |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor