percentile()、percentiles() (彙總函式)

percentile()式會計算expr所定義母體之最接近排名百分位數的估計值。 精確度取決於百分位數區域中的母體密度。

percentiles() 的運作方式 percentile()類似於 。 不過, percentiles() 可以一次計算多個百分位數值,這比個別計算每個百分位數值更有效率。

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

注意

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

Syntax

percentile(expr,百分比)

percentiles(expr,百分位數)

深入瞭解 語法慣例

參數

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

傳回

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

注意

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

範例

計算單一百分位數

下列範例顯示樣本集大於95%且樣本集小於5%的值 DamageProperty

StormEvents | summarize percentile(DamageProperty, 95) by State

輸出

顯示的結果數據表只包含前10個數據列。

狀態 percentile_DamageProperty_95
大西洋南部 0
佛羅里達州 40000
喬治亞州 143333
密西西比州 80000
美屬薩摩亞 250000
肯塔基州 35000
俄亥俄 150000
堪薩斯州 51392
密西根 49167
ALABAMA 50000

計算多個百分位數

下列範例顯示使用5、50 (中位數) 和95同時計算的值 DamageProperty

StormEvents | summarize percentiles(DamageProperty, 5, 50, 95) by State

輸出

顯示的結果數據表只包含前10個數據列。

狀態 percentile_DamageProperty_5 percentile_DamageProperty_50 percentile_DamageProperty_95
大西洋南部 0 0 0
佛羅里達州 0 0 40000
喬治亞州 0 0 143333
密西西比州 0 0 80000
美屬薩摩亞 0 0 250000
肯塔基州 0 0 35000
俄亥俄 0 2000 150000
堪薩斯州 0 0 51392
密西根 0 0 49167
ALABAMA 0 0 50000
... ...

以陣列傳回百分位數

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

Syntax

percentiles_array(expr,百分位數)

參數

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

傳回

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

範例

逗號分隔百分位數

您可以在單一動態資料列中以數位的形式取得多個百分位數,而不是在多個資料列中取得,如同百 分位數 ()

TransformedSensorsData
| summarize percentiles_array(Value, 5, 25, 50, 75, 95), avg(Value) by SensorName

輸出

結果數據表只會顯示前10個數據列。

SensorName percentiles_Value avg_Value
sensor-82 ["0.048141473520867069","0.24407515500271132","0.48974511106780577","0.74160998970950343","0.94587903204190071"] 0.493950914
sensor-130 ["0.049200214398937764","0.25735850440187535","0.51206374010048239","0.74182335059053839","0.95210342463616771"] 0.505111463
sensor-56 ["0.04857779335488676","0.24709868149337144","0.49668762923789589","0.74458470404241883","0.94889104840865857"] 0.497955018
sensor-24 ["0.051507199150534679","0.24803904945640423","0.50397070213183581","0.75653888126010793","0.9518782718727431"] 0.501084379
sensor-47 ["0.045991246974755672","0.24644331118208851","0.48089197707088743","0.74475142784472248","0.9518322864959039"] 0.49386228
sensor-135 ["0.05132897529660399","0.24204987641954018","0.48470113942206461","0.74275730068433621","0.94784079559229406"] 0.494817619
sensor-74 ["0.048914714739047828","0.25160926036445724","0.49832498850160978","0.75257887767110776","0.94932261924236094"] 0.501627252
sensor-173 ["0.048333149363009836","0.26084250046756496","0.51288012531934613","0.74964772791583412","0.95156058795294"] 0.505401226
sensor-28 ["0.048511161184567046","0.2547387968731824","0.50101318228599656","0.75693845702682039","0.95243122486483989"] 0.502066244
sensor-34 ["0.049980293859462954","0.25094722564949412","0.50914023067384762","0.75571549713447961","0.95176564809278674"] 0.504309494
... ... ...

百分位數的動態陣列

的百分位數 percentiles_array 可以在整數或浮點數的動態陣列中指定。 陣列必須是常數,但不一定要是常值。

TransformedSensorsData
| summarize percentiles_array(Value, dynamic([5, 25, 50, 75, 95])), avg(Value) by SensorName

輸出

結果數據表只會顯示前10個數據列。

SensorName percentiles_Value avg_Value
sensor-82 ["0.048141473520867069","0.24407515500271132","0.48974511106780577","0.74160998970950343","0.94587903204190071"] 0.493950914
sensor-130 ["0.049200214398937764","0.25735850440187535","0.51206374010048239","0.74182335059053839","0.95210342463616771"] 0.505111463
sensor-56 ["0.04857779335488676","0.24709868149337144","0.49668762923789589","0.74458470404241883","0.94889104840865857"] 0.497955018
sensor-24 ["0.051507199150534679","0.24803904945640423","0.50397070213183581","0.75653888126010793","0.9518782718727431"] 0.501084379
sensor-47 ["0.045991246974755672","0.24644331118208851","0.48089197707088743","0.74475142784472248","0.9518322864959039"] 0.49386228
sensor-135 ["0.05132897529660399","0.24204987641954018","0.48470113942206461","0.74275730068433621","0.94784079559229406"] 0.494817619
sensor-74 ["0.048914714739047828","0.25160926036445724","0.49832498850160978","0.75257887767110776","0.94932261924236094"] 0.501627252
sensor-173 ["0.048333149363009836","0.26084250046756496","0.51288012531934613","0.74964772791583412","0.95156058795294"] 0.505401226
sensor-28 ["0.048511161184567046","0.2547387968731824","0.50101318228599656","0.75693845702682039","0.95243122486483989"] 0.502066244
sensor-34 ["0.049980293859462954","0.25094722564949412","0.50914023067384762","0.75571549713447961","0.95176564809278674"] 0.504309494
... ... ...

最接近排名百分位數

第 P 百分位數 (0 <P<= 100) 排序順序排序的已排序值清單,以遞增順序排序,是清單中的最小值。 資料的 P 百分位數會小於或等於第 P 個百分位數 (來自百分位數的維基百科文章)。

將第 0 個百分位數定義為母體的最小成員。

注意

由於計算的近似性質,實際傳回的值可能不是母體的成員。 最接近排名的定義表示 P= 50 不符合中位數的插值定義。 針對特定應用程式評估這項差異的重要性時,應考慮母體的大小和估計誤差

百分位數中的估計誤差

百分位數彙總使用 T-Digest提供近似值。

注意

  • 估計誤差的範圍會隨著要求的百分位數值而變化。 最佳的精確度是在 [0..100] 刻度的兩端。 百分位數 0 和 100 正好是數值分佈的最小值和最大值。 精確度會逐漸向級別中央減少。 在中位數時最差,且上限為 %1。
  • 誤差範圍是在秩上測得,而非在值上。 假設 percentile(X, 50) 傳回 Xm 的值。 此估計可保證最少 49%、最多 51% 的 X 值小於或等於 Xm。 Xm 與 X 實際中位數值之間的差異理論上沒有限制。
  • 估計有時可能會產生精確的值,但沒有發生此情況的可靠條件定義。