Udostępnij za pośrednictwem


operator top-nested

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Operator top-nested wykonuje wybór agregacji hierarchicznej i wartości.

Załóżmy, że masz tabelę zawierającą informacje o sprzedaży, takie jak regiony, sprzedawcy i sprzedane kwoty. top-nested Operator może pomóc ci odpowiedzieć na złożone pytania, takie jak "Jakie są pięć najważniejszych regionów według sprzedaży i którzy są trzema najlepszymi sprzedawcami w każdym z tych regionów?"

Dane źródłowe są partycjonowane na podstawie kryteriów określonych w pierwszej top-nested klauzuli, takiej jak region. Następnie operator wybiera najlepsze rekordy w każdej partycji przy użyciu agregacji, na przykład dodając kwoty sprzedaży. Każda kolejna top-nested klauzula uściśli partycje utworzone przez poprzednią klauzulę, tworząc hierarchię bardziej precyzyjnych grup.

Wynik jest tabelą z dwiema kolumnami na klauzulę. Jedna kolumna zawiera wartości partycjonowania, takie jak region, podczas gdy druga kolumna przechowuje wyniki obliczeń agregacji, takich jak suma sprzedaży.

Składnia

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

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Type Wymagania opis
T string ✔️ Wyrażenie tabelaryczne danych wejściowych.
N int Liczba pierwszych wartości, które mają zostać zwrócone dla tego poziomu hierarchii. W przypadku pominięcia zwracane są wszystkie odrębne wartości.
Wyrażenie string ✔️ Wyrażenie na rekord wejściowy wskazujący, która wartość ma być zwracana dla tego poziomu hierarchii. Zazwyczaj odwołuje się on do kolumny z języka T lub obejmuje obliczenie, takie jak bin() w kolumnie. Opcjonalnie ustaw nazwę kolumny wyjściowej jako Wyrażenie nazwy = .
ConstExpr string Jeśli zostanie określony, dla każdego poziomu hierarchii zostanie dodany jeden rekord z wartością agregacji dla wszystkich rekordów, które nie zostały dodane do góry.
Agregacja string Funkcja agregacji zastosowana do rekordów z tą samą wartością wyrażenia . Wynik określa najważniejsze rekordy. Zobacz Obsługiwane funkcje agregacji. Opcjonalnie ustaw nazwę kolumny wyjściowej jako Agregacja nazw = .

Obsługiwane funkcje agregacji

Obsługiwane są następujące funkcje agregacji:

Uwaga

Obsługiwane jest również dowolne kombinacje algebraiczne agregacji.

Zwraca

Tabela z dwiema kolumnami dla każdej klauzuli. Jedna kolumna zawiera unikatowe wartości obliczone przy użyciu wyrażenia, a druga kolumna zawiera wyniki uzyskane z obliczenia agregacji.

Używanie klauzuli with others

top-nested Za pomocą operatora z with others dodamy możliwość wyświetlania najwyższej zawartości kontekstowej w szerszym zestawie danych. Ocena danych w ten sposób jest cenna podczas wizualnego renderowania danych.

Dołączanie danych z innych kolumn

W tabeli wyjściowej są wyświetlane tylko kolumny określone jako top-nested wyrażenie klauzuli.

Aby uwzględnić wszystkie wartości kolumny na określonym poziomie:

  1. Nie określaj wartości N.
  2. Użyj nazwy kolumny jako wartości Expr.
  3. Użyj Ignore=max(1) jako wartości Agregacja.
  4. Usuń niepotrzebną Ignore kolumnę z kolumną project-away.

Aby zapoznać się z przykładem, zobacz Najnowsze zdarzenia na stan z innymi danymi kolumn.

Zagadnienia dotyczące wydajności

Liczba rekordów może rosnąć wykładniczo z liczbą top-nested klauzul, a wzrost rekordu jest jeszcze szybszy, jeśli nie określono parametru N . Ten operator może zużywać znaczną ilość zasobów.

Jeśli rozkład agregacji jest nieregularny, ogranicz liczbę unikatowych wartości do zwrócenia, określając N. Następnie użyj klauzuli with others = ConstExpr, aby uzyskać poczucie wagi wszystkich innych przypadków.

Przykłady

Uszkodzone stany, typy zdarzeń i lokalizacje końcowe według uszkodzeń mienia

Poniższe zapytanie partycjonuje tabelę StormEvents według State kolumny i oblicza łączne uszkodzenie właściwości dla każdego stanu. Zapytanie wybiera dwa pierwsze stany z największą ilością uszkodzeń właściwości. W tych dwóch pierwszych stanach zapytanie grupuje dane EventType według i wybiera trzy najważniejsze typy zdarzeń z największą szkodą. Następnie zapytanie grupuje dane EndLocation według i wybiera element EndLocation o najwyższych uszkodzeniach. W wynikach pojawia się tylko jedna EndLocation wartość, prawdopodobnie ze względu na duży charakter zdarzeń burzy lub nie dokumentując lokalizacji końcowej.

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

Wyjście

Stan EventType EndLocation StateTotalDamage EventTypeTotalDamage EndLocationDamage
KALIFORNIA Pożary lasów 1445937600 1326315000 1326315000
KALIFORNIA HighWind 1445937600 61320000 61320000
KALIFORNIA Przepływ gruzu 1445937600 48000000 48000000
OKLAHOMA Burza lodowa 915470300 826000000 826000000
OKLAHOMA Burza zimowa 915470300 40027000 40027000
OKLAHOMA Powódź HANDEL 915470300 21485000 20000000

Pięć pierwszych stanów z uszkodzeniem with others nieruchomości pogrupowane

W poniższym przykładzie top-nested użyto operatora , aby zidentyfikować pięć pierwszych stanów z największą szkodą dla właściwości i używa klauzuli with others do grupowania uszkodzonej właściwości dla wszystkich innych stanów. Następnie wizualizuje uszkodzoną piechart właściwość dla pięciu pierwszych stanów i wszystkich innych stanów jako polecenie .render

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

Wyjście

Zrzut ekranu przedstawiający pięć pierwszych stanów z największą uszkodzoną właściwością, a wszystkie inne stany pogrupowane oddzielnie jako wykres kołowy.

Najnowsze zdarzenia na stan z innymi danymi kolumn

Poniższe zapytanie pobiera dwa ostatnie zdarzenia dla każdego stanu USA z odpowiednimi szczegółami zdarzenia. Używa max(1) ona w niektórych kolumnach do propagacji danych bez używania logiki wyboru zagnieżdżonej u góry. Wygenerowane Ignore kolumny agregacji są usuwane przy użyciu polecenia 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.

Najnowsze rekordy na tożsamość z innymi danymi kolumn

top-nested Poniższy przykład wyodrębnia najnowsze rekordy na tożsamość i opiera się na pojęciach przedstawionych w poprzednim przykładzie. Pierwsza top-nested klauzula dzieli dane na partycje według odrębnych id wartości użycia Ignore0=max(1) jako symbol zastępczy. Dla każdego idelementu identyfikuje dwa najnowsze rekordy na podstawie elementu timestamp. Inne informacje są dołączane przy użyciu top-nested operatora bez określania liczby i użycia Ignore2=max(1) jako symbolu zastępczego. Na koniec niepotrzebne kolumny agregacji są usuwane przy użyciu project-away operatora .

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.

Wyjście

identyfikator 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 100