percentilew () , percentilesw () (聚合函數)

percentilew()式會計算expr所定義母體之指定最接近排名百分位數的加權估計值。 percentilesw() 的運作方式 percentilew()類似於 。 不過, percentilesw() 可以一次計算多個加權百分位數值,這比個別計算每個加權百分位數值更有效率。

加權百分位數會藉由提供輸入數據集中的每個值來計算數據集中的百分位數。 在此方法中,每個值都會被視為重複的次數等於其權數,然後用來計算百分位數。 藉由為特定值提供更多重要性,加權百分位數提供一種方式,以「加權」方式計算百分位數。

若要計算未加權百分位數,請參閱 百分位數 ()

注意

此函式會與 summarize 運算子搭配使用。

Syntax

percentilew(expr,weightExpr,百分比)

percentilesw(expr,weightExpr,百分位數)

深入瞭解 語法慣例

參數

名稱 類型 必要 Description
expr string ✔️ 要用於匯總計算的表達式。
weightExpr long ✔️ 要提供每個值的權數。
百分比 int 或long ✔️ 指定百分位數的常數。
百分位數 int 或long ✔️ 一或多個逗號分隔百分位數。

傳回

傳回數據表,其中包含群組中指定百分位數的 expr 估計值,每個百分位數都是在個別的數據行中。

注意

若要傳回單一數據行中的百分位數,請參閱以 數位列傳回百分位數

範例

計算加權百分位數

假設您重複測量採取從行動到完成的時間 (持續時間)。 您可以記錄每個持續時間值 (四捨五入至 100 毫秒) 以及捨入值出現的次數 (BucketSize),而不是記錄測量的每個值。

使用 summarize percentilesw(Duration, BucketSize, ...) 以「加權」方式計算指定的百分位數。 將持續時間的每個值視為在輸入中重複 BucketSize 次,而不需要將這些記錄具體化。

下列範例顯示加權百分位數。 以毫秒為單位使用下列一組延遲值: { 1, 1, 2, 2, 2, 5, 7, 7, 12, 12, 15, 15, 15, 18, 21, 22, 26, 35 }

若要減少頻寬和儲存空間,請預先彙總下列值區:{ 10, 20, 30, 40, 50, 100 }。 計算每個值區中的事件數目,以產生下表:

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable

表格會顯示:

  • 10 毫秒值區中的八個事件 (對應至子集 { 1, 1, 2, 2, 2, 5, 7, 7 })
  • 20 毫秒值區中的六個事件 (對應至子集 { 12, 12, 15, 15, 15, 18 })
  • 30 毫秒值區中的三個事件 (對應至子集 { 21, 22, 26 })
  • 40 毫秒值區中的一個事件 (對應至子集 { 35 })

此時將無法再使用原始資料, 只有每個值區中的事件數目。 若要計算此資料的百分位數,請使用 percentilesw() 函式。 針對 50、75 和 99.9 百分位數,請使用下列查詢:

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw(LatencyBucket, ReqCount, 50, 75, 99.9)

輸出

percentile_LatencyBucket_50 percentile_LatencyBucket_75 percentile_LatencyBucket_99_9
20 20 40

以陣列傳回百分位數

使用 函式傳回動態數位類型之單一數據行中的百分位數, percentilesw_array() 而不是傳回個別數據行中的值。

Syntax

percentilesw_array(expr,weightExpr,百分位數)

參數

名稱 類型 必要 Description
expr string ✔️ 要用於匯總計算的表達式。
百分位數 int、long 或 dynamic ✔️ 一或多個逗號分隔百分位數或動態百分位數數位。 每個百分位數可以是整數或長值。
weightExpr long ✔️ 要提供每個值的權數。

傳回

傳回群組中指定百分位數的 expr 估計值,做為動態數位型態的單一資料行。

範例

逗號分隔百分位數

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw_array(LatencyBucket, ReqCount, 50, 75, 99.9)

輸出

percentile_LatencyBucket
[20, 20, 40]

百分位數的動態陣列

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw_array(LatencyBucket, ReqCount, dynamic([50, 75, 99.9]))

輸出

percentile_LatencyBucket
[20, 20, 40]