共用方式為


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

適用於:✅Microsoft網狀架構✅✅✅

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

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

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

注意

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

語法

percentilew( expr,weightExpr,percentile)

percentilesw( expr,weightExpr,percentiles)

深入瞭解 語法慣例

參數

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

傳回

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

注意

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

範例

計算加權百分位數

假設您重複測量時間(持續時間),它會採取動作來完成。 您不會記錄測量的每個值,而是記錄 Duration 的每個值、四捨五入為 100 毫秒,以及捨入的值出現次數 (BucketSize)。

使用 summarize percentilesw(Duration, BucketSize, ...) 以「加權」方式計算指定的百分位數。 將 Duration 的每個值視為在輸入中重複的 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 毫秒貯體中的 8 個事件(對應至子集 { 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() 式傳回動態數位類型之單一數據行中的百分位數,而不是傳回個別數據行中的值。

語法

percentilesw_array( expr,weightExpr,percentiles)

參數

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

傳回

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

範例

逗號分隔百分位數

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]