Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 dos instrucciones están separadas por punto y coma.
Sintaxis
toscalar(
expresión)
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 toma 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 devuelve 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 |
Patrones de mitigación adicionales para escenarios reales
En muchos escenarios prácticos, puede que desee calcular un valor escalar por fila mediante una expresión que realice su propia agregación, como:
| extend result = toscalar(T | where Key == key | summarize max(Value))
Este patrón produce un error porque toscalar() no se puede evaluar una vez por fila.
Use uno de los patrones de mitigación admitidos a continuación.
- Agregue previamente los datos una vez y, a continuación, vuelva a unir los resultados agregados a la tabla principal para mejorar la eficacia.
let summary =
T
| summarize maxValue = max(Value) by Key;
Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
- Use
arg_max()para recuperar la fila con el valor más alto. Esto resulta útil cuando se necesita el valor máximo y las columnas asociadas.
let summary =
T
| summarize arg_max(Timestamp, *) by Key;
Dataset1
| lookup summary on Key
- Use para
lookuplas asignaciones de clave y valor para evitar infracciones de contexto de fila y garantizar búsquedas eficaces de tablas de dimensiones.
let lookupTable =
T | summarize maxValue = max(Value) by Key;
Dataset1
| lookup lookupTable on Key
- Uso de funciones de ventana o
make-seriespara agregaciones de período de tiempo
Dataset1
| make-series maxValue = max(Value)
on Timestamp
from ago(1h) to now()
step 1m
by Key
Ejemplos
Los ejemplos de esta sección muestran cómo usar la sintaxis para ayudarle a empezar.
Establecer el intervalo para la evaluación
Evalúe Start, Endy 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 |
Generación de GUID fijo y dinámico
En el ejemplo siguiente se muestra cómo se puede usar toscalar() para generar un guidfijo, calculado de forma precisa una vez y valores dinámicos para guid.
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 |