top-nested operator

Der top-nested Operator führt hierarchische Aggregation und Wertauswahl aus.

Stellen Sie sich vor, Sie verfügen über eine Tabelle mit Verkaufsinformationen wie Regionen, Vertriebsmitarbeitern und verkauften Beträgen. Der top-nested Betreiber kann Ihnen dabei helfen, komplexe Fragen zu beantworten, wie z. B. "Welche fünf Regionen sind nach Verkäufen und wer sind die drei besten Vertriebsmitarbeiter in jeder dieser Regionen?"

Die Quelldaten werden basierend auf den Kriterien partitioniert, die in der ersten top-nested Klausel festgelegt sind, z. B. region. Als Nächstes wählt der Operator die obersten Datensätze in jeder Partition mithilfe einer Aggregation aus, z. B. durch Hinzufügen von Umsatzbeträgen. Jede nachfolgende top-nested Klausel verfeinern die Partitionen, die von der vorherigen Klausel erstellt wurden, und erstellt eine Hierarchie präziserer Gruppen.

Das Ergebnis ist eine Tabelle mit zwei Spalten pro Klausel. Eine Spalte enthält die Partitionierungswerte, z. B. Region, während die andere Spalte die Ergebnisse der Aggregationsberechnung enthält, z. B. die Summe der Verkäufe.

Syntax

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

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich Beschreibung
T string ✔️ Der tabellarische Eingabeausdruck.
N int Die Anzahl der obersten Werte, die für diese Hierarchieebene zurückgegeben werden sollen. Wenn nicht angegeben, werden alle eindeutigen Werte zurückgegeben.
Expr string ✔️ Ein Ausdruck über dem Eingabedatensatz, der angibt, welcher Wert für diese Hierarchieebene zurückgegeben werden soll. In der Regel bezieht es sich auf eine Spalte aus T oder umfasst eine Berechnung wie bin() für eine Spalte. Legen Sie optional den Namen einer Ausgabespalte auf Name=Expr fest.
ConstExpr string Falls angegeben, wird für jede Hierarchieebene ein Datensatz mit dem Wert hinzugefügt, der die Aggregation über alle Datensätze darstellt, die es nicht nach oben schaffen.
Aggregation string Die Aggregationsfunktion, die auf Datensätze mit demselben Expr-Wert angewendet wird. Das Ergebnis bestimmt die wichtigsten Datensätze. Weitere Informationen finden Sie unter Unterstützte Aggregationsfunktionen. Legen Sie optional einen Ausgabespaltennamen auf Name=Aggregation fest.

Unterstützte Aggregationsfunktionen

Die folgenden Aggregationsfunktionen werden unterstützt:

Hinweis

Jede algebraische Kombination der Aggregationen wird ebenfalls unterstützt.

Gibt zurück

Eine Tabelle mit zwei Spalten für jede Klausel. Eine Spalte enthält eindeutige Werte, die mit Expr berechnet wurden, und die andere Spalte zeigt die Ergebnisse der Aggregationsberechnung an.

Einschließen von Daten aus anderen Spalten

In der Ausgabetabelle werden nur Spalten angezeigt, die als top-nestedExpr-Klausel angegeben sind.

So schließen Sie alle Werte einer Spalte auf einer bestimmten Ebene ein:

  1. Geben Sie nicht den Wert von N an.
  2. Verwenden Sie den Spaltennamen als Wert von Expr.
  3. Verwenden Sie Ignore=max(1) als Wert von Aggregation.
  4. Entfernen Sie die unnötige Ignore Spalte mit project-away.

Ein Beispiel finden Sie unter Abrufen der neuesten Ereignisse pro Zustand mit zusätzlichen Daten aus anderen Spalten.

Überlegungen zur Leistung

Die Anzahl der Datensätze kann exponentiell mit der Anzahl der Klauseln zunehmen, und das Wachstum des top-nested Datensatzes ist noch schneller, wenn kein N-Limit angegeben wird. Dieser Operator kann eine beträchtliche Menge an Ressourcen verbrauchen.

Wenn die Verteilung der Aggregation erheblich ungleichmäßig ist, begrenzen Sie die Anzahl der zurückzugebenden unterschiedlichen Werte, indem Sie N angeben. Verwenden Sie dann die withothers=ConstExpr-Spezifikation , um eine Angabe für die Gewichtung aller anderen Fälle zu erhalten.

Beispiele

Erste Schritte mit dem top-nested Operator

Die folgende Abfrage partitioniert die StormEvents Tabelle nach der State Spalte und berechnet die Gesamtbreite für jeden Zustand. Die Abfrage wählt die beiden obersten Zustände mit der höchsten Breitensumme aus. Innerhalb dieser beiden obersten Zustände gruppiert die Abfrage die Daten nach Source und wählt die drei wichtigsten Quellen mit der höchsten Breitensumme aus. Für jede der drei wichtigsten Quellen in den beiden obersten Zuständen gruppiert die Abfrage die Daten EndLocation nach und wählt die mit der EndLocation höchsten Breitensumme aus.

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.

Ausgabe

State aggregated_State Quelle aggregated_Source EndLocation aggregated_EndLocation
KANSAS 87771.2355000001 Strafverfolgungsbehörden 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Öffentlich 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Ausgebildeter „Spotter“ 21279.7083 SCHARON SPGS 388.7404
TEXAS 123400.5101 Öffentlich 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Strafverfolgungsbehörden 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Ausgebildeter „Spotter“ 13997.7124 CLAUDE 421.44

Verbessern der am besten geschachtelten Ergebnisse mit Daten aus einer anderen Spalte

Die folgende Abfrage baut auf dem vorherigen Beispiel auf, indem eine zusätzliche top-nested Klausel eingeführt wird. In dieser neuen Klausel führt das Fehlen einer numerischen Spezifikation dazu, dass alle unterschiedlichen Werte von EventType partitionsübergreifend extrahiert werden. Die max(1) Aggregationsfunktion ist lediglich ein Platzhalter, der ihr Ergebnis irrelevant macht, sodass der Projekt-Away-Operator die Ignore Spalte entfernt. Das Ergebnis zeigt alle Ereignistypen an, die den zuvor aggregierten Daten zugeordnet sind.

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

Ausgabe

State aggregated_State Quelle aggregated_Source EndLocation aggregated_EndLocation EventType
TEXAS 123400.51009999994 Öffentlich 13650.907900000002 AMARILLO 246.25979999999998 Hagel
TEXAS 123400.51009999994 Öffentlich 13650.907900000002 AMARILLO 246.25979999999998 Sturm
KANSAS 87771.235500000068 Öffentlich 22855.6206 BUCKLIN 488.2457 Hochwasser
KANSAS 87771.235500000068 Öffentlich 22855.6206 BUCKLIN 488.2457 Sturm
KANSAS 87771.235500000068 Öffentlich 22855.6206 BUCKLIN 488.2457 Hagel
TEXAS 123400.51009999994 Ausgebildeter „Spotter“ 13997.712400000009 CLAUDE 421.44 Hagel
KANSAS 87771.235500000068 Strafverfolgungsbehörden 18744.823000000004 FT SCOTT 264.858 Überschwemmung
KANSAS 87771.235500000068 Strafverfolgungsbehörden 18744.823000000004 FT SCOTT 264.858 Sturm
KANSAS 87771.235500000068 Strafverfolgungsbehörden 18744.823000000004 FT SCOTT 264.858 Hochwasser
TEXAS 123400.51009999994 Strafverfolgungsbehörden 37228.596599999961 PERRYTON 289.3178 Hagel
... ... ... ... ... ...

Verwenden Sie withothers zum Untersuchen ausgeschlossener Daten

Wenn sie in eine top-nested Klausel integriert wird, führt die withothers Spezifikation einen zusätzlichen Datensatz ein, der Daten aggregiert, die aus den top-Ergebnissen ausgeschlossen sind. In der folgenden Abfrage wird in den Spalten und aggregated_State ein zusätzlicher Datensatz erstellt, der State den kollektiven Breitengrad aller Staaten mit Ausnahme von Kansas und Texas darstellt. Darüber hinaus verfügen die EndLocation Spalte und aggregated_EndLocation über zusätzliche neun Datensätze. Diese Datensätze zeigen den kombinierten Breitengrad der Endstandorte an, die nicht als oberster Standort in jedem Zustand und jeder Quelle qualifiziert sind.

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)

Ausgabe

State aggregated_State Quelle aggregated_Source EndLocation aggregated_EndLocation
KANSAS 87771.2355000001 Strafverfolgungsbehörden 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Öffentlich 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Ausgebildeter „Spotter“ 21279.7083 SCHARON SPGS 388.7404
TEXAS 123400.5101 Öffentlich 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Strafverfolgungsbehörden 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Ausgebildeter „Spotter“ 13997.7124 CLAUDE 421.44
KANSAS 87771.2355000001 Strafverfolgungsbehörden 18744.823 Alle anderen Endspeicherorte 18479.965
KANSAS 87771.2355000001 Öffentlich 22855.6206 Alle anderen Endspeicherorte 22367.3749
KANSAS 87771.2355000001 Ausgebildeter „Spotter“ 21279.7083 Alle anderen Endspeicherorte 20890.9679
TEXAS 123400.5101 Öffentlich 13650.9079 Alle anderen Endspeicherorte 13404.6481
TEXAS 123400.5101 Strafverfolgungsbehörden 37228.5966 Alle anderen Endspeicherorte 36939.2788
TEXAS 123400.5101 Ausgebildeter „Spotter“ 13997.7124 Alle anderen Endspeicherorte 13576.2724
KANSAS 87771.2355000001 Alle anderen Endspeicherorte 24891.0836
TEXAS 123400.5101 Alle anderen Endspeicherorte 58523.2932000001
Alle anderen Zustände 1149279.5923 Alle anderen Endspeicherorte 1149279.5923

Die folgende Abfrage zeigt die gleichen Ergebnisse für die erste Ebene, die im vorherigen Beispiel verwendet wurde.

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

Ausgabe

sum_BeginLat
1149279.5923

Hierarchische Ergebnisse sortieren

Um eine umfassende Sortierreihenfolge zu erreichen, verwendet die folgende Abfrage die indexbasierte Sortierung für jeden Wert innerhalb der aktuellen Hierarchieebene pro Gruppe. Diese Sortierung ist darauf ausgerichtet, das Ergebnis entsprechend der ultimativen geschachtelten Ebene anzuordnen, in diesem Fall die 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

Ausgabe

State Quelle EndLocations endLocationSums Indizes
TEXAS Ausgebildeter „Spotter“ CLAUDE 421.44 0
TEXAS Ausgebildeter „Spotter“ AMARILLO 316.8892 1
TEXAS Ausgebildeter „Spotter“ DALHART 252.6186 2
TEXAS Ausgebildeter „Spotter“ PERRYTON 216.7826 3
TEXAS Strafverfolgungsbehörden PERRYTON 289.3178 0
TEXAS Strafverfolgungsbehörden LEAKEY 267.9825 1
TEXAS Strafverfolgungsbehörden BRACKETTVILLE 264.3483 2
TEXAS Strafverfolgungsbehörden GILMER 261.9068 3
KANSAS Ausgebildeter „Spotter“ SCHARON SPGS 388.7404 0
KANSAS Ausgebildeter „Spotter“ ATWOOD 358.6136 1
KANSAS Ausgebildeter „Spotter“ LENORA 317.0718 2
KANSAS Ausgebildeter „Spotter“ SCOTT CITY 307.84 3
KANSAS Öffentlich BUCKLIN 488.2457 0
KANSAS Öffentlich ASHLAND 446.4218 1
KANSAS Öffentlich SCHUTZ 446.11 2
KANSAS Öffentlich MEADE STATE PARK 371.1 3

Abrufen der neuesten Ereignisse pro Status mit zusätzlichen Daten aus anderen Spalten

Die folgende Abfrage veranschaulicht, wie die beiden letzten Ereignisse für jeden US-Bundesstaat zusammen mit relevanten Ereignisdetails abgerufen werden. Beachten Sie die Verwendung von innerhalb bestimmter Spalten, die durch identifiziert werdenIgnore*, wodurch die Weitergabe von max(1) Daten über die Abfrage unterstützt wird, ohne eine Auswahllogik auferlegen zu müssen.

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.

Abrufen der neuesten Datensätze pro Identität mit zusätzlichen Daten aus anderen Spalten

Die folgende Abfrage veranschaulicht, wie Die neuesten Datensätze pro Identität extrahiert werden, und baut auf den im vorherigen Beispiel vorgestellten Konzepten auf. Die erste top-nested -Klausel partitioniert die Daten nach unterschiedlichen Werten von id. Die nachfolgende Klausel identifiziert die beiden letzten Datensätze basierend auf dem timestamp für jeden id. Andere Informationen werden mithilfe eines Operators zusammen mit einer top-nested nicht angegebenen Anzahl und der beliebigen max(1) Aggregation angefügt. Schließlich werden unnötige Aggregationsspalten mithilfe des project-away -Operators entfernt.

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.

Ausgabe

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