Partager via


Let statement

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

A let statement is used to set a variable name equal to an expression or a function, or to create views.

Les instructions let sont utiles pour :

  • Décomposer une expression complexe en plusieurs parties, chacune étant représentée par une variable.
  • Définir des constantes en dehors du corps de la requête, pour des raisons de lisibilité.
  • Définir une variable une seule fois et l’utiliser plusieurs fois dans une requête.

Si la variable représentait auparavant une autre valeur, par exemple dans des instructions imbriquées, l’instruction let la plus à l’intérieur s’applique.

Pour optimiser plusieurs utilisations de l’instruction let dans une même requête, consultez Optimiser les requêtes qui utilisent des expressions nommées.

Note

L’instruction let lie un nom à un calcul, et non à la valeur évaluée de ce calcul. Ce comportement signifie que plusieurs références au même nom peuvent retourner différentes valeurs en raison du calcul évalué plusieurs fois. If this is not the desired behavior, use toscalar() or materialize().

Syntaxe : expressions scalaires ou tabulaires

let Name=Expression

Important

Les instructions let doivent être suivies d’un point-virgule. Il ne peut pas y avoir de ligne vide entre les instructions let ou entre les instructions let et d’autres instructions de requête.

Learn more about syntax conventions.

Parameters

Name Type Required Description
Name string ✔️ Nom de la variable. Vous pouvez placer le nom en échappement avec des crochets. Par exemple : ["Name with spaces"].
Expression string ✔️ Une expression avec un résultat scalaire ou tabulaire. Par exemple, une expression avec un résultat scalaire serait let one=1;, et une expression avec un résultat tabulaire serait let RecentLog = Logs | where Timestamp > ago(1h).

Syntaxe : vue ou fonction

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

Important

Les instructions let doivent être suivies d’un point-virgule. Il ne peut pas y avoir de ligne vide entre les instructions let ou entre les instructions let et d’autres instructions de requête.

Learn more about syntax conventions.

Parameters

Name Type Required Description
FunctionBody string ✔️ Une expression qui produit une fonction définie par l’utilisateur.
view string Concerne seulement une instruction let sans paramètres. Quand elle est utilisée, l’instruction let est incluse dans les requêtes avec un opérateur union, avec une sélection de caractères génériques des tables/vues. Pour obtenir un exemple, consultez Créer une vue ou une table virtuelle.
Parameters string Zéro ou plusieurs paramètres de fonction tabulaires ou scalaires, séparés par une virgule.

For each parameter of tabular type, the parameter should be in the format TableName:TableSchema, in which TableSchema is either a comma-separated list of columns in the format ColumnName:ColumnType or a wildcard (*). Si des colonnes sont spécifiées, l’argument tabulaire d’entrée doit contenir ces colonnes. Si un caractère générique est spécifié, l’argument tabulaire d’entrée peut avoir n’importe quel schéma. Pour référencer des colonnes dans le corps de la fonction, elles doivent être spécifiées. Pour obtenir des exemples, consultez Argument tabulaire avec schéma et Argument tabulaire avec caractère générique.

For each parameter of scalar type, provide the parameter name and parameter type in the format Name:Type. The name can appear in the FunctionBody and is bound to a particular value when the user defined function is invoked. Les seuls types pris en charge sont bool, string, longdatetime, timespan, real, dynamic et les alias de ces types.

Note

  • Les paramètres tabulaires doivent apparaître avant les paramètres scalaires.
  • Deux instructions doivent être séparées par un point-virgule.

Examples

Les exemples de requête montrent la syntaxe et l’utilisation de l’opérateur, de l’instruction ou de la fonction.

The examples in this article use publicly available tables in the help cluster, such as the StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table in the Weather analytics sample gallery. Vous devrez peut-être modifier le nom de la table dans l’exemple de requête pour qu’elle corresponde à la table de votre espace de travail.

Définir des valeurs scalaires

L’exemple suivant utilise une instruction d’expression scalaire.

let threshold = 50;
let region = "West";
datatable(Name:string, Score:int, Region:string)
[
    "Alice", 45, "West",
    "Bob", 60, "East",
    "Charlie", 55, "West",
    "Dana", 70, "North"
]
| where Score > threshold and Region == region

Output

Name Score Region
Charlie 55 West

Définir des expressions tabulaires

L’exemple suivant lie le nom some number en utilisant la notation ['name'], puis l’utilise dans une instruction d’expression tabulaire.

let ['some number'] = 20;
range y from 0 to ['some number'] step 5

Output

y
0
5
10
15
20

Créer une fonction définie par l’utilisateur avec un calcul scalaire

L’exemple suivant utilise l’instruction Let avec des arguments pour le calcul scalaire. La requête définit la fonction MultiplyByN pour la multiplication de deux nombres.

let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1 
| extend result = MultiplyByN(x, 5)

Output

x result
1 5
2 10
3 15
4 20
5 25

Créer une fonction définie par l’utilisateur qui supprime les espaces de l’entrée

L’exemple suivant supprime les espaces de début et de fin de l’entrée.

let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1 
| extend result = TrimOnes(tostring(x))

Output

x result
10 0
11
12 2
13 3
14 4
15 5

Utiliser plusieurs instructions Let

Cet exemple définit deux instructions Let où une instruction (foo2) en utilise une autre (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

Output

result
50

Créer une vue ou une table virtuelle

Cet exemple vous montre comment utiliser une instruction let pour créer une view ou une table virtuelle.

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

Output

$table MyColumn
Range10 5
Range20 5

Utiliser une fonction materialize

La fonction materialize() vous permet de mettre en cache les résultats de la sous-requête au moment de l’exécution de la requête. Quand vous utilisez la fonction materialize(), les données sont mises en cache et toute appel ultérieur du résultat utilise les données mises en cache.

let TotalEventsbyLocation = StormEvents
| summarize TotalCount = count() by Location = BeginLocation;
let materializedScope = StormEvents
| summarize by EventType, Location = EndLocation;
let cachedResult = materialize(materializedScope);
cachedResult
| project EventType, Location
| join kind = inner
(
    cachedResult
    | project EventType, Location
)
on EventType
| where Location != ""
| summarize EventCount = count() by Location
| join kind = inner
    TotalEventsbyLocation
on $left.Location == $right.Location
| project Location, EventCount, TotalCount, Percentage = EventCount * 100.0 / TotalCount

Output

Location EventCount TotalCount Percentage
MELBOURNE BEACH 112 1 11,200
EUSTIS 13,854 12 115,450
LOTTS 6,910 1 691,000
SERVICE 997 1 99,700
... ... ... ...

Utilisation d’instructions let imbriquées

Les instructions let imbriquées sont autorisées, y compris dans une expression de fonction définie par l’utilisateur. Les instructions et les arguments Let s’appliquent à la fois dans l’étendue active et intérieure du corps de la fonction.

let start_time = ago(5h); 
let end_time = start_time + 2h; 
T | where Time > start_time and Time < end_time | ...

Argument tabulaire avec schéma

L’exemple suivant spécifie que le paramètre de table Tdoit avoir une colonne State de type string. La table T peut également inclure d’autres colonnes, mais elles ne peuvent pas être référencées dans la fonction StateState, car elles ne sont pas déclarées.

let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s

Output

State s_s
ATLANTIC SOUTH ATLANTIQUE SUDATLANTIC SUD
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

Argument tabulaire avec caractère générique

Le paramètre de table T peut avoir n’importe quel schéma, et la fonction CountRecordsInTable va fonctionner.

let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()

Output

Count
59,066