Sdílet prostřednictvím


Operátor top-nested

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft 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:

  1. Nezadávejte hodnotu N.
  2. Jako hodnotu výrazu použijte název sloupce.
  3. Použije Ignore=max(1) se jako hodnota Agregace.
  4. 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

Snímek obrazovky s prvních pěti stavy s nejvíce poškozenými vlastnostmi a všechny ostatní státy seskupené samostatně vykreslené jako výsečový graf

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 idz nich identifikuje dva nejnovější záznamy na timestampzá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