Dela via


Let-instruktion

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

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ändningar av let-instruktionen i en enda fråga finns i Optimera frågor som använder namngivna uttryck.

Not

let-instruktionen 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 tabelluttryck

let namn=uttryck

Viktig

Let-instruktioner måste följas av ett semikolon. Det får inte finnas några tomma rader mellan let-instruktioner eller mellan let-instruktioner och andra frågeinstruktioner.

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
namn string ✔️ Variabelnamnet. Du kan komma ifrån namnet med hakparenteser. Till exempel ["Name with spaces"].
uttryck string ✔️ Ett uttryck med ett skalärt eller tabellresultat. Ett uttryck med ett skalärt resultat skulle till exempel vara let one=1;, och ett uttryck med ett tabellresultat skulle vara let RecentLog = Logs | where Timestamp > ago(1h).

Syntax: Visa eller funktion

let Name= [view] ([ Parameters ]){FunctionBody}

Viktig

Let-instruktioner måste följas av ett semikolon. Det får inte finnas några tomma rader mellan let-instruktioner eller mellan let-instruktioner och andra frågeinstruktioner.

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs 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 let-instruktionen i frågor med en union-operator med jokerteckenval av tabeller/vyer. 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 indatafliken innehålla dessa kolumner. Om ett jokertecken anges kan argumentet för indatafliken 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 Namn:Typ. 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, dynamicoch alias för dessa typer.

Not

  • Tabellparametrar måste visas före skalära parametrar.
  • Två instruktioner måste avgränsas med semikolon.

Exempel

I hjälpklusterfinns det en Samples databas med en StormEvents tabell.

Definiera skalära värden

I följande exempel används en instruktion för skalärt uttryck.

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

utdata

y
0
5
10
15
20

Skapa en användardefinierad funktion med skalära beräkningar

I det här exemplet används let-instruktionen med argument för skalär beräkning. Frågan definierar funktion 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)

utdata

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 du 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))

utdata

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

utdata

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 view eller en 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

utdata

$table MyColumn
Intervall 10 5
Intervall 20 5

Använda en materialiserande funktion

Med funktionen materialize() kan du cachelagra underfrågor under tiden för frågekörningen. När du använder funktionen materialize() 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

utdata

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

utdata

Stat s_s
ATLANTEN, SÖDRA ATLANTEN SOUTHATLANTIC SOUTH
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()

utdata

Räkna
59,066