percentilew()、percentilesw() (集計関数)

関数はpercentilew()expr で定義された母集団の指定された最も近いランクのパーセンタイルの加重推定値を計算します。 percentilesw() は と同様に機能します percentilew()。 ただし、 percentilesw() 複数の重み付けパーセンタイル値を一度に計算できます。これは、各加重パーセンタイル値を個別に計算するよりも効率的です。

重み付けパーセンタイルは、入力データセットの各値に重みを与えることによって、データセット内のパーセンタイルを計算します。 このメソッドでは、各値は重みと等しい回数繰り返されると見なされ、パーセンタイルの計算に使用されます。 特定の値をより重要にすることで、重み付けパーセンタイルは、"重み付け" 方式でパーセンタイルを計算する方法を提供します。

重み付けされていないパーセンタイルを計算するには、「 percentiles()」を参照してください。

Note

この関数は、summarize 演算子と組み合わせて使用します。

構文

percentilew(Expr,weightExpr,パーセンタイル)

percentilesw(Expr,weightExpr,パーセン タイル)

構文規則について詳しく知る。

パラメーター

名前 必須 説明
expr string ✔️ 集計計算に使用する式。
weightExpr long ✔️ 各値を与える重み。
パーセンタイル int または long ✔️ パーセンタイルを指定する定数。
パーセン タイル int または long ✔️ 1 つ以上のコンマ区切りパーセンタイル。

戻り値

グループ内の指定されたパーセンタイルの expr の推定値を含むテーブルを返します。それぞれは個別の列に格納されます。

Note

1 つの列のパーセンタイルを返すには、「 配列としてパーセンタイルを返す」を参照してください。

重み付けパーセンタイルを計算する

完了するアクションを実行する時間 (Duration) を繰り返し測定するものとします。 測定のすべての値を記録する代わりに、100 ミリ秒に丸めた Duration の各値と、丸めた値の表示回数 (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 ミリ秒バケット内の 6 つのイベント (サブセット { 12, 12, 15, 15, 15, 18 } に対応)
  • 30 ミリ秒バケット内の 3 つのイベント (サブセット { 21, 22, 26 } に対応)
  • 40 ミリ秒バケット内の 1 つのイベント (サブセット { 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,パーセン タイル)

パラメーター

名前 必須 説明
expr string ✔️ 集計計算に使用する式。
パーセン タイル int、long、または動的 ✔️ 1 つ以上のコンマ区切りパーセンタイルまたはパーセンタイルの動的配列。 各パーセンタイルには、整数または長い値を指定できます。
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]