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

letNamn=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

letNamn= [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 dynamicalias 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