Operatore top-nested

L'operatore esegue l'aggregazione top-nested gerarchica e la selezione di valori.

Si supponga di avere una tabella con informazioni sulle vendite, ad esempio aree, venditori e importi venduti. L'operatore top-nested può aiutarti a rispondere a domande complesse, ad esempio "Quali sono le prime cinque aree per vendita e chi sono i primi tre venditori in ognuna di queste aree?"

I dati di origine vengono partizionati in base ai criteri impostati nella prima top-nested clausola, ad esempio l'area. Successivamente, l'operatore seleziona i primi record in ogni partizione usando un'aggregazione, ad esempio l'aggiunta di importi delle vendite. Ogni clausola successiva top-nested affina le partizioni create dalla clausola precedente, creando una gerarchia di gruppi più precisi.

Il risultato è una tabella con due colonne per clausola. Una colonna contiene i valori di partizionamento, ad esempio region, mentre l'altra colonna contiene i risultati del calcolo dell'aggregazione, ad esempio la somma delle vendite.

Sintassi

T|top-nested [ N ] ofExpr [withothers=ConstExpr] byAggregation [asc | desc] [],
  top-nested ... ]

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
T string ✔️ Espressione tabulare di input.
N int Numero di valori principali da restituire per questo livello di gerarchia. Se omesso, vengono restituiti tutti i valori distinti.
Expr string ✔️ Espressione sul record di input che indica il valore da restituire per questo livello di gerarchia. In genere, fa riferimento a una colonna di T o implica un calcolo come bin() in una colonna. Facoltativamente, impostare un nome di colonna di output come Name=Expr.
ConstExpr string Se specificato, per ogni livello di gerarchia, viene aggiunto un record con il valore che corrisponde all'aggregazione su tutti i record che non lo hanno impostato nella parte superiore.
Aggregazione string Funzione di aggregazione applicata ai record con lo stesso valore Expr . Il risultato determina i record principali. Vedere Funzioni di aggregazione supportate. Facoltativamente, impostare un nome di colonna di output comeAggregazionenome=.

Funzioni di aggregazione supportate

Sono supportate le funzioni di aggregazione seguenti:

Nota

È supportata anche qualsiasi combinazione algebrica delle aggregazioni.

Restituisce

Tabella con due colonne per ogni clausola. Una colonna contiene valori univoci calcolati usando Expr e l'altra colonna mostra i risultati ottenuti dal calcolo aggregazione .

Includere dati da altre colonne

Nella tabella di output vengono visualizzate solo le colonne specificate come top-nested clausola Expr .

Per includere tutti i valori di una colonna a un livello specifico:

  1. Non specificare il valore di N.
  2. Usare il nome della colonna come valore di Expr.
  3. Usare Ignore=max(1) come valore di Aggregazione.
  4. Rimuovere la colonna non necessaria Ignore con project-away.

Per un esempio, vedere Ottenere gli eventi più recenti per stato con dati aggiuntivi di altre colonne.

Considerazioni sulle prestazioni

Il numero di record può aumentare in modo esponenziale con il numero di top-nested clausole e la crescita dei record è ancora più veloce se non viene specificato alcun limite N . Questo operatore può utilizzare una notevole quantità di risorse.

Se la distribuzione dell'aggregazione è notevolmente non uniforme, limitare il numero di valori distinti da restituire specificando N. Usare quindi la withothers= specifica ConstExpr per ottenere un'indicazione del peso di tutti gli altri casi.

Esempio

Introduzione all'operatore top-nested

La query seguente partiziona la StormEvents tabella in base alla State colonna e calcola la latitudine totale per ogni stato. La query seleziona i primi due stati con la somma della latitudine più alta. All'interno di questi primi due stati, la query raggruppa i dati Source in base a e seleziona le prime tre origini con la somma della latitudine più alta. Per ognuna delle prime tre origini nei primi due stati, la query raggruppa i dati in base EndLocation a e seleziona con EndLocation la somma della latitudine più alta.

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.

Output

State aggregated_State Source aggregated_Source EndLocation aggregated_EndLocation
KANSAS 87771.2355000001 Applicazione della legge 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Pubblici 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Trained Spotter 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Pubblici 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Applicazione della legge 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Trained Spotter 13997.7124 CLAUDE 421.44

Migliorare i risultati annidati in primo piano con i dati di un'altra colonna

La query seguente si basa sull'esempio precedente introducendo una clausola aggiuntiva top-nested . In questa nuova clausola, l'assenza di una specifica numerica comporta l'estrazione di tutti i valori distinti di EventType tra le partizioni. La max(1) funzione di aggregazione è semplicemente un segnaposto, rendendo irrilevante il risultato, quindi l'operatore project-away rimuove la Ignore colonna. Il risultato mostra tutti i tipi di evento associati ai dati aggregati in precedenza.

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

Output

State aggregated_State Source aggregated_Source EndLocation aggregated_EndLocation EventType
TEXAS 123400.51009999994 Pubblici 13650.907900000002 AMARILLO 246.25979999999998 Grandine
TEXAS 123400.51009999994 Pubblici 13650.907900000002 AMARILLO 246.25979999999998 Vento di tempesta
KANSAS 87771.235500000068 Pubblici 22855.6206 BUCKLIN 488.2457 Alluvione
KANSAS 87771.235500000068 Pubblici 22855.6206 BUCKLIN 488.2457 Vento di tempesta
KANSAS 87771.235500000068 Pubblici 22855.6206 BUCKLIN 488.2457 Grandine
TEXAS 123400.51009999994 Trained Spotter 13997.712400000009 CLAUDE 421.44 Grandine
KANSAS 87771.235500000068 Applicazione della legge 18744.823000000004 FT SCOTT 264.858 Piena improvvisa
KANSAS 87771.235500000068 Applicazione della legge 18744.823000000004 FT SCOTT 264.858 Vento di tempesta
KANSAS 87771.235500000068 Applicazione della legge 18744.823000000004 FT SCOTT 264.858 Alluvione
TEXAS 123400.51009999994 Applicazione della legge 37228.596599999961 PERRYTON 289.3178 Grandine
... ... ... ... ... ...

Usare withothers per esplorare i dati esclusi

Quando viene incorporata all'interno di una top-nested clausola, la withothers specifica introduce un record aggiuntivo che aggrega i dati esclusi dai risultati principali. Nella query seguente viene creato un record aggiuntivo nelle State colonne e aggregated_State che rappresenta la latitudine collettiva di tutti gli stati tranne Kansas e Texas. Inoltre, la EndLocation colonna e aggregated_EndLocation dispone di nove record aggiuntivi. Questi record mostrano la latitudine combinata delle posizioni finali che non sono qualificate come posizione superiore all'interno di ogni stato e origine.

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)

Output

State aggregated_State Source aggregated_Source EndLocation aggregated_EndLocation
KANSAS 87771.2355000001 Applicazione della legge 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Pubblici 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Trained Spotter 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Pubblici 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Applicazione della legge 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Trained Spotter 13997.7124 CLAUDE 421.44
KANSAS 87771.2355000001 Applicazione della legge 18744.823 Tutte le altre posizioni finali 18479.965
KANSAS 87771.2355000001 Pubblici 22855.6206 Tutte le altre posizioni finali 22367.3749
KANSAS 87771.2355000001 Trained Spotter 21279.7083 Tutte le altre posizioni finali 20890.9679
TEXAS 123400.5101 Pubblici 13650.9079 Tutte le altre posizioni finali 13404.6481
TEXAS 123400.5101 Applicazione della legge 37228.5966 Tutte le altre posizioni finali 36939.2788
TEXAS 123400.5101 Trained Spotter 13997.7124 Tutte le altre posizioni finali 13576.2724
KANSAS 87771.2355000001 Tutte le altre posizioni finali 24891.0836
TEXAS 123400.5101 Tutte le altre posizioni finali 58523.2932000001
Tutti gli altri stati 1149279.5923 Tutte le altre posizioni finali 1149279.5923

La query seguente mostra gli stessi risultati per il primo livello usato nell'esempio precedente.

StormEvents
| where State !in ('TEXAS', 'KANSAS')
| summarize sum(BeginLat)

Output

sum_BeginLat
1149279.5923

Ordinare i risultati gerarchici

Per ottenere un ordinamento completo, la query seguente usa l'ordinamento basato su indice per ogni valore all'interno del livello di gerarchia corrente, per gruppo. Questo ordinamento è orientato alla disposizione del risultato in base al livello annidato finale, in questo caso .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

Output

State Source EndLocations endLocationSums Indici
TEXAS Trained Spotter CLAUDE 421.44 0
TEXAS Trained Spotter AMARILLO 316.8892 1
TEXAS Trained Spotter DALHART 252.6186 2
TEXAS Trained Spotter PERRYTON 216.7826 3
TEXAS Applicazione della legge PERRYTON 289.3178 0
TEXAS Applicazione della legge LEAKEY 267.9825 1
TEXAS Applicazione della legge BRACKETTVILLE 264.3483 2
TEXAS Applicazione della legge GILMER 261.9068 3
KANSAS Trained Spotter SHARON SPGS 388.7404 0
KANSAS Trained Spotter ATWOOD 358.6136 1
KANSAS Trained Spotter LENORA 317.0718 2
KANSAS Trained Spotter SCOTT CITY 307.84 3
KANSAS Pubblici BUCKLIN 488.2457 0
KANSAS Pubblici ASHLAND 446.4218 1
KANSAS Pubblici PROTEZIONE 446.11 2
KANSAS Pubblici MEADE STATE PARK 371.1 3

Ottenere gli eventi più recenti per stato con dati aggiuntivi da altre colonne

La query seguente illustra come recuperare i due eventi più recenti per ogni stato degli Stati Uniti insieme ai dettagli dell'evento pertinenti. Si noti l'uso di all'interno di max(1) determinate colonne, identificate da Ignore*, che facilita la propagazione dei dati tramite la query senza imporre alcuna logica di selezione.

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.

Ottenere i record più recenti per identità con dati aggiuntivi da altre colonne

La query seguente illustra come estrarre i record più recenti per identità e si basa sui concetti introdotti nell'esempio precedente. La prima top-nested clausola partiziona i dati in base a valori distinti di id. La clausola successiva identifica i due record più recenti in base all'oggetto timestamp per ogni idoggetto . Altre informazioni vengono aggiunte usando un operatore insieme a un top-nested conteggio non specificato e all'aggregazione arbitraria max(1) . Infine, le colonne di aggregazione non necessarie vengono rimosse usando l'operatore 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.

Output

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