Let-instruktion
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 , dynamic och 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 |