let-Anweisung
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Eine let
Anweisung wird verwendet, um einen Variablennamen auf einen Ausdruck oder eine Funktion festzulegen oder Ansichten zu erstellen.
let
-Anweisungen sind hilfreich beim:
- Unterteilen eines komplexen Ausdrucks in mehrere Teile, die jeweils durch eine Variable dargestellt werden.
- Definieren von Konstanten außerhalb des Abfragetexts zur Lesbarkeit.
- Einmaligen Definieren einer Variablen und bei mehrfacher Verwendung innerhalb einer Abfrage.
Wenn die Variable zuvor einen anderen Wert hatte, z. B. in geschachtelten Anweisungen, gilt die innerste let
-Anweisung.
Informationen zum Optimieren mehrerer Verwendungsmöglichkeiten der let
-Anweisung innerhalb einer einzelnen Abfrage finden Sie unter Optimieren von Abfragen, die benannte Ausdrücke verwenden.
Hinweis
Die let
Anweisung bindet einen Namen an eine Berechnung, nicht an den ausgewerteten Wert dieser Berechnung. Dieses Verhalten bedeutet, dass mehrere Verweise auf denselben Namen unterschiedliche Werte zurückgeben können, da die Berechnung mehrmals ausgewertet wird. Wenn dies nicht das gewünschte Verhalten ist, verwenden Sie toscalar() oder materialize().
Syntax: Skalare oder tabellarische Ausdrücke
let
Name =
Ausdruck
Wichtig
Let-Anweisungen muss ein Semikolon folgen. Zwischen Let-Anweisungen oder zwischen Let-Anweisungen und anderen Abfrageanweisungen können keine Leerzeilen vorhanden sein.
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
Name | string |
✔️ | Der Variablenname. Sie können den Namen mit Klammern versehen. Beispiel: ["Name with spaces"] . |
Ausdruck | string |
✔️ | Ein Ausdruck mit einem skalaren oder tabellarischen Ergebnis. Ein Ausdruck mit einem skalaren Ergebnis wäre z. B. let one=1; , und ein Ausdruck mit einem tabellarischen Ergebnis wäre let RecentLog = Logs | where Timestamp > ago(1h) . |
Syntax: Ansicht oder Funktion
let
Name =
[] (
[ view
Parameter ])
{
FunctionBody }
Wichtig
Let-Anweisungen muss ein Semikolon folgen. Zwischen Let-Anweisungen oder zwischen Let-Anweisungen und anderen Abfrageanweisungen können keine Leerzeilen vorhanden sein.
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | BESCHREIBUNG |
---|---|---|---|
FunctionBody | string |
✔️ | Ein Ausdruck, der eine benutzerdefinierte Funktion ergibt. |
view |
string |
Nur relevant für eine parameterlose let -Anweisung. Wenn die let -Anweisung verwendet wird, wird sie in Abfragen mit einem union -Operator einbezogen und für die Tabellen/Ansichten wird ein Platzhalter ausgewählt. Ein Beispiel finden Sie unter Erstellen einer Ansicht oder einer virtuellen Tabelle. |
|
Parameter | string |
Null oder mehr kommagetrennte Tabellen- oder Skalarfunktionsparameter. Für Parameter des tabellarischen Typs muss der Parameter das Format Tabellenname : Tabellenschema aufweisen, wobei Tabellenschema entweder eine kommagetrennte Liste von Spalten im Format Spaltenname: Spaltentyp oder ein Platzhalter (* ) ist. Wenn Spalten angegeben werden, muss das eingegebene tabellarische Argument diese Spalten enthalten. Bei Angabe eines Platzhalters kann das eingegebene tabellarische Argument ein beliebiges Schema aufweisen. Um auf Spalten im Funktionstext zu verweisen, müssen sie angegeben werden. Beispiele finden Sie unter Tabellarisches Argument mit Schema sowie unter Tabellarisches Argument mit Platzhalter.Geben Sie für jeden Parameter des Skalartyps den Parameternamen und den Parametertyp im Format Name : Typ an. Der Name kann im FunctionBody angezeigt werden und ist an einen bestimmten Wert gebunden, wenn die benutzerdefinierte Funktion aufgerufen wird. Die einzigen unterstützten Typen sind bool , string , long , datetime , timespan , real und dynamic sowie die Aliase für diese Typen. |
Hinweis
- Tabellarische Parameter müssen sich vor Skalarparametern befinden.
- Zwei Anweisungen müssen durch ein Semikolon getrennt werden.
Beispiele
Definieren skalarer Werte
Im folgenden Beispiel wird eine skalare Ausdrucksanweisung verwendet.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
Im folgenden Beispiel wird der Name some number
mithilfe der Notation ['name']
gebunden und dann in einer tabellarischen Ausdrucksanweisung verwendet.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Erstellen einer benutzerdefinierten Funktion mit skalarer Berechnung
Dieses Beispiel verwendet die let-Anweisung mit Argumenten für die Skalarberechnung. Die Abfrage definiert Funktion MultiplyByN
für die Multiplikation von zwei Zahlen.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
Ausgabe
x | result |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Erstellen einer benutzerdefinierten Funktion, die Eingaben kürzt
Im folgenden Beispiel werden führende/nachfolgende Einsen aus der Eingabe entfernt.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
Ausgabe
x | result |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Verwenden mehrerer let-Anweisungen
In diesem Beispiel werden zwei let-Anweisungen definiert, wobei eine Anweisung (foo2
) eine andere Anweisung (foo1
) verwendet.
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
Ausgabe
result |
---|
50 |
Erstellen einer Ansicht oder einer virtuellen Tabelle
In diesem Beispiel wird gezeigt, wie Sie eine let-Anweisung verwenden, um eine oder eine view
oder eine virtuelle Tabelle zu erstellen.
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
Ausgabe
$table | MyColumn |
---|---|
Range10 | 5 |
Range20 | 5 |
Verwenden der materialize-Funktion
Mit der materialize()
-Funktion können Sie Ergebnisse von Unterabfragen während der Zeit der Abfrageausführung zwischenspeichern. Wenn Sie die materialize()
-Funktion verwenden, werden die Daten zwischengespeichert, und jeder nachfolgende Aufruf des Ergebnisses verwendet zwischengespeicherte Daten.
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
Ausgabe
Tag1 | Tag2 | Prozentwert |
---|---|---|
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 |
Verwenden geschachtelter let-Anweisungen
Geschachtelte let-Anweisungen sind zulässig, auch innerhalb eines benutzerdefinierten Funktionsausdrucks. Let-Anweisungen und -Argumente sind im aktuellen und inneren Gültigkeitsbereich des Funktionstexts sichtbar.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...
Tabellarisches Argument mit Schema
Im folgenden Beispiel wird angegeben, dass der Tabellenparameter T
über die Spalte State
vom Typ string
verfügen muss. Die Tabelle T
kann auch andere Spalten enthalten, aber in der Funktion StateState
kann nicht auf sie verwiesen werden, da sie nicht deklariert sind.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Ausgabe
State | s_s |
---|---|
ATLANTIC SOUTH | ATLANTIC SOUTHATLANTIC SOUTH |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GEORGIA | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Tabellarisches Argument mit Platzhalter
Der Tabellenparameter T
kann ein beliebiges Schema aufweisen, und die Funktion CountRecordsInTable
funktioniert.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Ausgabe
Anzahl |
---|
59.066 |