toscalar()
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Devuelve un valor de constante escalar de la expresión evaluada.
Esta función es útil para las consultas que requieren cálculos preconfigurados. Por ejemplo, calcule un recuento total de eventos y, a continuación, use el resultado para filtrar grupos que superen un cierto porcentaje de todos los eventos.
Las instrucciones deben estar separadas por un punto y coma.
Sintaxis
toscalar(
expression)
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
expression | string |
✔️ | Valor que se va a convertir en un valor escalar. |
Devoluciones
Valor constante escalar de la expresión evaluada. Si el resultado es un tabular, se tomará la primera columna y la primera fila para la conversión.
Sugerencia
Puede usar una instrucción let para mejorar la legibilidad de la consulta al usar toscalar()
.
Limitaciones
toscalar()
no se puede aplicar en un escenario que aplique la función en cada fila. Esto se debe a que la función solo se puede calcular un número constante de veces durante la ejecución de la consulta.
Normalmente, cuando se alcanza esta limitación, se devolverá el siguiente error: can't use '<column name>' as it is defined outside its row-context scope.
En el ejemplo siguiente, se produce un error en la consulta:
'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)
Este error se puede mitigar mediante el join
operador , como en el ejemplo siguiente:
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
Salida
x | y |
---|---|
1 | 2 |
3 | 4 |
5 | 6 |
Ejemplos
Evalúe Start
, End
y Step
como constantes escalares y use el resultado para la range
evaluación.
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
Salida
z | start | end | step |
---|---|---|---|
1 | 1 | 9 | 2 |
3 | 1 | 9 | 2 |
5 | 1 | 9 | 2 |
7 | 1 | 9 | 2 |
9 | 1 | 9 | 2 |
En el ejemplo siguiente se muestra cómo toscalar
se puede usar para "corregir" una expresión para que se calcule con precisión una vez. En este caso, la expresión que se calcula devuelve un valor diferente por evaluación.
let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2
Salida
x | y |
---|---|
e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c2937642-0d30-4b98-a157-a6706e217620 |
e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5 |