percentilew(), percentilesw() (fonction d’agrégation)

La percentilew() fonction calcule une estimation pondérée pour le centile de rang le plus proche spécifié de la population définie par expr. percentilesw() fonctionne de la même façon que percentilew(). Toutefois, percentilesw() peut calculer plusieurs valeurs centiles pondérées à la fois, ce qui est plus efficace que le calcul de chaque valeur de centile pondérée séparément.

Les centiles pondérés calculent les centiles dans un jeu de données en donnant une pondération à chaque valeur du jeu de données d’entrée. Dans cette méthode, chaque valeur est considérée comme répétée un nombre de fois égal à son poids, qui est ensuite utilisé pour calculer le centile. En accordant plus d’importance à certaines valeurs, les centiles pondérés permettent de calculer les centiles de manière « pondérée ».

Pour calculer les centiles non pondérés, consultez percentiles().

Notes

Cette fonction est utilisée conjointement avec l’opérateur summarize.

Syntax

percentilew(Expr,weightExpr,Percentile)

percentilesw(Expr,weightExpr,Percentiles)

Découvrez les conventions de syntaxe.

Paramètres

Nom Type Obligatoire Description
expr string ✔️ Expression à utiliser pour le calcul d’agrégation.
weightExpr long ✔️ Poids à attribuer à chaque valeur.
Percentile int ou long ✔️ Constante qui spécifie le centile.
Percentiles int ou long ✔️ Un ou plusieurs centiles séparés par des virgules.

Retours

Retourne une table avec les estimations pour expr des centiles spécifiés dans le groupe, chacun dans une colonne distincte.

Notes

Pour retourner les centiles dans une seule colonne, consultez Retourner des centiles sous forme de tableau.

Exemples

Calculer les centiles pondérés

Supposons que vous mesurez de façon répétitive le temps (durée) nécessaire à l’exécution d’une action. Au lieu d’enregistrer chaque valeur de la mesure, vous enregistrez chaque valeur de Durée, arrondie à 100 msec, et le nombre de fois où la valeur arrondie est apparue (BucketSize).

Utilisez summarize percentilesw(Duration, BucketSize, ...) pour calculer les centiles donnés de manière « pondérée ». Traitez chaque valeur de Duration comme si elle était répétée bucketSize dans l’entrée, sans avoir réellement besoin de matérialiser ces enregistrements.

L’exemple suivant montre des centiles pondérés. En utilisant l’ensemble suivant de valeurs de latence en millisecondes : { 1, 1, 2, 2, 2, 5, 7, 7, 12, 12, 15, 15, 15, 18, 21, 22, 26, 35 }.

Pour réduire la bande passante et le stockage, effectuez une pré-agrégation vers les compartiments suivants : { 10, 20, 30, 40, 50, 100 }. Comptez le nombre d’événements dans chaque compartiment pour produire le tableau suivant :

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

Le tableau affiche :

  • Huit événements dans le compartiment de 10 ms (correspondant à un sous-ensemble { 1, 1, 2, 2, 2, 5, 7, 7 })
  • Six événements dans le compartiment de 20 ms (correspondant au sous-ensemble { 12, 12, 15, 15, 15, 18 })
  • Trois événements dans le compartiment de 30 ms (correspondant au sous-ensemble { 21, 22, 26 })
  • Un événement dans le compartiment de 40 ms (correspondant à un sous-ensemble { 35 })

À ce stade, les données d’origine ne sont plus disponibles. Uniquement le nombre d’événements dans chaque compartiment. Pour calculer des centiles à partir de ces données, utilisez la percentilesw() fonction . Pour les centiles 50, 75 et 99,9, utilisez la requête suivante :

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

Sortie

percentile_LatencyBucket_50 percentile_LatencyBucket_75 percentile_LatencyBucket_99_9
20 20 40

Retourner des centiles sous forme de tableau

Au lieu de retourner les valeurs dans des colonnes individuelles, utilisez la percentilesw_array() fonction pour renvoyer les centiles dans une seule colonne de type tableau dynamique.

Syntax

percentilesw_array(Expr,weightExpr,Percentiles)

Paramètres

Nom Type Obligatoire Description
expr string ✔️ Expression à utiliser pour le calcul d’agrégation.
Percentiles int, long ou dynamique ✔️ Un ou plusieurs centiles séparés par des virgules ou un tableau dynamique de centiles. Chaque centile peut être un entier ou une valeur longue.
weightExpr long ✔️ Poids à attribuer à chaque valeur.

Retours

Retourne une estimation pour expr des centiles spécifiés dans le groupe sous la forme d’une seule colonne de type tableau dynamique.

Exemples

Centiles séparés par des virgules

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)

Sortie

percentile_LatencyBucket
[20, 20, 40]

Tableau dynamique de centiles

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]))

Sortie

percentile_LatencyBucket
[20, 20, 40]