Operátor top-nested
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Operátor top-nested
provádí hierarchickou agregaci a výběr hodnot.
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 "Co jsou prvních pět oblastí podle prodeje a kdo jsou v každé z těchto oblastí nejlepšími třemi prodejci?".
Zdrojová data jsou rozdělena na základě kritérií nastavených v první top-nested
klauzuli, jako je například oblast. V dalším kroku operátor vybere nejvyšší záznamy v každém oddílu pomocí agregace, jako je například přidání částek prodeje. Každá další top-nested
klauzule zpřesňuje oddíly vytvořené předchozí klauzulí a vytváří 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ů.
Syntaxe
T top-nested
|
[ N ] of
Výraz [with
=
others
ConstExpr] by
Agregace [asc
| desc
] [,
top-nested
... ]
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
T | string |
✔️ | Vstupní tabulkový výraz. |
N | int |
Počet nejvyšších hodnot, které se mají vrátit pro tuto úroveň hierarchie. Pokud je tento argument vynechán, vrátí se všechny jedinečné hodnoty. | |
Výraz | string |
✔️ | Výraz nad vstupním záznamem označující hodnotu, která se má vrátit pro tuto úroveň hierarchie. Obvykle odkazuje na sloupec z T nebo zahrnuje výpočet, jako je bin() ve sloupci. Volitelně můžete nastavit název výstupního sloupce jako Název = výrazu. |
ConstExpr | string |
Pokud je zadaná hodnota pro každou úroveň hierarchie, přidá se jeden záznam s hodnotou, která je agregací pro všechny záznamy, které ho nevytvořily na nejvyšší úroveň. | |
Agregace | string |
Agregační funkce použitá u záznamů se stejnou hodnotou výrazu . Výsledek určuje nejlepší záznamy. Viz Podporované agregační funkce. Volitelně můžete nastavit název výstupního sloupce jako Agregace názvů = . |
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 .
Použití klauzule with
others
Použití operátoru top-nested
s with
others
přidanou možností zobrazit kontext hlavního obsahu v širší sadě dat. Vyhodnocení dat tímto způsobem je užitečné při vizuálním vykreslování dat.
Zahrnutí dat z jiných sloupců
Ve výstupní tabulce se zobrazí pouze sloupce zadané jako top-nested
výraz klauzule.
Zahrnutí všech hodnot sloupce na konkrétní úrovni:
- Nezadávejte hodnotu N.
- Jako hodnotu výrazu použijte název sloupce.
- Použije
Ignore=max(1)
se jako hodnota Agregace. - Odeberte nepotřebný
Ignore
sloupec s projektem pryč.
Příklad najdete v tématu Poslední události na stav s jinými daty sloupců.
Důležité informace o výkonu
Počet záznamů může exponenciálně růst s počtem top-nested
klauzulí a růst záznamů je ještě rychlejší, pokud není zadaný parametr N . Tento operátor může spotřebovávat značné množství prostředků.
Pokud je rozdělení agregace nepravidelné, omezte počet jedinečných hodnot tak, aby se vrátil zadáním N. Pak pomocí klauzule with
others
=
ConstExpr získejte představu o hmotnosti všech ostatních případů.
Příklady
Top damaged states, event types, and end locations by property damage
Následující dotaz rozdělí StormEvents
tabulku podle State
sloupce a vypočítá celkové poškození majetku pro každý stav. Dotaz vybere nejlepší dva stavy s největším množstvím poškození majetku. V těchto dvou hlavních stavech dotaz seskupí data podle EventType
a vybere první tři typy událostí s největším poškozením. Potom dotaz seskupí EndLocation
data podle EndLocation
a vybere nejvyšší poškození. Ve výsledcích se zobrazí pouze jedna EndLocation
hodnota, pravděpodobně z důvodu velké povahy událostí bouře nebo nekomentování koncového umístění.
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
Výstup
State | Typ události | EndLocation | StateTotalDamage | EventTypeTotalDamage | EndLocationDamage |
---|---|---|---|---|---|
KALIFORNIE | Ničivý požár | 1445937600 | 1326315000 | 1326315000 | |
KALIFORNIE | HighWind | 1445937600 | 61320000 | 61320000 | |
KALIFORNIE | Tok úlomků | 1445937600 | 48000000 | 48000000 | |
OKLAHOMA | IceStorm | 915470300 | 826000000 | 826000000 | |
OKLAHOMA | WinterStorm | 915470300 | 40027000 | 40027000 | |
OKLAHOMA | Povodeň | OBCHOD | 915470300 | 21485000 | 20000000 |
Top five states with property damage with
others
grouped
Následující příklad používá top-nested
operátor k identifikaci prvních pěti států s největším poškozením majetku a pomocí with
others
klauzule seskupí poškozenou vlastnost pro všechny ostatní státy. Potom vizualizuje poškozenou vlastnost pro prvních pět stavů a všechny ostatní stavy jako piechart
použití render
příkazu.
StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart
Výstup
Nejnovější události na stav s jinými daty sloupců
Následující dotaz načte dvě nejnovější události pro každý stav USA s příslušnými podrobnostmi o události. Používá max(1)
se v určitých sloupcích k šíření dat bez použití logiky výběru s nejvyšším vnořením. Vygenerované Ignore
sloupce agregace se odeberou pomocí 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.
Nejnovější záznamy na identitu s jinými daty sloupců
Následující top-nested
příklad extrahuje nejnovější záznamy na identitu a vychází z konceptů zavedených v předchozím příkladu. První top-nested
klauzule rozděluje data podle jedinečných hodnot, které id
se používají Ignore0=max(1)
jako zástupný symbol. Pro každou id
z nich identifikuje dva nejnovější záznamy na timestamp
základě . Další informace se připojují pomocí operátoru top-nested
bez zadání počtu a použití Ignore2=max(1)
jako zástupného symbolu. 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 | 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 |