Condividi tramite


Operatore top-nested

Si applica a: ✅Microsoft Fabric✅Azure Esplora dati Azure MonitorMicrosoft Sentinel

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ò aiutare 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 record principali 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 contiene i risultati del calcolo dell'aggregazione, ad esempio la somma delle vendite.

Sintassi

T top-nested | [ N ] of Expr [with others = ConstExpr] by Aggregation [asc | desc] [],
  top-nested ... ]

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio 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 quale valore restituire per questo livello di gerarchia. In genere, fa riferimento a una colonna di T o prevede un calcolo come bin() in una colonna. Facoltativamente, impostare un nome di colonna di output come Nome = 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 eseguito all'inizio.
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 come Aggregazione dei nomi = .

Funzioni di aggregazione supportate

Sono supportate le funzioni di aggregazione seguenti:

Nota

È supportata anche qualsiasi combinazione algebrica delle aggregazioni.

Valori restituiti

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 .

Utilizzo della with others clausola

L'uso dell'operatore top-nested con with others consente di visualizzare il contenuto principale contestualizzato in un set di dati più ampio. La valutazione dei dati in questo modo è utile quando si esegue il rendering visivo dei dati.

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 Eventi più recenti per stato con altri dati di colonna.

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 il parametro N non viene specificato. Questo operatore può utilizzare una notevole quantità di risorse.

Se la distribuzione delle aggregazioni è irregolare, limitare il numero di valori distinti da restituire specificando N. Usare quindi la with others = clausola ConstExpr per ottenere un'idea del peso di tutti gli altri casi.

Esempi

Principali stati danneggiati, tipi di eventi e posizioni finali per danni alle proprietà

La query seguente partiziona la StormEvents tabella in base alla State colonna e calcola il danno totale della proprietà per ogni stato. La query seleziona i due stati principali con il maggior numero di danni alle proprietà. All'interno di questi due stati principali, la query raggruppa i dati EventType in base a e seleziona i primi tre tipi di evento con il maggior danno. La query raggruppa quindi i dati EndLocation in base a e seleziona con EndLocation il danno più alto. Nei risultati viene visualizzato un EndLocation solo valore, probabilmente a causa della grande natura degli eventi della tempesta o non documentando la posizione finale.

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

Output

Provincia EventType EndLocation StateTotalDamage EventTypeTotalDamage EndLocationDamage
CALIFORNIA Wildfire 1445937600 1326315000 1326315000
CALIFORNIA HighWind 1445937600 61320000 61320000
CALIFORNIA DebrisFlow 1445937600 48000000 48000000
OKLAHOMA IceStorm 915470300 826000000 826000000
OKLAHOMA WinterStorm 915470300 40027000 40027000
OKLAHOMA Alluvione PIATTAFORMA 915470300 21485000 20000000

Primi cinque stati con danni alla with others proprietà raggruppati

Nell'esempio seguente viene utilizzato l'operatore top-nested per identificare i primi cinque stati con il maggior numero di danni alle proprietà e viene utilizzata la with others clausola per raggruppare la proprietà danneggiata per tutti gli altri stati. Visualizza quindi la proprietà danneggiata per i primi cinque stati e tutti gli altri stati come piechart utilizzando il render comando .

StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart  

Output

Screenshot dei primi cinque stati con la proprietà più danneggiata e tutti gli altri stati raggruppati separatamente come grafico a torta.

Eventi più recenti per stato con altri dati di colonna

La query seguente recupera i due eventi più recenti per ogni stato degli Stati Uniti con i dettagli dell'evento pertinenti. max(1) Usa all'interno di determinate colonne per propagare i dati senza usare la logica di selezione nidificata dall'alto. Le colonne di aggregazione generate Ignore vengono rimosse tramite project-away.

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.

Record più recenti per identità con altri dati di colonna

L'esempio seguente top-nested estrae 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 utilizzando Ignore0=max(1) come segnaposto. Per ogni id, identifica i due record più recenti in base all'oggetto timestamp. Altre informazioni vengono aggiunte usando un top-nested operatore senza specificare un conteggio e utilizzando Ignore2=max(1) come segnaposto. 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