Operátor top-nested

Operátor top-nested provádí hierarchickou agregaci a výběr hodnoty.

Představte si, že máte tabulku s informacemi o prodeji, jako jsou oblasti, prodejci a prodané částky. Operátor top-nested vám může pomoct zodpovědět složité otázky, například "What are the top five regions by sales, and who are the top three salespeople in each of those regions?" (Kolik je pět hlavních oblastí podle prodeje a kdo jsou tři největší prodejci v každé z těchto oblastí?".

Zdrojová data jsou rozdělená na základě kritérií nastavených v první top-nested klauzuli, jako je například oblast. Dále operátor vybere nejvyšší záznamy v každém oddílu pomocí agregace, například přidání částek prodeje. Každá další top-nested klauzule upřesní oddíly vytvořené předchozí klauzulí a vytvoří hierarchii přesnějších skupin.

Výsledkem je tabulka se dvěma sloupci na klauzuli. Jeden sloupec obsahuje hodnoty dělení, například oblast, zatímco druhý sloupec obsahuje výsledky výpočtu agregace, jako je součet prodejů.

Syntax

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

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
T string ✔️ Vstupní tabulkový výraz.
N int Počet nejvyšších hodnot, které mají být vráceny pro tuto úroveň hierarchie. Pokud tento parametr vynecháte, vrátí se všechny jedinečné hodnoty.
Výraz string ✔️ Výraz nad vstupním záznamem označující, která hodnota se má vrátit pro tuto úroveň hierarchie. Obvykle odkazuje na sloupec z T nebo zahrnuje výpočet, jako je bin() u sloupce. Volitelně můžete nastavit název výstupního sloupce na Name=Expr.
ConstExpr string Pokud je zadaný, pro každou úroveň hierarchie se přidá jeden záznam s hodnotou, která je agregací pro všechny záznamy, které se nedostaly na nejvyšší úroveň.
Agregace string Agregační funkce použitá u záznamů se stejnou hodnotou Výraz . Výsledek určuje nejvyšší záznamy. Viz Podporované agregační funkce. Volitelně můžete název výstupního sloupce nastavit na Název=agregace.

Podporované agregační funkce

Podporují se následující agregační funkce:

Poznámka

Podporuje se také jakákoli algebraická kombinace agregací.

Návraty

Tabulka se dvěma sloupci pro každou klauzuli Jeden sloupec obsahuje jedinečné hodnoty vypočítané pomocí výrazu a druhý sloupec zobrazuje výsledky získané z výpočtu agregace .

Zahrnout data z jiných sloupců

Ve výstupní tabulce se zobrazí pouze sloupce zadané jako top-nested klauzule Expr .

Zahrnutí všech hodnot sloupce na konkrétní úrovni:

  1. Nezadávejte hodnotu N.
  2. Jako hodnotu výrazu použijte název sloupce.
  3. Použijte Ignore=max(1) jako hodnotu Agregace.
  4. Odeberte nepotřebný Ignore sloupec s projektem pryč.

Příklad najdete v tématu Získání nejnovějších událostí v jednotlivých stavech s dalšími daty z jiných sloupců.

Otázky výkonu

Počet záznamů může exponenciálně narůstat s počtem top-nested klauzulí a růst záznamů je ještě rychlejší, pokud není zadán žádný N limit. Tento operátor může spotřebovávat značné množství prostředků.

Pokud je rozdělení agregace značně nerovnoměrné, omezte počet jedinečných hodnot, které se mají vrátit, zadáním N. Pak pomocí withothers= specifikace ConstExpr získejte údaje o hmotnosti všech ostatních případů.

Příklady

Začínáme s operátorem top-nested

Následující dotaz rozdělí tabulku podle StormEventsState sloupce a vypočítá celkovou zeměpisnou šířku pro každý stát. Dotaz vybere první dva státy s nejvyšším součtem zeměpisné šířky. V těchto dvou prvních stavech dotaz seskupí data podle Source a vybere první tři zdroje s nejvyšším součtem zeměpisné šířky. Pro každý ze tří hlavních zdrojů v prvních dvou státech dotaz seskupí EndLocation data podle EndLocation a vybere zdroj s nejvyšší zeměpisnou šířkou.

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.

Výstup

Stav aggregated_State Source aggregated_Source Koncová poloha aggregated_EndLocation
KANSAS 87771.2355000001 Donucovacími 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Veřejná 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Trénovaný spotter 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Veřejná 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Donucovacími 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Trénovaný spotter 13997.7124 CLAUDE 421.44

Vylepšení vnořených výsledků o data z jiného sloupce

Následující dotaz vychází z předchozího příkladu tím, že zavádí klauzuli navíc top-nested . V této nové klauzuli má absence číselné specifikace za následek extrakci všech jedinečných EventType hodnot napříč oddíly. Agregační max(1) funkce je pouze zástupný symbol a její výsledek je irelevantní, takže operátor výstupu projektu sloupec odebere Ignore . Výsledek zobrazí všechny typy událostí přidružené k dříve agregovaným datům.

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

Výstup

Stav aggregated_State Source aggregated_Source Koncová poloha aggregated_EndLocation Typ události
TEXAS 123400.51009999994 Veřejná 13650.907900000002 AMARILLO 246.25979999999998 Krupobití
TEXAS 123400.51009999994 Veřejná 13650.907900000002 AMARILLO 246.25979999999998 Bouřkový vítr
KANSAS 87771.235500000068 Veřejná 22855.6206 BUCKLIN 488.2457 Povodní
KANSAS 87771.235500000068 Veřejná 22855.6206 BUCKLIN 488.2457 Bouřkový vítr
KANSAS 87771.235500000068 Veřejná 22855.6206 BUCKLIN 488.2457 Krupobití
TEXAS 123400.51009999994 Trénovaný spotter 13997.712400000009 CLAUDE 421.44 Krupobití
KANSAS 87771.235500000068 Donucovacími 18744.823000000004 FT SCOTT 264.858 Blesková povodeň
KANSAS 87771.235500000068 Donucovacími 18744.823000000004 FT SCOTT 264.858 Bouřkový vítr
KANSAS 87771.235500000068 Donucovacími 18744.823000000004 FT SCOTT 264.858 Povodní
TEXAS 123400.51009999994 Donucovacími 37228.596599999961 PERRYTON 289.3178 Krupobití
... ... ... ... ... ...

Slouží ke zkoumání vyloučených dat.withothers

Při zahrnutí do top-nested klauzule zavádí specifikace další záznam, withothers který agreguje data vyloučená z hlavních výsledků. V následujícím dotazu se ve State sloupcích a aggregated_State vytvoří další záznam, který představuje souhrnnou zeměpisnou šířku všech států kromě Kansasu a Texasu. Sloupec EndLocation a aggregated_EndLocation navíc obsahuje dalších devět záznamů. Tyto záznamy zobrazují kombinovanou zeměpisnou šířku koncových umístění, která se nekvalifikují jako nejvyšší umístění v jednotlivých stavech a zdroji.

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)

Výstup

Stav aggregated_State Source aggregated_Source Koncové umístění aggregated_EndLocation
KANSAS 87771.2355000001 Donucovacími 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Veřejná 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Trénovaný spotter 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Veřejná 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Donucovacími 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Trénovaný spotter 13997.7124 CLAUDE 421.44
KANSAS 87771.2355000001 Donucovacími 18744.823 Všechna ostatní koncová umístění 18479.965
KANSAS 87771.2355000001 Veřejná 22855.6206 Všechna ostatní koncová umístění 22367.3749
KANSAS 87771.2355000001 Trénovaný spotter 21279.7083 Všechna ostatní koncová umístění 20890.9679
TEXAS 123400.5101 Veřejná 13650.9079 Všechna ostatní koncová umístění 13404.6481
TEXAS 123400.5101 Donucovacími 37228.5966 Všechna ostatní koncová umístění 36939.2788
TEXAS 123400.5101 Trénovaný spotter 13997.7124 Všechna ostatní koncová umístění 13576.2724
KANSAS 87771.2355000001 Všechna ostatní koncová umístění 24891.0836
TEXAS 123400.5101 Všechna ostatní koncová umístění 58523.2932000001
Všechny ostatní státy 1149279.5923 Všechna ostatní koncová umístění 1149279.5923

Následující dotaz ukazuje stejné výsledky pro první úroveň jako v předchozím příkladu.

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

Výstup

sum_BeginLat
1149279.5923

Řazení hierarchických výsledků

Aby bylo možné dosáhnout komplexního pořadí řazení, následující dotaz používá řazení na základě indexu pro každou hodnotu v rámci aktuální úrovně hierarchie pro jednotlivé skupiny. Toto řazení je zaměřeno na uspořádání výsledku podle konečné vnořené úrovně, v tomto případě 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

Výstup

Stav Source Koncová umístění endLocationSums Indexy
TEXAS Trénovaný spotter CLAUDE 421.44 0
TEXAS Trénovaný spotter AMARILLO 316.8892 1
TEXAS Trénovaný spotter DALHART 252.6186 2
TEXAS Trénovaný spotter PERRYTON 216.7826 3
TEXAS Donucovacími PERRYTON 289.3178 0
TEXAS Donucovacími LEAKEY 267.9825 1
TEXAS Donucovacími BRACKETTVILLE 264.3483 2
TEXAS Donucovacími GILMER 261.9068 3
KANSAS Trénovaný spotter SHARON SPGS 388.7404 0
KANSAS Trénovaný spotter ATWOOD 358.6136 1
KANSAS Trénovaný spotter LENORA 317.0718 2
KANSAS Trénovaný spotter SCOTT CITY 307.84 3
KANSAS Veřejná BUCKLIN 488.2457 0
KANSAS Veřejná ASHLAND 446.4218 1
KANSAS Veřejná OCHRANU 446.11 2
KANSAS Veřejná MEADE STATE PARK 371.1 3

Získání nejnovějších událostí pro jednotlivé stavy s dalšími daty z jiných sloupců

Následující dotaz ukazuje, jak načíst dvě nejnovější události pro každý stát USA spolu s relevantními podrobnostmi o událostech. Všimněte si použití max(1) funkce v určitých sloupcích identifikovaných parametrem Ignore*, která pomáhá při šíření dat prostřednictvím dotazu, aniž by byla vynucována logika výběru.

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.

Získání nejnovějších záznamů pro každou identitu s dalšími daty z jiných sloupců

Následující dotaz ukazuje, jak extrahovat nejnovější záznamy pro každou identitu, a vychází z konceptů představených v předchozím příkladu. První top-nested klauzule rozděluje data podle jedinečných hodnot .id Následující klauzule identifikuje dva nejnovější záznamy na základě hodnoty timestamp pro každý id. Další informace se připojují pomocí operátoru top-nested spolu s nespecifikovaným počtem a libovolnou max(1) agregací. Nakonec se pomocí operátoru project-away odeberou nepotřebné sloupce agregace.

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.

Výstup

id časové razítko další informace
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