percentiles_linear_fl()

适用于:✅Azure 数据资源管理器

函数 percentiles_linear_fl() 是一个用户定义的函数 (UDF),它使用最近设置级别之间的线性内插计算百分位,这与 Excel 的 PERCENTILES.INC 函数使用的方法相同。 Kusto 本机百分位函数使用最接近的设置级别方法。 对于大型值集,两种方法之间的差异微不足道,我们建议使用本机函数以获得最佳性能。 有关这些方法和其他百分位计算方法的更多详细信息,请查看维基百科上的百分位文章。 该函数接受一个包含要计算的列和可选分组键的表,以及所需百分位的动态数组,并返回一个包含按每个组百分位值的动态数组的列。

语法

T | invoke percentiles_linear_fl(val_col, pct_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]