Opérateur top-nested
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 :
- 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 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
É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-away
de .
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 |