Bagikan melalui


operator top-nested

Operator top-nested melakukan agregasi hierarkis dan pemilihan nilai.

Bayangkan Anda memiliki tabel dengan informasi penjualan seperti wilayah, tenaga penjualan, dan jumlah yang dijual. Operator top-nested dapat membantu Anda menjawab pertanyaan kompleks, seperti "Apa lima wilayah teratas berdasarkan penjualan, dan siapa tiga tenaga penjualan teratas di masing-masing wilayah tersebut?"

Data sumber dipartisi berdasarkan kriteria yang ditetapkan dalam klausa pertama top-nested , seperti wilayah. Selanjutnya, operator memilih rekaman teratas di setiap partisi menggunakan agregasi, seperti menambahkan jumlah penjualan. Setiap klausa berikutnya top-nested menyempurnakan partisi yang dibuat oleh klausul sebelumnya, membuat hierarki grup yang lebih tepat.

Hasilnya adalah tabel dengan dua kolom per klausa. Satu kolom menyimpan nilai partisi, seperti wilayah, sementara kolom lainnya menyimpan hasil perhitungan agregasi, seperti jumlah penjualan.

Sintaks

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

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
T string ✔️ Ekspresi tabular input.
N int Jumlah nilai teratas yang akan dikembalikan untuk tingkat hierarki ini. Jika dihilangkan, semua nilai berbeda dikembalikan.
Expr string ✔️ Ekspresi atas rekaman input yang menunjukkan nilai mana yang akan dikembalikan untuk tingkat hierarki ini. Biasanya, ini mengacu pada kolom dari T atau melibatkan perhitungan seperti bin() pada kolom. Secara opsional, atur nama kolom output sebagai Name = Expr.
ConstExpr string Jika ditentukan, untuk setiap tingkat hierarki, satu rekaman ditambahkan dengan nilai yang merupakan agregasi atas semua rekaman yang tidak berhasil ke bagian atas.
Agregasi string Fungsi agregasi diterapkan ke rekaman dengan nilai Expr yang sama. Hasilnya menentukan rekaman teratas. Lihat Fungsi agregasi yang didukung. Secara opsional, tetapkan nama kolom output sebagai Agregasi Nama = .

Fungsi agregasi yang didukung

Fungsi agregasi berikut didukung:

Catatan

Setiap kombinasi aljabar dari agregasi juga didukung.

Mengembalikan

Tabel dengan dua kolom untuk setiap klausa. Satu kolom berisi nilai unik yang dihitung menggunakan Expr, dan kolom lainnya memperlihatkan hasil yang diperoleh dari perhitungan Agregasi .

Sertakan data dari kolom lain

Hanya kolom yang ditentukan sebagai top-nested klausa Expr yang ditampilkan dalam tabel output.

Untuk menyertakan semua nilai kolom pada tingkat tertentu:

  1. Jangan tentukan nilai N.
  2. Gunakan nama kolom sebagai nilai Expr.
  3. Gunakan Ignore=max(1) sebagai nilai Agregasi.
  4. Hapus kolom yang tidak perlu Ignore dengan project-away.

Misalnya, lihat Mendapatkan peristiwa terbaru per status dengan data tambahan dari kolom lain.

Pertimbangan performa

Jumlah rekaman dapat tumbuh secara eksponensial dengan jumlah top-nested klausul, dan mencatat pertumbuhan bahkan lebih cepat jika tidak ada batas N yang ditentukan. Operator ini dapat mengonsumsi sejumlah besar sumber daya.

Jika distribusi agregasi jauh tidak seragam, batasi jumlah nilai berbeda untuk dikembalikan dengan menentukan N. Kemudian, gunakan with others = spesifikasi ConstExpr untuk mendapatkan indikasi untuk berat semua kasus lainnya.

Contoh

Mulai menggunakan top-nested operator

Kueri berikut mempartisi StormEvents tabel menurut State kolom dan menghitung total garis lintang untuk setiap status. Kueri memilih dua status teratas dengan jumlah lintang tertinggi. Dalam dua status teratas ini, kueri mengelompokkan data menurut Source dan memilih tiga sumber teratas dengan jumlah garis lintang tertinggi. Untuk masing-masing dari tiga sumber teratas di dua status teratas, kueri mengelompokkan data menurut EndLocation dan memilih EndLocation dengan jumlah lintang tertinggi.

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.

Hasil

Provinsi aggregated_State Sumber aggregated_Source EndLocation aggregated_EndLocation
KANSAS 87771.2355000001 Penegakan Hukum 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Publik 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Spotter Terlatih 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Publik 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Penegakan Hukum 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Spotter Terlatih 13997.7124 CLAUDE 421.44

Meningkatkan hasil berlapis teratas dengan data dari kolom lain

Kueri berikut dibuat berdasarkan contoh sebelumnya dengan memperkenalkan klausul tambahan top-nested . Dalam klausa baru ini, tidak adanya spesifikasi numerik menghasilkan ekstraksi semua nilai yang berbeda di EventType seluruh partisi. Fungsi max(1) agregasi hanyalah tempat penampung, merender hasilnya tidak relevan, sehingga operator project-away menghapus Ignore kolom. Hasilnya memperlihatkan semua jenis peristiwa yang terkait dengan data agregat sebelumnya.

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

Hasil

Provinsi aggregated_State Sumber aggregated_Source EndLocation aggregated_EndLocation EventType
TEXAS 123400.51009999994 Publik 13650.907900000002 AMARILLO 246.25979999999998 Hujan es
TEXAS 123400.51009999994 Publik 13650.907900000002 AMARILLO 246.25979999999998 Angin Badai Petir
KANSAS 87771.235500000068 Publik 22855.6206 BUCKLIN 488.2457 Banjir
KANSAS 87771.235500000068 Publik 22855.6206 BUCKLIN 488.2457 Angin Badai Petir
KANSAS 87771.235500000068 Publik 22855.6206 BUCKLIN 488.2457 Hujan es
TEXAS 123400.51009999994 Spotter Terlatih 13997.712400000009 CLAUDE 421.44 Hujan es
KANSAS 87771.235500000068 Penegakan Hukum 18744.823000000004 FT SCOTT 264.858 Banjir Bandang
KANSAS 87771.235500000068 Penegakan Hukum 18744.823000000004 FT SCOTT 264.858 Angin Badai Petir
KANSAS 87771.235500000068 Penegakan Hukum 18744.823000000004 FT SCOTT 264.858 Banjir
TEXAS 123400.51009999994 Penegakan Hukum 37228.596599999961 PERRYTON 289.3178 Hujan es
... ... ... ... ... ...

Gunakan with others untuk menjelajahi data yang dikecualikan

Saat dimasukkan dalam top-nested klausul, with others spesifikasi memperkenalkan catatan tambahan yang menggabungkan data yang dikecualikan dari hasil teratas. Dalam kueri berikut, rekaman tambahan dibuat di State kolom dan aggregated_State , mewakili garis lintang kolektif dari semua status kecuali Kansas dan Texas. Selain itu, EndLocation kolom dan aggregated_EndLocation memiliki sembilan rekaman tambahan. Rekaman ini menunjukkan garis lintang gabungan lokasi akhir yang tidak memenuhi syarat sebagai lokasi teratas dalam setiap status dan sumber.

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)

Hasil

Provinsi aggregated_State Sumber aggregated_Source EndLocation aggregated_EndLocation
KANSAS 87771.2355000001 Penegakan Hukum 18744.823 FT SCOTT 264.858
KANSAS 87771.2355000001 Publik 22855.6206 BUCKLIN 488.2457
KANSAS 87771.2355000001 Spotter Terlatih 21279.7083 SHARON SPGS 388.7404
TEXAS 123400.5101 Publik 13650.9079 AMARILLO 246.2598
TEXAS 123400.5101 Penegakan Hukum 37228.5966 PERRYTON 289.3178
TEXAS 123400.5101 Spotter Terlatih 13997.7124 CLAUDE 421.44
KANSAS 87771.2355000001 Penegakan Hukum 18744.823 Semua Lokasi Akhir Lainnya 18479.965
KANSAS 87771.2355000001 Publik 22855.6206 Semua Lokasi Akhir Lainnya 22367.3749
KANSAS 87771.2355000001 Spotter Terlatih 21279.7083 Semua Lokasi Akhir Lainnya 20890.9679
TEXAS 123400.5101 Publik 13650.9079 Semua Lokasi Akhir Lainnya 13404.6481
TEXAS 123400.5101 Penegakan Hukum 37228.5966 Semua Lokasi Akhir Lainnya 36939.2788
TEXAS 123400.5101 Spotter Terlatih 13997.7124 Semua Lokasi Akhir Lainnya 13576.2724
KANSAS 87771.2355000001 Semua Lokasi Akhir Lainnya 24891.0836
TEXAS 123400.5101 Semua Lokasi Akhir Lainnya 58523.2932000001
Semua Negara Lain 1149279.5923 Semua Lokasi Akhir Lainnya 1149279.5923

Kueri berikut ini memperlihatkan hasil yang sama untuk tingkat pertama yang digunakan dalam contoh sebelumnya.

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

Hasil

sum_BeginLat
1149279.5923

Mengurutkan hasil hierarkis

Untuk mencapai urutan pengurutan komprehensif, kueri berikut menggunakan pengurutan berbasis indeks untuk setiap nilai dalam tingkat hierarki saat ini, per grup. Pengurutan ini diarahkan untuk mengatur hasil sesuai dengan tingkat berlapis utama, dalam hal EndLocationini .

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

Hasil

Provinsi Sumber EndLocations endLocationSums indeks
TEXAS Spotter Terlatih CLAUDE 421.44 0
TEXAS Spotter Terlatih AMARILLO 316.8892 1
TEXAS Spotter Terlatih DALHART 252.6186 2
TEXAS Spotter Terlatih PERRYTON 216.7826 3
TEXAS Penegakan Hukum PERRYTON 289.3178 0
TEXAS Penegakan Hukum LEAKEY 267.9825 1
TEXAS Penegakan Hukum BRACKETTVILLE 264.3483 2
TEXAS Penegakan Hukum GILMER 261.9068 3
KANSAS Spotter Terlatih SHARON SPGS 388.7404 0
KANSAS Spotter Terlatih ATWOOD 358.6136 1
KANSAS Spotter Terlatih LENORA 317.0718 2
KANSAS Spotter Terlatih KOTA SCOTT 307.84 3
KANSAS Publik BUCKLIN 488.2457 0
KANSAS Publik ASHLAND 446.4218 1
KANSAS Publik PROTEKSI 446.11 2
KANSAS Publik TAMAN NEGARA BAGIAN MEADE 371.1 3

Mendapatkan peristiwa terbaru per status dengan data tambahan dari kolom lain

Kueri berikut menunjukkan cara mengambil dua peristiwa terbaru untuk setiap status AS bersama dengan detail peristiwa yang relevan. Perhatikan penggunaan max(1) dalam kolom tertentu, yang diidentifikasi oleh Ignore*, yang membantu dalam menyebarkan data melalui kueri tanpa memberlakukan logika pemilihan apa pun.

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.

Mendapatkan rekaman terbaru per identitas dengan data tambahan dari kolom lain

Kueri berikut menampilkan cara mengekstrak rekaman terbaru per identitas dan membangun konsep yang diperkenalkan dalam contoh sebelumnya. Klausa pertama top-nested mempartisi data dengan nilai yang berbeda dari id. Klausul berikutnya mengidentifikasi dua rekaman terbaru berdasarkan timestamp untuk setiap id. Informasi lain ditambahkan menggunakan top-nested operator bersama jumlah yang tidak ditentukan dan agregasi arbitrer max(1) . Terakhir, kolom agregasi yang tidak perlu dihapus menggunakan project-away operator.

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.

Hasil

id rentang waktu 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