使用摘要運算子

已完成

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