Pernyataan let

Pernyataan let digunakan untuk mengatur nama variabel yang sama dengan ekspresi atau fungsi, atau untuk membuat tampilan.

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.

Untuk mengoptimalkan beberapa penggunaan pernyataan let dalam satu kueri, lihat Mengoptimalkan kueri yang menggunakan ekspresi bernama.

Catatan

Pernyataan mengikat let nama ke perhitungan, bukan ke nilai perhitungan yang dievaluasi. Perilaku ini berarti bahwa beberapa referensi ke nama yang sama dapat mengembalikan nilai yang berbeda karena perhitungan dievaluasi beberapa kali. Jika ini bukan perilaku yang diinginkan, gunakan toscalar() atau materialize().

Sintaks: Ekspresi skalar atau tabular

letNama=Ekspresi

Penting

Pernyataan let harus diikuti oleh titik koma. Tidak boleh ada baris kosong antara pernyataan let atau antara pernyataan let dan pernyataan kueri lainnya.

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan Deskripsi
Nama string ✔️ Nama variabel. Anda dapat menghindari nama dengan tanda kurung. Contohnya,["Name with spaces"].
Ekspresi string ✔️ Ekspresi dengan hasil skalar atau tabular. Misalnya, ekspresi dengan hasil skalar adalah let one=1;, dan ekspresi dengan hasil tabular adalah let RecentLog = Logs | where Timestamp > ago(1h).

Sintaks: Tampilan atau fungsi

letNama= [view] ([ Parameter ]){FunctionBody}

Penting

Pernyataan let harus diikuti oleh titik koma. Tidak boleh ada baris kosong antara pernyataan let atau antara pernyataan let dan pernyataan kueri lainnya.

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan Deskripsi
FunctionBody string ✔️ Ekspresi yang menghasilkan fungsi yang ditentukan pengguna.
view string Hanya relevan untuk pernyataan tanpa parameter let . Saat digunakan, pernyataan let disertakan dalam kueri dengan operator union yang memiliki pilihan kartubebas tabel/tampilan. Misalnya, lihat Membuat tampilan atau tabel virtual.
Parameter string Nol atau lebih parameter fungsi tabel atau skalar yang dipisahkan koma.

Untuk setiap parameter jenis tabular, parameter harus dalam format TableName:TableSchema, di mana TableSchema adalah daftar kolom yang dipisahkan koma dalam format ColumnName:ColumnType atau wildcard (*). Jika kolom ditentukan, maka argumen tabular input harus berisi kolom ini. Jika kartubebas ditentukan, argumen tabular input dapat memiliki skema apa pun. Untuk mereferensikan kolom dalam isi fungsi, kolom tersebut harus ditentukan. Misalnya, lihat Argumen tabular dengan skema dan argumen Tabular dengan kartubebas.

Untuk setiap parameter jenis skalar, berikan nama parameter dan jenis parameter dalam formatJenisNama:. Nama dapat muncul di FunctionBody dan terikat ke nilai tertentu ketika fungsi yang ditentukan pengguna dipanggil. Satu-satunya jenis yang didukung adalah bool, , longstring, datetime, timespan, real, dynamicdan alias untuk jenis ini.

Catatan

  • Parameter tabular harus muncul sebelum parameter skalar.
  • Dua pernyataan apa pun 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 | ...

Argumen tabular dengan skema

Contoh berikut menentukan bahwa parameter T tabel harus memiliki kolom State jenis string. Tabel T juga dapat menyertakan kolom lain, tetapi tidak dapat direferensikan dalam fungsi StateState karena tidak dideklarasikan.

let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s

Output

Provinsi s_s
ATLANTIC SOUTH ATLANTIK SOUTHATLANTIC SOUTH
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

Argumen tabular dengan kartubebas

Parameter T tabel dapat memiliki skema apa pun, dan fungsi CountRecordsInTable akan berfungsi.

let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()

Output

Hitungan
59,066