Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Retorna um valor constante escalar da expressão avaliada.
Essa função é útil para consultas que exigem cálculos em etapas. Por exemplo, calcule uma contagem total de eventos e use o resultado para filtrar grupos que excedam uma determinada porcentagem de todos os eventos.
As duas instruções são separadas por um ponto-e-vírgula.
Sintaxe
toscalar(
expressão)
Saiba mais sobre as convenções de sintaxe.
Parâmetros
| Nome | Tipo | Obrigatória | Descrição |
|---|---|---|---|
| expressão | string |
✔️ | O valor a ser convertido em um valor escalar. |
Devoluções
Um valor de constante escalar da expressão avaliada. Se o resultado for uma tabela, a primeira coluna e a primeira linha serão usadas para conversão.
Dica
Você pode usar uma instrução let para facilitar a leitura da consulta ao usar toscalar()o .
Limitações
toscalar() não pode ser aplicado em um cenário que aplica a função em cada linha. Isso ocorre porque a função só pode ser calculada um número constante de vezes durante a execução da consulta.
Normalmente, quando essa limitação é atingida, o seguinte erro é retornado: can't use '<column name>' as it is defined outside its row-context scope.
No exemplo a seguir, a consulta falha com o erro:
'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)
Essa falha pode ser atenuada usando o join operador, como no exemplo a seguir:
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
Saída
| x | a |
|---|---|
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
Padrões de mitigação adicionais para cenários do mundo real
Em muitos cenários práticos, talvez você queira calcular um valor escalar por linha usando uma expressão que executa sua própria agregação, como:
| extend result = toscalar(T | where Key == key | summarize max(Value))
Esse padrão falha porque toscalar() não pode ser avaliado uma vez por linha.
Use um dos padrões de mitigação com suporte abaixo.
- Pré-agregar os dados uma vez e, em seguida, unir os resultados agregados de volta à tabela principal para melhorar a eficiência.
let summary =
T
| summarize maxValue = max(Value) by Key;
Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
- Use
arg_max()para recuperar a linha com o valor mais alto. Isso é útil quando você precisa do valor máximo e das colunas associadas.
let summary =
T
| summarize arg_max(Timestamp, *) by Key;
Dataset1
| lookup summary on Key
- Use um
lookuppara mapeamentos de chave/valor para evitar violações de contexto de linha e garantir pesquisas eficientes de tabela de dimensão.
let lookupTable =
T | summarize maxValue = max(Value) by Key;
Dataset1
| lookup lookupTable on Key
- Usar funções de janela ou
make-seriespara agregações de janela de tempo
Dataset1
| make-series maxValue = max(Value)
on Timestamp
from ago(1h) to now()
step 1m
by Key
Exemplos
Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.
Definir intervalo para avaliação
Avalie Start, Ende Step como constantes escalares e use o resultado para range avaliação.
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
Saída
| z | iniciar | end | etapa |
|---|---|---|---|
| 1 | 1 | 9 | 2 |
| 3 | 1 | 9 | 2 |
| 5 | 1 | 9 | 2 |
| 7 | 1 | 9 | 2 |
| 9 | 1 | 9 | 2 |
Gerar GUID fixo e dinâmico
O exemplo a seguir mostra como toscalar() pode ser usado para gerar um guidfixo, calculado precisamente uma vez e 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
Saída
| x | a |
|---|---|
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | C2937642-0D30-4B98-A157-A6706E217620 |
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5 |