Bagikan melalui


operator top-nested

Berlaku untuk: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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 .

with others Menggunakan klausa

top-nested Menggunakan operator dengan with others menambahkan kemampuan untuk melihat konten teratas Anda di kontekstualisasi dalam himpunan data yang lebih luas. Mengevaluasi data Anda dengan cara ini sangat berharga saat merender data secara visual.

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 Peristiwa terbaru per status dengan data kolom lainnya.

Pertimbangan performa

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

Jika distribusi agregasi tidak teratur, batasi jumlah nilai berbeda untuk dikembalikan dengan menentukan N. Kemudian, gunakan with others = klausul ConstExpr untuk merasakan berat semua kasus lainnya.

Contoh

Status rusak teratas, jenis peristiwa, dan lokasi akhir berdasarkan kerusakan properti

Kueri berikut mempartisi StormEvents tabel menurut State kolom dan menghitung total kerusakan properti untuk setiap status. Kueri memilih dua status teratas dengan jumlah kerusakan properti terbesar. Dalam dua status teratas ini, kueri mengelompokkan data menurut EventType dan memilih tiga jenis peristiwa teratas dengan kerusakan terbanyak. Kemudian kueri mengelompokkan data berdasarkan EndLocation dan memilih EndLocation dengan kerusakan tertinggi. Hanya satu EndLocation nilai yang muncul dalam hasil, mungkin karena sifat besar peristiwa badai atau tidak mendokumentasikan lokasi akhir.

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

Hasil

Provinsi EventType EndLocation StateTotalDamage EventTypeTotalDamage EndLocationDamage
CALIFORNIA Wildfire 1445937600 1326315000 1326315000
CALIFORNIA HighWind 1445937600 61320000 61320000
CALIFORNIA DebrisFlow 1445937600 48000000 48000000
OKLAHOMA Badai Es 915470300 826000000 826000000
OKLAHOMA Musim DinginStorm 915470300 40027000 40027000
OKLAHOMA Banjir PERDAGANGAN 915470300 21485000 20000000

Lima status teratas dengan kerusakan with others properti dikelompokkan

Contoh berikut menggunakan top-nested operator untuk mengidentifikasi lima status teratas dengan kerusakan properti terbanyak with others dan menggunakan klausul untuk mengelompokkan properti yang rusak untuk semua status lainnya. Kemudian memvisualisasikan properti yang rusak untuk lima status teratas dan semua status lainnya sebagai piechart menggunakan render perintah .

StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart  

Hasil

Cuplikan layar lima status teratas dengan properti paling rusak, dan semua status lainnya dikelompokkan secara terpisah dirender sebagai bagan pai.

Peristiwa terbaru per status dengan data kolom lainnya

Kueri berikut mengambil dua peristiwa terbaru untuk setiap status AS dengan detail peristiwa yang relevan. Ini menggunakan max(1) dalam kolom tertentu untuk menyebarluaskan data tanpa menggunakan logika pemilihan berlapis atas. Kolom agregasi yang dihasilkan Ignore dihapus menggunakan 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.

Rekaman terbaru per identitas dengan data kolom lainnya

Contoh berikut top-nested mengekstrak rekaman terbaru per identitas dan membangun konsep yang diperkenalkan dalam contoh sebelumnya. Klausul pertama top-nested mempartisi data dengan nilai berbeda dari penggunaan id Ignore0=max(1) sebagai tempat penampung. Untuk setiap id, ini mengidentifikasi dua rekaman terbaru berdasarkan timestamp. Informasi lain ditambahkan menggunakan top-nested operator tanpa menentukan hitungan dan penggunaan Ignore2=max(1) sebagai tempat penampung. 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