toscalar()

Devolve um valor constante escalar da expressão avaliada.

Esta função é útil para consultas que requerem cálculos faseados. Por exemplo, calcule uma contagem total de eventos e, em seguida, utilize o resultado para filtrar grupos que excedam uma determinada percentagem de todos os eventos.

As duas instruções têm de ser separadas por ponto e vírgula.

Syntax

toscalar(expressão)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
expression string ✔️ O valor a converter num valor escalar.

Devoluções

Um valor constante escalar da expressão avaliada. Se o resultado for uma tabela, a primeira coluna e a primeira linha serão tomadas para conversão.

Dica

Pode utilizar uma instrução let para legibilidade da consulta ao utilizar toscalar().

Limitações

toscalar() não pode ser aplicado num cenário que aplique a função em cada linha. Isto acontece porque a função só pode ser calculada um número constante de vezes durante a execução da consulta. Normalmente, quando esta limitação é atingida, será devolvido o seguinte erro: can't use '<column name>' as it is defined outside its row-context scope.

No exemplo seguinte, 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)

Esta falha pode ser mitigada com o join operador , como no exemplo seguinte:

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 y
1 2
3 4
5 6

Exemplos

Avalie Start, Ende Step como constantes escalares e utilize 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 fim passo
1 1 9 2
3 1 9 2
5 1 9 2
7 1 9 2
9 1 9 2

O exemplo seguinte mostra como toscalar pode ser utilizado para "corrigir" uma expressão para que seja calculada precisamente uma vez. Neste caso, a expressão que está a ser calculada devolve um valor diferente por avaliação.

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 y
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c2937642-0d30-4b98-a157-a6706e217620
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5