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 ] of
Výraz [with
others
=
ConstExpr] by
Aggregation [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:
- Nezadávejte hodnotu N.
- Jako hodnotu výrazu použijte název sloupce.
- Použijte
Ignore=max(1)
jako hodnotu Agregace. - 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í with
others
=
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 StormEvents
State
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.with
others
Při zahrnutí do top-nested
klauzule zavádí specifikace další záznam, with
others
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 |
Související obsah
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro