percentilew(), percentilesw() (função de agregação)

A percentilew() função calcula uma estimativa ponderada para o percentil de classificação mais próximo especificado da população definida por expr. percentilesw() funciona de forma semelhante a percentilew(). No entanto, percentilesw() pode calcular vários valores de percentil ponderados ao mesmo tempo, o que é mais eficiente do que calcular cada valor de percentil ponderado separadamente.

Percentis ponderados calculam percentis em um conjunto de dados dando um peso a cada valor no conjunto de dados de entrada. Nesse método, cada valor é considerado repetido várias vezes igual ao peso, que é então usado para calcular o percentil. Ao dar mais importância a determinados valores, os percentis ponderados fornecem uma maneira de calcular percentis de maneira "ponderada".

Para calcular percentis não ponderados, consulte percentils().

Observação

Essa função é usada em conjunto com o operador summarize.

Syntax

percentilew(Expr,weightExpr,Percentil)

percentilesw(Expr,weightExpr,percentils)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Obrigatório Descrição
expr string ✔️ A expressão a ser usada para cálculo de agregação.
weightExpr long ✔️ O peso a ser fornecido a cada valor.
Percentil int ou longo ✔️ Uma constante que especifica o percentil.
percentils int ou longo ✔️ Um ou mais percentis separados por vírgulas.

Retornos

Retorna uma tabela com as estimativas para expr dos percentis especificados no grupo, cada um em uma coluna separada.

Observação

Para retornar os percentis em uma única coluna, consulte Retornar percentils como uma matriz.

Exemplos

Calcular percentis ponderados

Suponha que você meça repetidamente o tempo (Duração) que ele executa uma ação para concluir. Em vez de registrar cada valor da medida, você registra cada valor de Duração, arredondado para 100 msec e quantas vezes o valor arredondado apareceu (BucketSize).

Use summarize percentilesw(Duration, BucketSize, ...) para calcular os percentis especificados de forma "ponderada". Trate cada valor de Duration como se fosse repetido bucketSize vezes na entrada, sem realmente precisar materializar esses registros.

O exemplo a seguir mostra percentis ponderados. Usando o seguinte conjunto de valores de latência em milissegundos: { 1, 1, 2, 2, 2, 5, 7, 7, 12, 12, 15, 15, 15, 18, 21, 22, 26, 35 }.

Para reduzir a largura de banda e o armazenamento, faça a pré-agregação para os seguintes buckets: { 10, 20, 30, 40, 50, 100 }. Conte o número de eventos em cada bucket para produzir a tabela a seguir:

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable

A tabela exibe:

  • Oito eventos no bucket de 10 ms (correspondente ao subconjunto { 1, 1, 2, 2, 2, 5, 7, 7 })
  • Seis eventos no bucket de 20 ms (correspondente ao subconjunto { 12, 12, 15, 15, 15, 18 })
  • Três eventos no bucket de 30 ms (correspondente ao subconjunto { 21, 22, 26 })
  • Um evento no bucket de 40 ms (correspondente ao subconjunto { 35 })

Neste ponto, os dados originais não estão mais disponíveis. Apenas o número de eventos em cada bucket. Para calcular percentis com base nos dados, use a percentilesw() função . Para os percentis 50, 75 e 99,9, use a seguinte consulta:

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw(LatencyBucket, ReqCount, 50, 75, 99.9)

Saída

percentile_LatencyBucket_50 percentile_LatencyBucket_75 percentile_LatencyBucket_99_9
20 20 40

Retornar percentis como uma matriz

Em vez de retornar os valores em colunas individuais, use a percentilesw_array() função para retornar os percentis em uma única coluna do tipo de matriz dinâmica.

Syntax

percentilesw_array(Expr,weightExpr,percentils)

Parâmetros

Nome Tipo Obrigatório Descrição
expr string ✔️ A expressão a ser usada para cálculo de agregação.
percentils int, long ou dynamic ✔️ Um ou mais percentis separados por vírgulas ou uma matriz dinâmica de percentis. Cada percentil pode ser um valor inteiro ou longo.
weightExpr long ✔️ O peso a ser fornecido a cada valor.

Retornos

Retorna uma estimativa para expr dos percentis especificados no grupo como uma única coluna do tipo de matriz dinâmica.

Exemplos

Percentis separados por vírgulas

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw_array(LatencyBucket, ReqCount, 50, 75, 99.9)

Saída

percentile_LatencyBucket
[20, 20, 40]

Matriz dinâmica de percentis

let latencyTable = datatable (ReqCount:long, LatencyBucket:long) 
[ 
    8, 10, 
    6, 20, 
    3, 30, 
    1, 40 
];
latencyTable
| summarize percentilesw_array(LatencyBucket, ReqCount, dynamic([50, 75, 99.9]))

Saída

percentile_LatencyBucket
[20, 20, 40]