Let-instruktion
En let
-instruktion används för att ange ett variabelnamn som är lika med ett uttryck eller en funktion, eller för att skapa vyer.
let
-instruktioner är användbara för:
- Dela upp ett komplext uttryck i flera delar som var och en representeras av en variabel.
- Definiera konstanter utanför frågetexten för läsbarhet.
- Definiera en variabel en gång och använda den flera gånger i en fråga.
Om variabeln tidigare representerade ett annat värde, till exempel i kapslade instruktioner, gäller den innersta let
-instruktionen.
Information om hur du optimerar flera användningsområden för -instruktionen let
i en enskild fråga finns i Optimera frågor som använder namngivna uttryck.
Anteckning
-instruktionen let
binder ett namn till en beräkning, inte till det utvärderade värdet för den beräkningen. Det här beteendet innebär att flera referenser till samma namn kan returnera olika värden på grund av att beräkningen utvärderas flera gånger. Om detta inte är det önskade beteendet använder du toscalar() eller materialize().
Syntax: Skalära eller tabellbaserade uttryck
let
Namn=
Uttryck
Viktigt
Let-instruktioner måste följas av ett semikolon. Det får inte finnas några tomma rader mellan let-instruktioner eller let-instruktioner och andra frågeinstruktioner.
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
Namn | string |
✔️ | Variabelnamnet. Du kan undvika namnet med hakparenteser. Till exempel ["Name with spaces"] . |
Uttryck | string |
✔️ | Ett uttryck med ett skalärt eller tabellresultat. Till exempel skulle ett uttryck med ett skalärt resultat vara let one=1; , och ett uttryck med ett tabellresultat skulle vara let RecentLog = Logs | where Timestamp > ago(1h) . |
Syntax: Visa eller funktion
let
Namn=
[view
] (
[ Parametrar ])
{
FunctionBody}
Viktigt
Let-instruktioner måste följas av ett semikolon. Det får inte finnas några tomma rader mellan let-instruktioner eller let-instruktioner och andra frågeinstruktioner.
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
FunctionBody | string |
✔️ | Ett uttryck som ger en användardefinierad funktion. |
view |
string |
Endast relevant för en parameterlös let instruktion. När den används inkluderas -instruktionen let i frågor med en union operatör med jokerteckenval av tabellerna/vyerna. Ett exempel finns i Skapa en vy eller virtuell tabell. |
|
Parametrar | string |
Noll eller fler kommaavgränsade tabell- eller skalärfunktionsparametrar. För varje parameter av tabelltyp ska parametern ha formatet TableName : TableSchema, där TableSchema antingen är en kommaavgränsad lista med kolumner i formatet ColumnName: ColumnType eller ett jokertecken (* ). Om kolumner anges måste argumentet för indata i tabellform innehålla dessa kolumner. Om ett jokertecken har angetts kan det inmatade tabellargumentet ha valfritt schema. Om du vill referera till kolumner i funktionstexten måste de anges. Exempel finns i Tabellargument med schema och tabellargument med jokertecken.För varje parameter av skalär typ anger du parameternamnet och parametertypen i formatet Namntyp : . Namnet kan visas i FunctionBody och är bundet till ett visst värde när den användardefinierade funktionen anropas. De enda typer som stöds är bool , string , long , datetime , timespan , real , och dynamic alias för dessa typer. |
Anteckning
- Tabellparametrar måste visas före skalärparametrar.
- Två instruktioner måste avgränsas med semikolon.
Exempel
Definiera skalärvärden
I följande exempel används en skalär uttrycksinstrukering.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
I följande exempel binds namnet some number
med notationen ['name']
och används sedan i en tabelluttrycksinstruktion.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Skapa en användardefinierad funktion med skalär beräkning
I det här exemplet används let-instruktionen med argument för skalär beräkning. Frågan definierar funktionen MultiplyByN
för att multiplicera två tal.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
Resultat
x | resultat |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Skapa en användardefinierad funktion som trimmar indata
I följande exempel tar bort inledande och avslutande från indata.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
Resultat
x | resultat |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Använda flera let-instruktioner
Det här exemplet definierar två let-instruktioner där en instruktion (foo2
) använder en annan (foo1
).
let foo1 = (_start:long, _end:long, _step:long) { range x from _start to _end step _step};
let foo2 = (_step:long) { foo1(1, 100, _step)};
foo2(2) | count
Resultat
resultat |
---|
50 |
Skapa en vy eller virtuell tabell
Det här exemplet visar hur du använder en let-instruktion för att skapa en eller enview
virtuell tabell.
let Range10 = view () { range MyColumn from 1 to 10 step 1 };
let Range20 = view () { range MyColumn from 1 to 20 step 1 };
search MyColumn == 5
Resultat
$table | Minkolumn |
---|---|
Intervall 10 | 5 |
Intervall 20 | 5 |
Använda en materialisera-funktion
Med materialize()
funktionen kan du cachelagra underfrågor under tiden för frågekörningen. När du använder materialize()
funktionen cachelagras data och eventuella efterföljande anrop av resultatet använder cachelagrade data.
let totalPagesPerDay = PageViews
| summarize by Page, Day = startofday(Timestamp)
| summarize count() by Day;
let materializedScope = PageViews
| summarize by Page, Day = startofday(Timestamp);
let cachedResult = materialize(materializedScope);
cachedResult
| project Page, Day1 = Day
| join kind = inner
(
cachedResult
| project Page, Day2 = Day
)
on Page
| where Day2 > Day1
| summarize count() by Day1, Day2
| join kind = inner
totalPagesPerDay
on $left.Day1 == $right.Day
| project Day1, Day2, Percentage = count_*100.0/count_1
Resultat
Dag 1 | Dag 2 | Procent |
---|---|---|
2016-05-01 00:00:00.0000000 | 2016-05-02 00:00:00.0000000 | 34.0645725975255 |
2016-05-01 00:00:00.0000000 | 2016-05-03 00:00:00.0000000 | 16.618368960101 |
2016-05-02 00:00:00.0000000 | 2016-05-03 00:00:00.0000000 | 14.6291376489636 |
Använda kapslade let-instruktioner
Kapslade let-instruktioner tillåts, inklusive i ett användardefinierat funktionsuttryck. Let-instruktioner och argument gäller både i funktionstextens aktuella och inre omfång.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...
Tabellargument med schema
I följande exempel anges att tabellparametern T
måste ha en kolumn State
av typen string
. Tabellen T
kan även innehålla andra kolumner, men de kan inte refereras till i funktionen StateState
eftersom de inte deklareras.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Resultat
Tillstånd | s_s |
---|---|
SYDATLANT | SYDATLANTISKA ATLANTEN |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GEORGIEN | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Tabellargument med jokertecken
Tabellparametern T
kan ha valfritt schema och funktionen CountRecordsInTable
fungerar.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Resultat
Antal |
---|
59,066 |
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för