percentile(), percentiles() (聚合函數)

適用於:✅Microsoft網狀架構Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel

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

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

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

注意

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

語法

percentile(expr, 百分位數)

percentiles(expr, 百分位數)

深入瞭解 語法慣例

參數

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

傳回

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

注意

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

範例

計算單一百分位數

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

StormEvents | summarize percentile(DamageProperty, 95) by State

輸出

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

州/省 percentile_DamageProperty_95
大西洋南部 0
佛羅里達州 40000
喬治亞州 143333
密西西比州 80000
美屬薩摩亞 250000
肯塔基州 35000
俄亥俄州 150000
堪薩斯州 51392
密西根州 49167
阿拉巴馬州 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
阿拉巴馬州 0 0 50000
... ...

以陣列的形式傳回百分位數

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

語法

percentiles_array(expr, 百分位數)

參數

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

傳回

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

範例

逗號分隔百分位數

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

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 的實際中位數值之間沒有理論限制。
  • 估計有時可能會導致精確的值,但沒有可靠的條件可定義何時會發生這種情況。