使用摘要運算子
Count 運算子及其變化會建立新的資料行,其中包含指定欄位的計算結果。
以下第一個陳述式會傳回一個資料行,這是活動資料行值的唯一清單。
第二個陳述式會傳回 SecurityEvent 的資料列計數,其中EventID 等於 4688,且計數會依程序和電腦分組。 由於 by 子句的緣故,結果集包含三個資料行:程序、電腦、計數。
分別執行每個查詢以查看結果。
SecurityEvent | summarize by Activity
SecurityEvent
| where EventID == "4688"
| summarize count() by Process, Computer
下方的範例列出了部分最常與摘要運算子搭配使用的簡單彙總函式。
函式 | 描述 |
---|---|
count(), countif() | 傳回每個摘要群組的記錄計數 |
dcount(), dcountif() | 傳回摘要群組中,純量運算式所使用的相異值數目預估。 |
avg(), avgif() | 計算整個群組的 Expr 平均值。 |
max(), maxif() | 傳回整個群組的最大值。 |
min(), minif() | 傳回整個群組的最小值。 |
percentile() | 針對 Expr 所定義的母體,傳回指定的最近等級百分位數估計值。 精確度取決於百分位數區域中的母體密度。 |
stdev(), stdevif() | 將群組視為樣本,在群組中計算 Expr 的標準差。 |
sum(), sumif() | 計算整個群組的 Expr 總和。 |
variance(), varianceif() | 將群組視為樣本,在群組中計算 Expr 的標準差。 |
count 函式範例
彙總函式資料行可以透過在彙總函式之前加上「fieldname=」來命名顯示。
KQL 陳述式會傳回三個資料行:"cnt"、"AccountType" 和 "Computer"。 "cnt" 欄位名稱會取代預設的 "count_" 名稱。
SecurityEvent
| where TimeGenerated > ago(1h)
| where EventID == 4624
| summarize cnt=count() by AccountType, Computer
<dcount> 函式範例
下列範例會傳回唯一 IP 位址的計數。
SecurityEvent
| summarize dcount(IpAddress)
讓我們看一下實際範例
下列陳述式是一項規則,用以偵測同一帳戶中多個應用程式間的「無效的密碼」失敗。
ResultDescription 的 where 運算子會從結果集中篩選出包含「無效的密碼」的結果。 接下來,「摘要」陳述式會依據使用者和 IP 位址分組,產生應用程式名稱和群組的相異計數。 最後,系統會根據建立的變數 (閾值) 進行檢查,查看此數目是否超過允許的數量。
let timeframe = 30d;
let threshold = 1;
SigninLogs
| where TimeGenerated >= ago(timeframe)
| where ResultDescription has "Invalid password"
| summarize applicationCount = dcount(AppDisplayName) by UserPrincipalName, IPAddress
| where applicationCount >= threshold