operator top-nested
De top-nested
operator voert hiërarchische aggregatie en waardeselectie uit.
Stel dat u een tabel hebt met verkoopgegevens zoals regio's, verkopers en verkochte bedragen. De top-nested
operator kan u helpen bij het beantwoorden van complexe vragen, zoals 'Wat zijn de vijf belangrijkste regio's per verkoop en wie zijn de drie belangrijkste verkopers in elk van deze regio's?'
De brongegevens worden gepartitioneerd op basis van de criteria die zijn ingesteld in de eerste top-nested
component, zoals regio. Vervolgens kiest de operator de bovenste records in elke partitie met behulp van een aggregatie, zoals het toevoegen van verkoopbedragen. Elke volgende top-nested
component verfijnt de partities die met de vorige component zijn gemaakt, waardoor een hiërarchie van nauwkeurigere groepen wordt gemaakt.
Het resultaat is een tabel met twee kolommen per component. De ene kolom bevat de partitioneringswaarden, zoals regio, terwijl de andere kolom de resultaten van de aggregatieberekening bevat, zoals de som van de verkoop.
Syntax
T|
top-nested
[ N ] of
Expr [with
others
=
ConstExpr] by
Aggregation [asc
| desc
] [,
top-nested
... ]
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
T | string |
✔️ | De tabellaire invoerexpressie. |
N | int |
Het aantal topwaarden dat moet worden geretourneerd voor dit hiërarchieniveau. Als u dit weglaat, worden alle afzonderlijke waarden geretourneerd. | |
Expr | string |
✔️ | Een expressie over de invoerrecord die aangeeft welke waarde moet worden geretourneerd voor dit hiërarchieniveau. Normaal gesproken verwijst het naar een kolom uit T of omvat het een berekening zoals bin() in een kolom. U kunt desgewenst de naam van een uitvoerkolom instellen als Naam= Expr. |
ConstExpr | string |
Als dit wordt opgegeven, wordt voor elk hiërarchieniveau één record toegevoegd met de waarde die de aggregatie is voor alle records die de top niet hebben gevonden. | |
Aggregatie | string |
De aggregatiefunctie die wordt toegepast op records met dezelfde Expr-waarde . Het resultaat bepaalt de belangrijkste records. Zie Ondersteunde aggregatiefuncties. U kunt desgewenst de naam van een uitvoerkolom instellen alsNaamaggregatie= . |
Ondersteunde aggregatiefuncties
De volgende aggregatiefuncties worden ondersteund:
Notitie
Elke algebraïsche combinatie van de aggregaties wordt ook ondersteund.
Retouren
Een tabel met twee kolommen voor elke component. De ene kolom bevat unieke waarden die zijn berekend met Expr, en de andere kolom toont de resultaten die zijn verkregen met de aggregatieberekening .
Gegevens uit andere kolommen opnemen
Alleen kolommen die zijn opgegeven als een top-nested
component Expr worden weergegeven in de uitvoertabel.
Alle waarden van een kolom op een specifiek niveau opnemen:
- Geef de waarde van N niet op.
- Gebruik de kolomnaam als de waarde van Expr.
- Gebruik
Ignore=max(1)
als de waarde van Aggregatie. - Verwijder de overbodige
Ignore
kolom met project-away.
Zie De meest recente gebeurtenissen per status ophalen met aanvullende gegevens uit andere kolommen voor een voorbeeld.
Prestatieoverwegingen
Het aantal records kan exponentieel toenemen met het aantal top-nested
componenten en recordgroei is nog sneller als er geen N-limiet is opgegeven. Deze operator kan een aanzienlijke hoeveelheid resources verbruiken.
Als de verdeling van de aggregatie aanzienlijk niet uniform is, beperk dan het aantal afzonderlijke waarden dat moet worden geretourneerd door N op te geven. Gebruik vervolgens de with
others
=
ConstExpr-specificatie om een indicatie te krijgen van het gewicht van alle andere gevallen.
Voorbeelden
Aan de slag met de top-nested
operator
Met de volgende query wordt de StormEvents
tabel gepartitioneerd op basis van de State
kolom en wordt de totale breedtegraad voor elke status berekend. De query selecteert de bovenste twee statussen met de hoogste breedtegraad. Binnen deze twee topstatussen groepeert de query de gegevens Source
op en selecteert de drie belangrijkste bronnen met de hoogste breedtegraad. Voor elk van de drie belangrijkste bronnen in de bovenste twee statussen groepeert de query de gegevens EndLocation
op en selecteert de EndLocation
met de hoogste breedtegraad.
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.
Uitvoer
Staat | aggregated_State | Bron | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
KANSAS | 87771.2355000001 | Rechtshandhaving | 18744.823 | FT SCOTT | 264.858 |
KANSAS | 87771.2355000001 | Openbaar | 22855.6206 | BUCKLIN | 488.2457 |
KANSAS | 87771.2355000001 | Getrainde spotter | 21279.7083 | SHARON SPGS | 388.7404 |
TEXAS | 123400.5101 | Openbaar | 13650.9079 | AMARILLO | 246.2598 |
TEXAS | 123400.5101 | Rechtshandhaving | 37228.5966 | PERRYTON | 289.3178 |
TEXAS | 123400.5101 | Getrainde spotter | 13997.7124 | CLAUDE | 421.44 |
Geneste resultaten verbeteren met gegevens uit een andere kolom
De volgende query bouwt voort op het vorige voorbeeld door een extra top-nested
component te introduceren. In deze nieuwe component resulteert de afwezigheid van een numerieke specificatie in de extractie van alle afzonderlijke waarden van EventType
over de partities. De max(1)
aggregatiefunctie is slechts een tijdelijke aanduiding, waardoor het resultaat niet relevant is, dus de operator project-away verwijdert de Ignore
kolom. Het resultaat toont alle gebeurtenistypen die zijn gekoppeld aan de eerder geaggregeerde gegevens.
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
Uitvoer
Staat | aggregated_State | Bron | aggregated_Source | EndLocation | aggregated_EndLocation | EventType |
---|---|---|---|---|---|---|
TEXAS | 123400.51009999994 | Openbaar | 13650.907900000002 | AMARILLO | 246.25979999999998 | Hagel |
TEXAS | 123400.51009999994 | Openbaar | 13650.907900000002 | AMARILLO | 246.25979999999998 | Onweerswind |
KANSAS | 87771.235500000068 | Openbaar | 22855.6206 | BUCKLIN | 488.2457 | Overstroming |
KANSAS | 87771.235500000068 | Openbaar | 22855.6206 | BUCKLIN | 488.2457 | Onweerswind |
KANSAS | 87771.235500000068 | Openbaar | 22855.6206 | BUCKLIN | 488.2457 | Hagel |
TEXAS | 123400.51009999994 | Getrainde spotter | 13997.712400000009 | CLAUDE | 421.44 | Hagel |
KANSAS | 87771.235500000068 | Rechtshandhaving | 18744.823000000004 | FT SCOTT | 264.858 | Flash Flood |
KANSAS | 87771.235500000068 | Rechtshandhaving | 18744.823000000004 | FT SCOTT | 264.858 | Onweerswind |
KANSAS | 87771.235500000068 | Rechtshandhaving | 18744.823000000004 | FT SCOTT | 264.858 | Overstroming |
TEXAS | 123400.51009999994 | Rechtshandhaving | 37228.596599999961 | PERRYTON | 289.3178 | Hagel |
... | ... | ... | ... | ... | ... |
Gebruiken with
others
om uitgesloten gegevens te verkennen
Wanneer deze is opgenomen in een top-nested
component, introduceert de with
others
specificatie een extra record waarmee gegevens worden samengevoegd die zijn uitgesloten van de belangrijkste resultaten. In de volgende query wordt een extra record gemaakt in de State
kolommen en aggregated_State
, die de collectieve breedtegraad van alle staten met uitzondering van Kansas en Texas vertegenwoordigt. Bovendien heeft de EndLocation
kolom en aggregated_EndLocation
negen extra records. Deze records tonen de gecombineerde breedtegraad van eindlocaties die niet in aanmerking komen als de bovenste locatie binnen elke status en bron.
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)
Uitvoer
Staat | aggregated_State | Bron | aggregated_Source | EndLocation | aggregated_EndLocation |
---|---|---|---|---|---|
KANSAS | 87771.2355000001 | Rechtshandhaving | 18744.823 | FT SCOTT | 264.858 |
KANSAS | 87771.2355000001 | Openbaar | 22855.6206 | BUCKLIN | 488.2457 |
KANSAS | 87771.2355000001 | Getrainde spotter | 21279.7083 | SHARON SPGS | 388.7404 |
TEXAS | 123400.5101 | Openbaar | 13650.9079 | AMARILLO | 246.2598 |
TEXAS | 123400.5101 | Rechtshandhaving | 37228.5966 | PERRYTON | 289.3178 |
TEXAS | 123400.5101 | Getrainde spotter | 13997.7124 | CLAUDE | 421.44 |
KANSAS | 87771.2355000001 | Rechtshandhaving | 18744.823 | Alle andere eindlocaties | 18479.965 |
KANSAS | 87771.2355000001 | Openbaar | 22855.6206 | Alle andere eindlocaties | 22367.3749 |
KANSAS | 87771.2355000001 | Getrainde spotter | 21279.7083 | Alle andere eindlocaties | 20890.9679 |
TEXAS | 123400.5101 | Openbaar | 13650.9079 | Alle andere eindlocaties | 13404.6481 |
TEXAS | 123400.5101 | Rechtshandhaving | 37228.5966 | Alle andere eindlocaties | 36939.2788 |
TEXAS | 123400.5101 | Getrainde spotter | 13997.7124 | Alle andere eindlocaties | 13576.2724 |
KANSAS | 87771.2355000001 | Alle andere eindlocaties | 24891.0836 | ||
TEXAS | 123400.5101 | Alle andere eindlocaties | 58523.2932000001 | ||
Alle overige staten | 1149279.5923 | Alle andere eindlocaties | 1149279.5923 |
De volgende query toont dezelfde resultaten voor het eerste niveau dat in het vorige voorbeeld is gebruikt.
StormEvents
| where State !in ('TEXAS', 'KANSAS')
| summarize sum(BeginLat)
Uitvoer
sum_BeginLat |
---|
1149279.5923 |
Hiërarchische resultaten sorteren
Voor een uitgebreide sorteervolgorde maakt de volgende query gebruik van op indexen gebaseerde sortering voor elke waarde binnen het huidige hiërarchieniveau, per groep. Deze sortering is gericht op het rangschikken van het resultaat op basis van het uiteindelijke geneste niveau, in dit geval de 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
Uitvoer
Staat | Bron | EndLocations | endLocationSums | Indexen |
---|---|---|---|---|
TEXAS | Getrainde spotter | CLAUDE | 421.44 | 0 |
TEXAS | Getrainde spotter | AMARILLO | 316.8892 | 1 |
TEXAS | Getrainde spotter | DALHART | 252.6186 | 2 |
TEXAS | Getrainde spotter | PERRYTON | 216.7826 | 3 |
TEXAS | Rechtshandhaving | PERRYTON | 289.3178 | 0 |
TEXAS | Rechtshandhaving | LEAKEY | 267.9825 | 1 |
TEXAS | Rechtshandhaving | BRACKETTVILLE | 264.3483 | 2 |
TEXAS | Rechtshandhaving | GILMER | 261.9068 | 3 |
KANSAS | Getrainde spotter | SHARON SPGS | 388.7404 | 0 |
KANSAS | Getrainde spotter | ATWOOD | 358.6136 | 1 |
KANSAS | Getrainde spotter | LENORA | 317.0718 | 2 |
KANSAS | Getrainde spotter | SCOTT CITY | 307.84 | 3 |
KANSAS | Openbaar | BUCKLIN | 488.2457 | 0 |
KANSAS | Openbaar | ASHLAND | 446.4218 | 1 |
KANSAS | Openbaar | BESCHERMING | 446.11 | 2 |
KANSAS | Openbaar | MEADE STATE PARK | 371.1 | 3 |
De meest recente gebeurtenissen per status ophalen met aanvullende gegevens uit andere kolommen
De volgende query laat zien hoe u de twee meest recente gebeurtenissen voor elke Amerikaanse staat kunt ophalen, samen met relevante gebeurtenisdetails. Let op het gebruik van max(1)
binnen bepaalde kolommen, aangeduid met Ignore*
, waarmee gegevens via de query kunnen worden doorgegeven zonder dat er selectielogica wordt opgelegd.
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.
De meest recente records per identiteit ophalen met aanvullende gegevens uit andere kolommen
De volgende query laat zien hoe u de meest recente records per identiteit kunt extraheren en bouwt voort op de concepten die in het vorige voorbeeld zijn geïntroduceerd. Met de eerste top-nested
component worden de gegevens gepartitioneerd op basis van afzonderlijke waarden van id
. De volgende component identificeert de twee meest recente records op basis van de timestamp
voor elke id
. Andere informatie wordt toegevoegd met behulp van een top-nested
operator naast een niet-opgegeven telling en de willekeurige max(1)
aggregatie. Ten slotte worden onnodige aggregatiekolommen verwijderd met behulp van de project-away
operator.
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.
Uitvoer
id | tijdstempel | andereinformatie |
---|---|---|
Barak | 2016-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 |
Gerelateerde inhoud
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor