Share via


toscalar()

Devuelve un valor 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 determinado 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 Tipo Requerido 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, Endy Step como constantes escalares y use el resultado para range la 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 paso
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 exactamente 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