percentiles_linear_fl()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
A função percentiles_linear_fl()
é uma função definida pelo usuário (UDF) que calcula percentis usando interpolação linear entre as classificações mais próximas, o mesmo método usado pelos PERCENTIS do Excel. Função INC . As funções de percentil nativas do Kusto usam o método de classificação mais próximo. Para grandes conjuntos de valores, a diferença entre os dois métodos é insignificante e recomendamos o uso da função nativa para obter o melhor desempenho. Para mais detalhes sobre esses e outros métodos adicionais de cálculo de percentil, dê uma olhada no artigo de percentil na Wikipedia.
A função aceita uma tabela contendo a coluna a ser calculada e uma chave de agrupamento opcional, e uma matriz dinâmica dos percentis necessários e retorna uma coluna contendo a matriz dinâmica dos valores dos percentis por cada grupo.
Sintaxe
T | invoke percentiles_linear_fl(
,
val_col pct_arr [,
aggr_col ])
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
val_col | string |
✔️ | O nome da coluna que contém os valores com os quais calcular os percentis. |
pct_arr | dynamic |
✔️ | Uma matriz numérica contendo os percentis necessários. Cada percentil deve estar no intervalo [0-100]. |
aggr_col | string |
O nome da coluna que contém a chave de agrupamento. |
Definição de função
Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:
Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.
Importante
Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de percentiles_linear_fl()
, consulte Exemplo.
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.
Exemplo
O exemplo a seguir usa o operador invoke para executar a função.
Para usar uma função definida por consulta, invoque-a após a definição da função inserida.
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
Saída
name | x | pct_arr | pct_val |
---|---|---|---|
Um | [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] |