Opérateur top-nested

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

L’opérateur top-nested effectue l’agrégation hiérarchique et la sélection de valeurs.

Imaginez que vous disposez d’une table contenant des informations sur les ventes telles que les régions, les vendeurs et les montants vendus. L’opérateur top-nested peut vous aider à répondre à des questions complexes, telles que « Quelles sont les cinq premières régions par ventes et qui sont les trois meilleurs vendeurs dans chacune de ces régions ? »

Les données sources sont partitionnée en fonction des critères définis dans la première top-nested clause, comme la région. Ensuite, l’opérateur sélectionne les enregistrements principaux dans chaque partition à l’aide d’une agrégation, comme l’ajout de montants de ventes. Chaque clause suivante top-nested affine les partitions créées par la clause précédente, créant une hiérarchie de groupes plus précis.

Le résultat est une table avec deux colonnes par clause. Une colonne contient les valeurs de partitionnement, telles que la région, tandis que l’autre colonne contient les résultats du calcul d’agrégation, comme la somme des ventes.

Syntaxe

T top-nested | [ N ] of Expr [with others = ConstExpr] by Agrégation [asc | desc] [,
  top-nested ... ]

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
T string ✔️ Expression tabulaire d’entrée.
N int Nombre de valeurs supérieures à retourner pour ce niveau de hiérarchie. En cas d’omission, toutes les valeurs distinctes sont retournées.
Expr string ✔️ Expression sur l’enregistrement d’entrée indiquant la valeur à retourner pour ce niveau de hiérarchie. En règle générale, il fait référence à une colonne de T ou implique un calcul tel que bin() sur une colonne. Si vous le souhaitez, définissez un nom de colonne de sortie comme Nom = Expr.
ConstExpr string S’il est spécifié, pour chaque niveau de hiérarchie, un enregistrement est ajouté avec la valeur qui est l’agrégation sur tous les enregistrements qui ne l’ont pas fait en haut.
Agrégation string Fonction d’agrégation appliquée aux enregistrements avec la même valeur Expr . Le résultat détermine les enregistrements principaux. Consultez les fonctions d’agrégation prises en charge. Si vous le souhaitez, définissez un nom de colonne de sortie en tant qu’agrégation de noms = .

Fonctions d’agrégation prises en charge

Les fonctions d’agrégation suivantes sont prises en charge :

Remarque

Toute combinaison algébrique des agrégations est également prise en charge.

Retours

Table avec deux colonnes pour chaque clause. Une colonne contient des valeurs uniques calculées à l’aide d’Expr, et l’autre colonne affiche les résultats obtenus à partir du calcul d’agrégation .

Utilisation de la with others clause

L’utilisation de l’opérateur top-nested permet with others d’afficher votre contenu principal contextualisé dans un jeu de données plus large. L’évaluation de vos données de cette façon est précieuse lors du rendu visuel des données.

Inclure des données d’autres colonnes

Seules les colonnes spécifiées en tant que top-nested clause Expr sont affichées dans la table de sortie.

Pour inclure toutes les valeurs d’une colonne à un niveau spécifique :

  1. Ne spécifiez pas la valeur de N.
  2. Utilisez le nom de colonne comme valeur d’Expr.
  3. Utilisez Ignore=max(1) comme valeur d’agrégation.
  4. Supprimez la colonne inutile Ignore avec project-away.

Pour obtenir un exemple, consultez les événements les plus récents par état avec d’autres données de colonne.

Considérations relatives aux performances

Le nombre d’enregistrements peut croître de manière exponentielle avec le nombre de top-nested clauses, et la croissance des enregistrements est encore plus rapide si le paramètre N n’est pas spécifié. Cet opérateur peut consommer une quantité considérable de ressources.

Si la distribution d’agrégation est irrégulière, limitez le nombre de valeurs distinctes à retourner en spécifiant N. Ensuite, utilisez la with others = clause ConstExpr pour avoir un sens du poids de tous les autres cas.

Exemples

États, types d’événements et emplacements finaux les plus endommagés par dommages matériels

La requête suivante partitionne la StormEvents table par la State colonne et calcule le total des dommages de propriété pour chaque état. La requête sélectionne les deux premiers états avec la plus grande quantité de dommages matériels. Dans ces deux états principaux, la requête regroupe les données EventType et sélectionne les trois principaux types d’événements présentant le plus de dommages. Ensuite, la requête regroupe les données EndLocation et sélectionne les EndLocation dommages les plus élevés. EndLocation Une seule valeur apparaît dans les résultats, peut-être en raison de la nature importante des événements de tempête ou de ne pas documenter l’emplacement final.

StormEvents  // Data source.
| top-nested 2 of State by sum(DamageProperty),       // Top 2 States by total damaged property.
  top-nested 3 of EventType by sum(DamageProperty),   // Top 3 EventType by total damaged property for each State.
  top-nested 1 of EndLocation by sum(DamageProperty)  // Top 1 EndLocation by total damaged property for each EventType and State.
| project State, EventType, EndLocation, StateTotalDamage = aggregated_State, EventTypeTotalDamage = aggregated_EventType, EndLocationDamage = aggregated_EndLocation

Sortie

État Type d’événement EndLocation StateTotalDamage EventTypeTotalDamage EndLocationDamage
CALIFORNIE Feu de forêt 1445937600 1326315000 1326315000
CALIFORNIE HighWind 1445937600 61320000 61320000
CALIFORNIE DébrisFlow 1445937600 48000000 48000000
OKLAHOMA IceStorm 915470300 826000000 826000000
OKLAHOMA WinterStorm 915470300 40027000 40027000
OKLAHOMA Crue COMMERCE 915470300 21485000 20 000 000

Cinq premiers états avec des dommages matériels regroupés with others

L’exemple suivant utilise l’opérateur top-nested pour identifier les cinq premiers états avec le plus de dommages matériels et utilise la with others clause pour regrouper les biens endommagés pour tous les autres états. Il visualise ensuite les propriétés endommagées pour les cinq états principaux et tous les autres états comme une piechart utilisation de la render commande.

StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart  

Sortie

Capture d’écran des cinq premiers états avec la propriété la plus endommagée, et tous les autres états regroupés séparément sous la forme d’un graphique en secteurs.

Événements les plus récents par état avec d’autres données de colonne

La requête suivante récupère les deux événements les plus récents pour chaque état américain avec des détails d’événement pertinents. Il utilise max(1) dans certaines colonnes pour propager les données sans utiliser la logique de sélection imbriquée supérieure. Les colonnes d’agrégation générées sont supprimées Ignore à l’aide project-awayde .

StormEvents
| top-nested of State by Ignore0=max(1),                  // Partition the data by each unique value of state.
  top-nested 2 of StartTime by Ignore1=max(StartTime),    // Get the 2 most recent events in each state.
  top-nested of EndTime by Ignore2=max(1),                // Append the EndTime for each event.
  top-nested of EpisodeId by Ignore3=max(1)               // Append the EpisodeId for each event.
| project-away Ignore*                                    // Remove the unnecessary aggregation columns.
| order by State asc, StartTime desc                      // Sort results alphabetically and chronologically.

Derniers enregistrements par identité avec d’autres données de colonne

L’exemple suivant top-nested extrait les derniers enregistrements par identité et s’appuie sur les concepts présentés dans l’exemple précédent. La première top-nested clause partitionne les données par des valeurs distinctes d’utilisation id Ignore0=max(1) comme espace réservé. Pour chacun d’eux id, il identifie les deux enregistrements les plus récents en fonction du timestamp. D’autres informations sont ajoutées à l’aide d’un top-nested opérateur sans spécifier de nombre et d’utilisation Ignore2=max(1) comme espace réservé. Enfin, les colonnes d’agrégation inutiles sont supprimées à l’aide de l’opérateur project-away .

datatable(id: string, timestamp: datetime, otherInformation: string) // Create a source datatable.
[
    "Barak", datetime(2015-01-01), "1",
    "Barak", datetime(2016-01-01), "2",
    "Barak", datetime(2017-01-20), "3",
    "Donald", datetime(2017-01-20), "4",
    "Donald", datetime(2017-01-18), "5",
    "Donald", datetime(2017-01-19), "6"
]
| top-nested of id by Ignore0=max(1),                     // Partition the data by each unique value of id.
  top-nested 2 of timestamp by Ignore1=max(timestamp),    // Get the 2 most recent events for each state.
  top-nested of otherInformation by Ignore2=max(1)        // Append otherInformation for each event.
| project-away Ignore0, Ignore1, Ignore2                  // Remove the unnecessary aggregation columns.

Sortie

id timestamp otherInformation
Barak 2016-01-01T00:00:00Z 2
Donald 2017-01-19T00:00:00Z 6
Barak 2017-01-20T00:00:00Z 3
Donald 2017-01-20T00:00:00Z 4