Delen via


toscalar()

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel-

Retourneert een scalaire constante waarde van de geëvalueerde expressie.

Deze functie is handig voor query's waarvoor gefaseerde berekeningen zijn vereist. Bereken bijvoorbeeld een totaal aantal gebeurtenissen en gebruik vervolgens het resultaat om groepen te filteren die een bepaald percentage van alle gebeurtenissen overschrijden.

Twee instructies worden gescheiden door een puntkomma.

Syntaxis

toscalar( expressie)

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
expressie string ✔️ De waarde die moet worden geconverteerd naar een scalaire waarde.

Retourneert

Een scalaire constante waarde van de geëvalueerde expressie. Als het resultaat een tabellair is, wordt de eerste kolom en eerste rij genomen voor conversie.

Fooi

U kunt een instructie gebruiken voor de leesbaarheid van de query wanneer u toscalar()gebruikt.

Beperkingen

toscalar() kan niet worden toegepast op een scenario dat de functie op elke rij toepast. Dit komt doordat de functie slechts een constant aantal keren kan worden berekend tijdens de uitvoering van de query. Wanneer deze beperking wordt bereikt, wordt meestal de volgende fout geretourneerd: can't use '<column name>' as it is defined outside its row-context scope.

In het volgende voorbeeld mislukt de query met de fout:

'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)

Deze fout kan worden verzacht met behulp van de operator join, zoals in het volgende voorbeeld:

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

uitvoer

x y
1 2
3 4
5 6

Aanvullende risicobeperkingspatronen voor praktijkscenario's

In veel praktische scenario's kunt u een scalaire waarde per rij berekenen met behulp van een expressie die een eigen aggregatie uitvoert, zoals:

| extend result = toscalar(T | where Key == key | summarize max(Value))

Dit patroon mislukt omdat toscalar() het niet één keer per rij kan worden geëvalueerd. Gebruik hieronder een van de ondersteunde beperkingspatronen.

  1. Voeg de gegevens eenmaal vooraf samen en voeg vervolgens de samengevoegde resultaten weer toe aan de hoofdtabel voor verbeterde efficiëntie.
let summary =
    T
    | summarize maxValue = max(Value) by Key;

Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
  1. Gebruik arg_max() deze functie om de rij met de hoogste waarde op te halen. Dit is handig wanneer u zowel de maximumwaarde als de bijbehorende kolommen nodig hebt.
let summary =
    T
    | summarize arg_max(Timestamp, *) by Key;

Dataset1
| lookup summary on Key
  1. Gebruik een lookup for key/value mappings om schendingen van rijcontext te voorkomen en efficiënte opzoekacties in dimensietabellen te garanderen.
let lookupTable =
    T | summarize maxValue = max(Value) by Key;

Dataset1
| lookup lookupTable on Key
  1. Vensterfuncties of make-series voor tijdvensteraggregaties gebruiken
Dataset1
| make-series maxValue = max(Value)
      on Timestamp
      from ago(1h) to now()
      step 1m
      by Key

Voorbeelden

In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.

Bereik instellen voor evaluatie

Evalueer Start, Enden Step als scalaire constanten en gebruik het resultaat voor range evaluatie.

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

uitvoer

z beginnen einde stap
1 1 9 2
3 1 9 2
5 1 9 2
7 1 9 2
9 1 9 2

Vaste en dynamische GUID genereren

In het volgende voorbeeld ziet u hoe toscalar() kan worden gebruikt om een vaste guidte genereren, precies eenmaal berekend en dynamische waarden voor guid.

let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2

uitvoer

x y
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c2937642-0d30-4b98-a157-a6706e217620
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5