Opérateur top-nested
L’opérateur top-nested
effectue l’agrégation hiérarchique et la sélection de valeurs.
Imaginez que vous disposez d’un tableau contenant des informations sur les ventes telles que les régions, les vendeurs et les quantités vendues. 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 premiers vendeurs dans chacune de ces régions ? »
Les données sources sont partitionnées 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 les plus hauts 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.
Syntax
T|
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
Agrégation [asc
| desc
] [,
top-nested
... ]
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | 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 comme bin() sur une colonne. Si vous le souhaitez, définissez un nom de colonne de sortie comme Name= 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 n’ont pas été 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 les plus hauts. Consultez Fonctions d’agrégation prises en charge. Si vous le souhaitez, définissez un nom de colonne de sortie commeAgrégation denoms= . |
Fonctions d’agrégation prises en charge
Les fonctions d’agrégation suivantes sont prises en charge :
Notes
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 .
Inclure les 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 :
- Ne spécifiez pas la valeur de N.
- Utilisez le nom de colonne comme valeur d’Expr.
- Utilisez
Ignore=max(1)
comme valeur d’agrégation. - Supprimez la colonne inutile
Ignore
avec project-away.
Pour obtenir un exemple, consultez Obtenir les événements les plus récents par état avec des données supplémentaires à partir d’autres colonnes.
Considérations relatives aux performances
Le nombre d’enregistrements peut augmenter de façon exponentielle avec le nombre de clauses, et la croissance des top-nested
enregistrements est encore plus rapide si aucune limite N n’est spécifiée. Cet opérateur peut consommer une quantité considérable de ressources.
Si la distribution de l’agrégation est considérablement non uniforme, limitez le nombre de valeurs distinctes à retourner en spécifiant N. Ensuite, utilisez la with
others
=
spécification ConstExpr pour obtenir une indication du poids de tous les autres cas.
Exemples
Prise en main de l’opérateur top-nested
La requête suivante partitionne la StormEvents
table en fonction de la State
colonne et calcule la latitude totale pour chaque état. La requête sélectionne les deux états les plus hauts avec la somme de latitude la plus élevée. Dans ces deux états principaux, la requête regroupe les données par Source
et sélectionne les trois principales sources avec la somme de latitude la plus élevée. Pour chacune des trois principales sources dans les deux états principaux, la requête regroupe les données par EndLocation
et sélectionne le avec la somme de EndLocation
latitude la plus élevée.
StormEvents // Data source.
| top-nested 2 of State by sum(BeginLat), // Top 2 States by total latitude.
top-nested 3 of Source by sum(BeginLat), // Top 3 Sources by total latitude in each State.
top-nested 1 of EndLocation by sum(BeginLat) // Top 1 EndLocation by total latitude in each Source and State.
Sortie
State | aggregated_State | Source | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
KANSAS | 87771.2355000001 | Respect des lois | 18744.823 | FT SCOTT | 264.858 |
KANSAS | 87771.2355000001 | Public | 22855.6206 | BUCKLIN | 488.2457 |
KANSAS | 87771.2355000001 | Observateur chevronné | 21279.7083 | SHARON SPGS | 388.7404 |
TEXAS | 123400.5101 | Public | 13650.9079 | AMARILLO | 246.2598 |
TEXAS | 123400.5101 | Respect des lois | 37228.5966 | PERRYTON | 289.3178 |
TEXAS | 123400.5101 | Observateur chevronné | 13997.7124 | CLAUDE | 421.44 |
Améliorer les résultats imbriqués avec les données d’une autre colonne
La requête suivante s’appuie sur l’exemple précédent en introduisant une clause supplémentaire top-nested
. Dans cette nouvelle clause, l’absence de spécification numérique entraîne l’extraction de toutes les valeurs distinctes de EventType
dans les partitions. La max(1)
fonction d’agrégation est simplement un espace réservé, ce qui rend son résultat non pertinent. L’opérateur project-away supprime donc la Ignore
colonne. Le résultat montre tous les types d’événements associés aux données précédemment agrégées.
StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation by sum(BeginLat),
top-nested of EventType by Ignore = max(1)
| project-away Ignore
Sortie
State | aggregated_State | Source | aggregated_Source | EndLocation | aggregated_EndLocation | Type d’événement |
---|---|---|---|---|---|---|
TEXAS | 123400.51009999994 | Public | 13650.907900000002 | AMARILLO | 246.25979999999998 | Grêle |
TEXAS | 123400.51009999994 | Public | 13650.907900000002 | AMARILLO | 246.25979999999998 | Vent d’orage |
KANSAS | 87771.235500000068 | Public | 22855.6206 | BUCKLIN | 488.2457 | Crue |
KANSAS | 87771.235500000068 | Public | 22855.6206 | BUCKLIN | 488.2457 | Vent d’orage |
KANSAS | 87771.235500000068 | Public | 22855.6206 | BUCKLIN | 488.2457 | Grêle |
TEXAS | 123400.51009999994 | Observateur chevronné | 13997.712400000009 | CLAUDE | 421.44 | Grêle |
KANSAS | 87771.235500000068 | Respect des lois | 18744.823000000004 | FT SCOTT | 264.858 | Crue soudaine |
KANSAS | 87771.235500000068 | Respect des lois | 18744.823000000004 | FT SCOTT | 264.858 | Vent d’orage |
KANSAS | 87771.235500000068 | Respect des lois | 18744.823000000004 | FT SCOTT | 264.858 | Crue |
TEXAS | 123400.51009999994 | Respect des lois | 37228.596599999961 | PERRYTON | 289.3178 | Grêle |
... | ... | ... | ... | ... | ... |
Utiliser with
others
pour explorer les données exclues
Lorsqu’elle est incorporée dans une top-nested
clause, la with
others
spécification introduit un enregistrement supplémentaire qui agrège les données exclues des premiers résultats. Dans la requête suivante, un enregistrement supplémentaire est créé dans les State
colonnes et aggregated_State
, représentant la latitude collective de tous les États, à l’exception du Kansas et du Texas. De plus, la EndLocation
colonne et aggregated_EndLocation
a neuf enregistrements supplémentaires. Ces enregistrements indiquent la latitude combinée des emplacements finaux qui ne sont pas éligibles en tant qu’emplacement supérieur dans chaque état et chaque source.
StormEvents
| top-nested 2 of State with others = "All Other States" by sum(BeginLat),
top-nested 3 of Source by sum(BeginLat),
top-nested 1 of EndLocation with others = "All Other End Locations" by sum(BeginLat)
Sortie
State | aggregated_State | Source | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
KANSAS | 87771.2355000001 | Respect des lois | 18744.823 | FT SCOTT | 264.858 |
KANSAS | 87771.2355000001 | Public | 22855.6206 | BUCKLIN | 488.2457 |
KANSAS | 87771.2355000001 | Observateur chevronné | 21279.7083 | SHARON SPGS | 388.7404 |
TEXAS | 123400.5101 | Public | 13650.9079 | AMARILLO | 246.2598 |
TEXAS | 123400.5101 | Respect des lois | 37228.5966 | PERRYTON | 289.3178 |
TEXAS | 123400.5101 | Observateur chevronné | 13997.7124 | CLAUDE | 421.44 |
KANSAS | 87771.2355000001 | Respect des lois | 18744.823 | Tous les autres emplacements finaux | 18479.965 |
KANSAS | 87771.2355000001 | Public | 22855.6206 | Tous les autres emplacements finaux | 22367.3749 |
KANSAS | 87771.2355000001 | Observateur chevronné | 21279.7083 | Tous les autres emplacements finaux | 20890.9679 |
TEXAS | 123400.5101 | Public | 13650.9079 | Tous les autres emplacements finaux | 13404.6481 |
TEXAS | 123400.5101 | Respect des lois | 37228.5966 | Tous les autres emplacements finaux | 36939.2788 |
TEXAS | 123400.5101 | Observateur chevronné | 13997.7124 | Tous les autres emplacements finaux | 13576.2724 |
KANSAS | 87771.2355000001 | Tous les autres emplacements finaux | 24891.0836 | ||
TEXAS | 123400.5101 | Tous les autres emplacements finaux | 58523.2932000001 | ||
Tous les autres états | 1149279.5923 | Tous les autres emplacements finaux | 1149279.5923 |
La requête suivante affiche les mêmes résultats pour le premier niveau utilisé dans l’exemple précédent.
StormEvents
| where State !in ('TEXAS', 'KANSAS')
| summarize sum(BeginLat)
Sortie
sum_BeginLat |
---|
1149279.5923 |
Trier les résultats hiérarchiques
Pour obtenir un ordre de tri complet, la requête suivante utilise le tri basé sur les index pour chaque valeur au sein du niveau hiérarchique actuel, par groupe. Ce tri est destiné à organiser le résultat en fonction du niveau imbriqué ultime, en l’occurrence .EndLocation
StormEvents
| top-nested 2 of State by sum(BeginLat),
top-nested 2 of Source by sum(BeginLat),
top-nested 4 of EndLocation by sum(BeginLat)
| sort by State, Source, aggregated_EndLocation
| summarize
EndLocations = make_list(EndLocation, 10000),
endLocationSums = make_list(aggregated_EndLocation, 10000)
by State, Source
| extend indicies = range(0, array_length(EndLocations) - 1, 1)
| mv-expand EndLocations, endLocationSums, indicies
Sortie
State | Source | EndLocations | endLocationSums | indices |
---|---|---|---|---|
TEXAS | Observateur chevronné | CLAUDE | 421.44 | 0 |
TEXAS | Observateur chevronné | AMARILLO | 316.8892 | 1 |
TEXAS | Observateur chevronné | DALHART | 252.6186 | 2 |
TEXAS | Observateur chevronné | PERRYTON | 216.7826 | 3 |
TEXAS | Respect des lois | PERRYTON | 289.3178 | 0 |
TEXAS | Respect des lois | LEAKEY | 267.9825 | 1 |
TEXAS | Respect des lois | BRACKETTVILLE | 264.3483 | 2 |
TEXAS | Respect des lois | GILMER | 261.9068 | 3 |
KANSAS | Observateur chevronné | SHARON SPGS | 388.7404 | 0 |
KANSAS | Observateur chevronné | ATWOOD | 358.6136 | 1 |
KANSAS | Observateur chevronné | LENORA | 317.0718 | 2 |
KANSAS | Observateur chevronné | SCOTT CITY | 307.84 | 3 |
KANSAS | Public | BUCKLIN | 488.2457 | 0 |
KANSAS | Public | ASHLAND | 446.4218 | 1 |
KANSAS | Public | PROTECTION | 446.11 | 2 |
KANSAS | Public | MEADE STATE PARK | 371.1 | 3 |
Obtenir les événements les plus récents par état avec des données supplémentaires provenant d’autres colonnes
La requête suivante montre comment récupérer les deux événements les plus récents pour chaque état des États-Unis, ainsi que les détails pertinents de l’événement. Notez l’utilisation de max(1)
dans certaines colonnes, identifiées par Ignore*
, qui facilite la propagation des données dans la requête sans imposer de logique de sélection.
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.
Obtenir les derniers enregistrements par identité avec des données supplémentaires d’autres colonnes
La requête suivante montre comment extraire les enregistrements les plus récents par identité et s’appuie sur les concepts introduits dans l’exemple précédent. La première top-nested
clause partitionne les données par des valeurs distinctes de id
. La clause suivante identifie les deux enregistrements les plus récents en fonction du timestamp
pour chaque id
. D’autres informations sont ajoutées à l’aide d’un top-nested
opérateur avec un nombre non spécifié et l’agrégation arbitraire max(1)
. 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 |
Contenu connexe
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour