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 | ...