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=(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] |