Sdílet prostřednictvím


toscalar()

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

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 pak pomocí výsledku filtrovat skupiny, které překračují určité procento všech událostí.

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

Syntaxe

toscalar(výraz)

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

Parametry

Název Type Požadováno Popis
výraz 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ý, první sloupec a první řádek se převedou k převodu.

Tip

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

Omezení

toscalar() nelze použít ve scénáři, který funkci použije na každém řádku. Důvodem je to, že funkci lze vypočítat pouze konstantní početkrát během provádění dotazu. Při dosažení tohoto omezení se obvykle 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 , jak je znázorněno 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

linka 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 step
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 lze použít k "opravě" výrazu tak, aby byl vypočítán přesně jednou. V tomto případě vypočítaný výraz vrátí jinou hodnotu pro každé vyhodnocení.

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

Výstup

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