toscalar()

Vrátí skalární konstantní hodnotu vyhodnoceného výrazu.

Tato funkce je užitečná pro dotazy, které vyžadují fázované výpočty. Můžete například vypočítat celkový počet událostí a výsledek použít k filtrování skupin, které překračují určité procento všech událostí.

Všechny dva příkazy musí být odděleny středníkem.

Syntax

toscalar(Výraz)

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
expression string ✔️ Hodnota, která se má převést na skalární hodnotu.

Návraty

Skalární konstantní hodnota vyhodnoceného výrazu. Pokud je výsledek tabulkový, přepočítá se první sloupec a první řádek.

Tip

Při použití toscalar()příkazu můžete použít příkaz let pro čitelnost dotazu.

Omezení

toscalar() nelze použít ve scénáři, který funkci použije na každém řádku. Je to proto, že funkci je možné vypočítat pouze konstantní počet během provádění dotazu. Obvykle se při dosažení tohoto omezení vrátí následující chyba: can't use '<column name>' as it is defined outside its row-context scope.

V následujícím příkladu dotaz selže s chybou:

'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)

Toto selhání lze zmírnit pomocí operátoru join , jako v následujícím příkladu:

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

Výstup

x y
1 2
3 4
5 6

Příklady

Vyhodnoťte Start, Enda Step jako skalární konstanty a použijte výsledek pro range vyhodnocení.

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

Výstup

z start end Krok
1 1 9 2
3 1 9 2
5 1 9 2
7 1 9 2
9 1 9 2

Následující příklad ukazuje, jak toscalar je možné použít k "opravě" výrazu tak, aby byl vypočítán přesně jednou. V tomto případě výraz, který se počítá, vrátí pro vyhodnocení jinou hodnotu.

let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2

Výstup

x y
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c2937642-0d30-4b98-a157-a6706e217620
e6a15e72-756d-4c93-93d3-fe85c18d19a3 c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5