percentiles_linear_fl()

関数 percentiles_linear_fl() は、Excel の PERCENTILES で使用されるのと同じメソッドである、最も近いランク間の線形補間を使用してパーセンタイルを計算する ユーザー定義関数 (UDF)です。INC 関数。 Kusto ネイティブ パーセンタイル関数 は、最も近いランクメソッドを使用します。 値のセットが大きい場合、両方のメソッドの違いは重要で、最適なパフォーマンスを得るためのネイティブ関数を使用することをお勧めします。 これらのパーセンタイル計算方法と追加のパーセンタイル計算方法の詳細については、 Wikipedia のパーセンタイルに関する記事を参照してください。 関数は、計算対象の列とオプションのグループ化キー、および必要なパーセンタイルの動的配列を含むテーブルを受け取り、各グループごとのパーセンタイルの値の動的配列を含む列を返します。

構文

T | invoke percentiles_linear_fl(, val_colpct_arr [,aggr_col ])

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

パラメーター

名前 必須 説明
val_col string ✔️ パーセンタイルの計算に使用する値を含む列の名前。
pct_arr dynamic ✔️ 必要なパーセンタイルを含む数値配列。 各パーセンタイルの範囲は [0 - 100] である必要があります。
aggr_col string グループ化キーを含む列の名前。

関数の定義

関数を定義するには、次のようにコードをクエリ定義関数として埋め込むか、データベースに格納された関数として作成します。

次の let ステートメントを使用して関数を定義します。 権限は必要ありません。

重要

let ステートメントを単独で実行することはできません。 その後に 表形式の式ステートメントを指定する必要があります。 の動作例 percentiles_linear_fl()を実行するには、「 」を参照してください。

let percentiles_linear_fl=(tbl:(*), val_col:string, pct_arr:dynamic, aggr_col:string='')
{
    tbl
    | extend _vals = column_ifexists(val_col, 0.0)
    | extend _key = column_ifexists(aggr_col, 'ALL')
    | order by _key asc, _vals asc 
    | summarize _vals=make_list(_vals) by _key
    | extend n = array_length(_vals)
    | extend pct=pct_arr
    | mv-apply pct to typeof(real) on (
          extend index=pct/100.0*(n-1)
        | extend low_index=tolong(floor(index, 1)), high_index=tolong(ceiling(index))
        | extend interval=todouble(_vals[high_index])-todouble(_vals[low_index])
        | extend pct_val=todouble(_vals[low_index])+(index-low_index)*interval
        | summarize pct_arr=make_list(pct), pct_val=make_list(pct_val))
    | project-away n
};
// Write your query to use the function here.

次の例では、 invoke 演算子 を使用して関数を実行します。

クエリ定義関数を使用するには、埋め込み関数定義の後で呼び出します。

let percentiles_linear_fl=(tbl:(*), val_col:string, pct_arr:dynamic, aggr_col:string='')
{
    tbl
    | extend _vals = column_ifexists(val_col, 0.0)
    | extend _key = column_ifexists(aggr_col, 'ALL')
    | order by _key asc, _vals asc 
    | summarize _vals=make_list(_vals) by _key
    | extend n = array_length(_vals)
    | extend pct=pct_arr
    | mv-apply pct to typeof(real) on (
          extend index=pct/100.0*(n-1)
        | extend low_index=tolong(floor(index, 1)), high_index=tolong(ceiling(index))
        | extend interval=todouble(_vals[high_index])-todouble(_vals[low_index])
        | extend pct_val=todouble(_vals[low_index])+(index-low_index)*interval
        | summarize pct_arr=make_list(pct), pct_val=make_list(pct_val))
    | project-away n
};
datatable(x:long, name:string) [
5, 'A',
9, 'A',
7, 'A',
5, 'B',
7, 'B',
7, 'B',
10, 'B',
]
| invoke percentiles_linear_fl('x', dynamic([0, 25, 50, 75, 100]), 'name')
| project-rename name=_key, x=_vals

出力

name x pct_arr pct_val
A [5,7,9] [0,25,50,75,100] [5,6,7,8,9]
B [5,7,7,10] [0,25,50,75,100] [5,6.5,7,7.75,10]