Pernyataan let

Gunakan pernyataan let untuk mengatur nama variabel yang sama dengan ekspresi atau fungsi, atau untuk membuat views.

Pernyataan let berguna untuk:

  • Memecah ekspresi kompleks menjadi beberapa bagian, masing-masing diwakili oleh variabel.
  • Menentukan konstanta di luar isi kueri agar mudah dibaca.
  • Menentukan variabel satu kali dan menggunakannya beberapa kali dalam kueri.

Jika variabel sebelumnya mewakili nilai lain, misalnya dalam pernyataan bertumpuk, pernyataan let terdalam akan berlaku.

Sintaks

Sintaks untuk ekspresi skalar atau tabular

letName=ScalarExpression

letName=TabularExpression

Bidang Definisi Contoh
Nama Nama variabel, harus valid. Anda dapat meng-escape nama, misalnya ["Name with spaces"]
ScalarExpression Ekspresi dengan hasil skalar. let one=1;
TabularExpression Ekspresi dengan hasil tabular. let RecentLog = Logs \| where Timestamp > ago(1h)

Sintaks tampilan atau fungsi

letName= [view] ( [TabularArgName:(*), [ArgName:ArgType ], ... ] ){FunctionBody}

letName= [view] ( [ [TabularArgName:([AttributeName:AttributeType] [, ... ] ) ] , [ [ArgName:ArgType , ...] ] ){FunctionBody `}

Bidang Definisi
FunctionBody Ekspresi yang menghasilkan fungsi yang ditentukan pengguna.
view Hanya muncul dalam pernyataan let tanpa parameter dan tanpa argumen. Saat digunakan, pernyataan let disertakan dalam kueri dengan operator union yang memiliki pilihan kartubebas tabel/tampilan.
TabularArgName Nama argumen tabular. Dapat muncul di FunctionBody dan terikat pada nilai tertentu ketika fungsi yang ditentukan pengguna dipanggil.
AttributeName : AttributeType Nama dan jenis atribut. Bagian dari definisi skema tabel, yang mencakup satu set atribut dengan jenisnya.
ArgName Nama argumen skalar. Dapat muncul di FunctionBody dan terikat pada nilai tertentu ketika fungsi yang ditentukan pengguna dipanggil.
ArgType Jenis argumen skalar. Saat ini, jenis berikut didukung untuk fungsi yang ditentukan pengguna: bool, string, long, datetime, timespan, real, dan dynamic (serta alias untuk jenis ini).

Catatan

  • Anda dapat menggunakan (*) untuk ekspresi tabular.
  • Saat menggunakan ekspresi tabular sebagai bagian dari fungsi yang ditentukan pengguna, kolom tidak dapat diakses sebagai bagian dari fungsi.
  • Argumen tabular muncul sebelum argumen skalar.
  • Setiap dua pernyataan harus dipisahkan oleh titik koma.

Contoh

Menentukan nilai skalar

Contoh berikut menggunakan pernyataan ekspresi skalar.


let n = 10;  // number
let place = "Dallas";  // string
let cutoff = ago(62d); // datetime 
Events 
| where timestamp > cutoff 
    and city == place 
| take n

Contoh berikut mengikat nama some number menggunakan notasi ['name'], lalu menggunakannya dalam pernyataan ekspresi tabular.

let ['some number'] = 20;
range y from 0 to ['some number'] step 5

Membuat fungsi yang ditentukan pengguna dengan penghitungan skalar

Contoh ini menggunakan pernyataan let dengan argumen untuk penghitungan skalar. Kueri menentukan fungsi MultiplyByN untuk mengalikan dua bilangan.

let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1 
| extend result = MultiplyByN(x, 5)

Output

x hasil
1 5
2 10
3 15
4 20
5 25

Membuat fungsi yang ditentukan pengguna yang memangkas input

Contoh berikut menghapus karakter depan dan belakang tambahan dari input.

let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1 
| extend result = TrimOnes(tostring(x))

Output

x hasil
10 0
11
12 2
13 3
14 4
15 5

Menggunakan beberapa pernyataan let

Contoh ini menentukan dua pernyataan let di mana satu pernyataan (foo2) menggunakan (foo1) yang lain.

let foo1 = (_start:long, _end:long, _step:long) { range x from _start to _end step _step};
let foo2 = (_step:long) { foo1(1, 100, _step)};
foo2(2) | count

Output

hasil
50

Membuat tabel virtual atau tampilan

Contoh ini menunjukkan cara menggunakan pernyataan let untuk membuat view atau tabel virtual.

let Range10 = view () { range MyColumn from 1 to 10 step 1 };
let Range20 = view () { range MyColumn from 1 to 20 step 1 };
search MyColumn == 5

Output

$table MyColumn
Range10 5
Range20 5

Gunakan fungsi materialize

Fungsi materialize() memungkinkan Anda meng-cache hasil kueri bertumpuk selama waktu eksekusi kueri. Saat Anda menggunakan fungsi materialize(), data akan di-cache dan setiap pemanggilan hasil berikutnya akan menggunakan data yang di-cache.

let totalPagesPerDay = PageViews
| summarize by Page, Day = startofday(Timestamp)
| summarize count() by Day;
let materializedScope = PageViews
| summarize by Page, Day = startofday(Timestamp);
let cachedResult = materialize(materializedScope);
cachedResult
| project Page, Day1 = Day
| join kind = inner
(
    cachedResult
    | project Page, Day2 = Day
)
on Page
| where Day2 > Day1
| summarize count() by Day1, Day2
| join kind = inner
    totalPagesPerDay
on $left.Day1 == $right.Day
| project Day1, Day2, Percentage = count_*100.0/count_1

Output

Day1 Day2 Persentase
2016-05-01 00:00:00.0000000 2016-05-02 00:00:00.0000000 34.0645725975255
2016-05-01 00:00:00.0000000 2016-05-03 00:00:00.0000000 16.618368960101
2016-05-02 00:00:00.0000000 2016-05-03 00:00:00.0000000 14.6291376489636

Menggunakan pernyataan let bertumpuk

Pernyataan let bertumpuk diizinkan, termasuk dalam ekspresi fungsi yang ditentukan pengguna. Pernyataan dan argumen let berlaku di cakupan saat ini dan internal dari isi fungsi.

let start_time = ago(5h); 
let end_time = start_time + 2h; 
T | where Time > start_time and Time < end_time | ...