Partilhar via


percentiles_linear_fl()

Aplica-se a: ✅Microsoft FabricAzure 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]