Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✅Microsoft Fabric✅
Gibt einen skalaren konstanten Wert des ausgewerteten Ausdrucks zurück.
Diese Funktion ist nützlich für Abfragen, für die mehrstufige Berechnungen erforderlich sind. Berechnen Sie beispielsweise eine Gesamtanzahl von Ereignissen, und verwenden Sie dann das Ergebnis, um Gruppen zu filtern, die einen bestimmten Prozentsatz aller Ereignisse überschreiten.
Alle zwei Anweisungen werden durch ein Semikolon getrennt.
Syntax
toscalar(
Ausdruck)
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
| Name | Type | Erforderlich | Beschreibung |
|---|---|---|---|
| expression | string |
✔️ | Der Wert, der in einen skalaren Wert konvertiert werden soll. |
Gibt zurück
Ein skalarer Konstantenwert des ausgewerteten Ausdrucks. Wenn das Ergebnis tabellarisch ist, wird die erste Spalte und erste Zeile für die Konvertierung verwendet.
Tipp
Sie können eine Let-Anweisung verwenden, um die Lesbarkeit der Abfrage bei Verwendung toscalar()zu ermöglichen.
Begrenzungen
toscalar() kann nicht auf ein Szenario angewendet werden, das die Funktion auf jede Zeile anwendet. Dies liegt daran, dass die Funktion nur eine konstante Anzahl von Malen während der Abfrageausführung berechnet werden kann.
Wenn diese Einschränkung erreicht wird, wird normalerweise der folgende Fehler zurückgegeben: can't use '<column name>' as it is defined outside its row-context scope.
Im folgenden Beispiel schlägt die Abfrage mit dem Fehler fehl:
'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)
Dieser Fehler kann mithilfe des join Operators abgemildert werden, wie im folgenden Beispiel gezeigt:
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
Ausgabe
| x | Y |
|---|---|
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
Zusätzliche Entschärfungsmuster für reale Szenarien
In vielen praktischen Szenarien empfiehlt es sich, einen skalaren Wert pro Zeile mithilfe eines Ausdrucks zu berechnen, der eine eigene Aggregation durchführt, z. B.:
| extend result = toscalar(T | where Key == key | summarize max(Value))
Dieses Muster schlägt fehl, da toscalar() pro Zeile nicht einmal ausgewertet werden kann.
Verwenden Sie unten eines der unterstützten Entschärfungsmuster.
- Vorabaggregatieren Sie die Daten einmal, und verknüpfen Sie dann die aggregierten Ergebnisse zurück zur Haupttabelle, um die Effizienz zu verbessern.
let summary =
T
| summarize maxValue = max(Value) by Key;
Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
- Dient
arg_max()zum Abrufen der Zeile mit dem höchsten Wert. Dies ist nützlich, wenn Sie sowohl den Maximalwert als auch die zugehörigen Spalten benötigen.
let summary =
T
| summarize arg_max(Timestamp, *) by Key;
Dataset1
| lookup summary on Key
- Verwenden Sie eine
lookupFür Schlüssel-/Wertzuordnungen, um Zeilenkontextverletzungen zu vermeiden und effiziente Bemaßungstabellen-Nachschlagevorgänge sicherzustellen.
let lookupTable =
T | summarize maxValue = max(Value) by Key;
Dataset1
| lookup lookupTable on Key
- Verwenden von Fensterfunktionen oder
make-seriesfür Zeitfensteraggregationen
Dataset1
| make-series maxValue = max(Value)
on Timestamp
from ago(1h) to now()
step 1m
by Key
Beispiele
Die Beispiele in diesem Abschnitt zeigen, wie Sie die Syntax verwenden, um Ihnen den Einstieg zu erleichtern.
Festlegen des Bereichs für die Auswertung
Wertet Start, , und End als skalare Konstanten aus, und verwenden Sie das Ergebnis für Step die rangeAuswertung.
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
Ausgabe
| z | start | end | step |
|---|---|---|---|
| 1 | 1 | 9 | 2 |
| 3 | 1 | 9 | 2 |
| 5 | 1 | 9 | 2 |
| 7 | 1 | 9 | 2 |
| 9 | 1 | 9 | 2 |
Generieren von festen und dynamischen GUID
Das folgende Beispiel zeigt, wie toscalar() verwendet werden kann, um ein festes guidzu generieren, präzise berechnet und dynamische Werte für guid.
let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2
Ausgabe
| x | Y |
|---|---|
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c2937642-0d30-4b98-a157-a6706e217620 |
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5 |