Delen via


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 ] ofExpr [withothers=ConstExpr] byAggregation [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:

  1. Geef de waarde van N niet op.
  2. Gebruik de kolomnaam als de waarde van Expr.
  3. Gebruik Ignore=max(1) als de waarde van Aggregatie.
  4. 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 withothers=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 withothers om uitgesloten gegevens te verkennen

Wanneer deze is opgenomen in een top-nested component, introduceert de withothers 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