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:
- Jangan tentukan nilai N.
- Gunakan nama kolom sebagai nilai Expr.
- Gunakan
Ignore=max(1)
sebagai nilai Agregasi. - 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 EndLocation
ini .
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 |
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk