Let deyimi

İfadeye let veya işleve eşit bir değişken adı ayarlamak veya görünümler oluşturmak için deyimini kullanın.

let deyimleri şunlar için yararlıdır:

  • Karmaşık bir ifadeyi, her biri bir değişkenle temsil edilen birden çok bölüme ayırma.
  • Okunabilirlik için sorgu gövdesinin dışındaki sabitleri tanımlama.
  • Bir değişkeni bir kez tanımlama ve sorgu içinde birden çok kez kullanma.

Değişken daha önce iç içe deyimler gibi başka bir değeri temsil ettiyse, en let içteki deyim uygulanır.

Syntax

Skaler veya tablosal ifadeler için söz dizimi

letAdı=ScalarExpression

letAdı=TabularExpression

Alan Tanım Örnek
Ad Değişken adı geçerli olmalıdır. Adından kaçabilirsiniz, örneğin ["Name with spaces"]
ScalarExpression Skaler sonucu olan bir ifade. let one=1;
TabularExpression Tablosal sonucu olan bir ifade. let RecentLog = Logs \| where Timestamp > ago(1h)

Görünüm veya işlevin söz dizimi

letAdı= [view] ( [TabularArgName:(*), [ArgNameArgType: ], ... ] ){FunctionBody}

letAdı= [view] ( [ [TabularArgName:([AttributeNameAttributeType:] [, ... ] ) ] , [ [ArgNameArgType: , ...] ] ){FunctionBody '}

Alan Tanım
FunctionBody Kullanıcı tanımlı işlev veren bir ifade, anonim işlev bildirimi.
görünüm Yalnızca bağımsız değişken içermeyen parametresiz let bir deyimde görünür. Kullanıldığında deyimi, let tabloların/görünümlerin joker karakter seçimine sahip bir union işleç içeren sorgulara eklenir.
TabularArgName Tablosal bağımsız değişkenin adı. FunctionBody içinde görünebilir ve kullanıcı tanımlı işlev çağrıldığında belirli bir değere bağlıdır.
AttributeName : AttributeType Özniteliğin adı ve türü. Türleriyle bir dizi öznitelik içeren tablo şeması tanımının bir bölümü.
ArgName Skaler bağımsız değişkenin adı. FunctionBody içinde görünebilir ve kullanıcı tanımlı işlev çağrıldığında belirli bir değere bağlıdır.
ArgType Skaler bağımsız değişkenin türü. Şu anda kullanıcı tanımlı işlevler için aşağıdakiler desteklenir: bool, string, long, datetime, timespan, , realve (ve dynamic bu türlerin diğer adları).

Not

  • Tablosal ifade için kullanabilirsiniz (*) .
  • Kullanıcı tanımlı bir işlevin parçası olarak tablosal ifade kullanıldığında, sütunlara işlevin bir parçası olarak erişilemiyor.
  • Tablosal bağımsız değişkenler skaler bağımsız değişkenlerden önce görünür.
  • İki ifade noktalı virgülle ayrılmalıdır.

Örnekler

Skaler değerleri tanımlama

Aşağıdaki örnekte skaler ifade deyimi kullanılır.


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

Aşağıdaki örnek, gösterimi kullanarak ['name'] adı some number bağlar ve ardından tablosal ifade deyiminde kullanır.

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

Skaler hesaplama ile kullanıcı tanımlı işlev oluşturma

Bu örnekte, skaler hesaplama için bağımsız değişkenlerle let deyimi kullanılır. Sorgu, iki sayıyı çarpma işlevini MultiplyByN tanımlar.

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

Çıkış

x sonuç
1 5
2 10
3 15
4 20
5 25

Girişi kırpan kullanıcı tanımlı işlev oluşturma

Aşağıdaki örnek, girişten baştaki ve sondakileri kaldırır.

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

Çıkış

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

Birden çok let deyimi kullanma

Bu örnek, bir deyimin () başkafoo1 bir deyimi (foo2) kullandığı iki let deyimini tanımlar.

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

Çıkış

sonuç
50

Görünüm veya sanal tablo oluşturma

Bu örnekte, bir veya sanal tablosu oluşturmakview için let deyiminin nasıl kullanılacağı gösterilmektedir.

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

Çıkış

$table MyColumn
Aralık10 5
Aralık20 5

Materialize işlevi kullanma

işlevi, materialize() sorgu yürütme sırasında alt sorgu sonuçlarını önbelleğe almanızı sağlar. işlevini kullandığınızda materialize() veriler önbelleğe alınır ve sonucun sonraki çağrılarında önbelleğe alınmış veriler kullanılır.

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

Çıkış

Gün1 Gün2 Yüzde
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

İç içe let deyimlerini kullanma

İç içe let deyimlerine, kullanıcı tanımlı işlev ifadesi içinde de dahil olmak üzere izin verilir. let deyimleri ve bağımsız değişkenleri işlev gövdesinin hem geçerli hem de iç kapsamında uygulanır.

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