Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✅Microsoft Fabric✅
Retourne une valeur de constante scalaire de l’expression évaluée.
Cette fonction est utile pour les requêtes qui nécessitent des calculs intermédiaires. Par exemple, calculez un nombre total d’événements, puis utilisez le résultat pour filtrer les groupes qui dépassent un certain pourcentage de tous les événements.
Deux instructions sont séparées par un point-virgule.
Syntaxe
toscalar(
Expression)
En savoir plus sur les conventions de syntaxe.
Paramètres
| Nom | Type | Requise | Description |
|---|---|---|---|
| expression | string |
✔️ | Valeur à convertir en valeur scalaire. |
Retours
Valeur constante scalaire de l’expression évaluée. Si le résultat est tabulaire, la première colonne et la première ligne sont prises pour la conversion.
Conseil
Vous pouvez utiliser une instruction let pour la lisibilité de la requête lors de l’utilisation toscalar().
Limites
toscalar() ne peut pas être appliqué à un scénario qui applique la fonction sur chaque ligne. Cela est dû au fait que la fonction ne peut être calculée qu’un nombre constant de fois pendant l’exécution de la requête.
En règle générale, lorsque cette limitation est atteinte, l’erreur suivante est retournée : can't use '<column name>' as it is defined outside its row-context scope.
Dans l’exemple suivant, la requête échoue avec l’erreur :
'toscalar': can't use 'x' as it is defined outside its row-context scope.
let _dataset1 = datatable(x:long)[1,2,3,4,5];
let _dataset2 = datatable(x:long, y:long) [ 1, 2, 3, 4, 5, 6];
let tg = (x_: long)
{
toscalar(_dataset2| where x == x_ | project y);
};
_dataset1
| extend y = tg(x)
Cette défaillance peut être atténuée à l’aide de l’opérateur join , comme dans l’exemple suivant :
let _dataset1 = datatable(x: long)[1, 2, 3, 4, 5];
let _dataset2 = datatable(x: long, y: long) [1, 2, 3, 4, 5, 6];
_dataset1
| join (_dataset2) on x
| project x, y
Sortie
| x | y |
|---|---|
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
Modèles d’atténuation supplémentaires pour les scénarios réels
Dans de nombreux scénarios pratiques, vous pouvez calculer une valeur scalaire par ligne à l’aide d’une expression qui effectue sa propre agrégation, par exemple :
| extend result = toscalar(T | where Key == key | summarize max(Value))
Ce modèle échoue, car toscalar() il ne peut pas être évalué une fois par ligne.
Utilisez l’un des modèles d’atténuation pris en charge ci-dessous.
- Pré-agréger les données une fois, puis joindre les résultats agrégés à la table principale pour améliorer l’efficacité.
let summary =
T
| summarize maxValue = max(Value) by Key;
Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
- Permet
arg_max()de récupérer la ligne avec la valeur la plus élevée. Cela est utile lorsque vous avez besoin de la valeur maximale et des colonnes associées.
let summary =
T
| summarize arg_max(Timestamp, *) by Key;
Dataset1
| lookup summary on Key
- Utilisez un
lookuppour les mappages clé/valeur pour éviter les violations de contexte de ligne et garantir des recherches efficaces de table de dimension.
let lookupTable =
T | summarize maxValue = max(Value) by Key;
Dataset1
| lookup lookupTable on Key
- Utiliser des fonctions de fenêtre ou
make-seriespour les agrégations de fenêtres temporelles
Dataset1
| make-series maxValue = max(Value)
on Timestamp
from ago(1h) to now()
step 1m
by Key
Exemples
Les exemples de cette section montrent comment utiliser la syntaxe pour vous aider à commencer.
Définir la plage pour l’évaluation
Évaluez Start, Endet Step en tant que constantes scalaires et utilisez le résultat pour range l’évaluation.
let Start = toscalar(print x=1);
let End = toscalar(range x from 1 to 9 step 1 | count);
let Step = toscalar(2);
range z from Start to End step Step | extend start=Start, end=End, step=Step
Sortie
| z | start | end | step |
|---|---|---|---|
| 1 | 1 | 9 | 2 |
| 3 | 1 | 9 | 2 |
| 5 | 1 | 9 | 2 |
| 7 | 1 | 9 | 2 |
| 9 | 1 | 9 | 2 |
Générer un GUID fixe et dynamique
L’exemple suivant montre comment toscalar() pouvez être utilisé pour générer un guidfixe, calculé précisément une fois et des valeurs dynamiques pour guid.
let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2
Sortie
| x | y |
|---|---|
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c2937642-0d30-4b98-a157-a6706e217620 |
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5 |