Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ubah data Microsoft Fabric Anda menjadi wawasan yang dapat ditindaklanjuti dengan agregasi GraphQL. Alih-alih mengambil ribuan rekaman individual dan memprosesnya di aplikasi Anda, Anda dapat meminta Fabric untuk mengelompokkan data Anda dan menghitung ringkasan sisi server—secara dramatis meningkatkan performa dan mengurangi transfer data.
Agregasi GraphQL berfungsi seperti operasi SQL GROUP BY, tetapi melalui API GraphQL. Anda dapat menghitung item per kategori, menghitung total pendapatan, menemukan peringkat rata-rata, atau menentukan nilai min/maks di seluruh tabel lakehouse dan gudang Anda—semuanya dalam satu kueri yang efisien.
Manfaat utama:
- Pemrosesan sisi-server: Memanfaatkan mesin kueri yang sudah dioptimalkan Fabric untuk perhitungan
- Pengurangan transfer data: Dapatkan ringkasan alih-alih rekaman mentah
- Efisiensi kueri tunggal: Ganti beberapa operasi sisi klien dengan satu agregasi
Panduan ini menunjukkan kepada Anda cara membangun kueri agregasi menggunakan contoh e-niaga praktis, mencakup semuanya mulai dari pengelompokan dasar hingga fungsi tingkat lanjut dan batasan penting.
Siapa yang harus menggunakan agregasi
Agregasi GraphQL sangat berharga untuk:
- Pengembang aplikasi yang membangun dasbor kustom dan aplikasi analisis yang membutuhkan data Fabric yang dirangkum
- Insinyur data yang membuat API data yang melayani metrik dan KPI pra-dihitung dari lakehouse Fabric dan gudang
- Pengembang BI membangun solusi analitik kustom yang melengkapi Power BI dengan data Fabric agregat
- Pengembang integrasi yang membuat aplikasi dan alur kerja yang membutuhkan statistik ringkasan dari Fabric
- Analis data membangun solusi analitik layanan mandiri yang memerlukan wawasan yang dikelompokkan dan diagregasi dari data Fabric
Jika Anda mengambil data untuk menampilkan bagan, menghitung total, membuat laporan, atau menganalisis tren, agregasi dapat secara signifikan meningkatkan performa aplikasi Anda dan mengurangi transfer data.
Pertanyaan bisnis umum yang dapat Anda jawab
Agregasi GraphQL unggul dalam menjawab pertanyaan analitik tentang data Fabric Anda:
- Menghitung dan mengelompokkan: "Berapa banyak produk yang ada di setiap kategori?" atau "Berapa banyak pesanan per bulan?"
- Perhitungan keuangan: "Berapa total pendapatan menurut wilayah?" atau "Nilai pesanan rata-rata menurut segmen pelanggan?"
- Metrik performa: "Apa produk dengan peringkat tertinggi dan terendah di setiap kategori?"
- Wawasan pelanggan: "Berapa banyak pelanggan unik yang dikunjungi bulan ini?" atau "Kota mana yang memiliki pengguna paling aktif?"
Kueri ini sangat ideal untuk membangun dasbor, membuat laporan, dan mendukung aplikasi analitik di mana Anda memerlukan data ringkasan daripada rekaman individual.
Prasyarat
Sebelum menggunakan agregasi GraphQL, pastikan Anda memiliki:
- Ruang kerja Microsoft Fabric dengan izin yang sesuai
- Lakehouse atau gudang dengan tabel yang berisi data yang ingin Anda agregat
- API untuk titik akhir GraphQL yang dikonfigurasi untuk item Fabric Anda
- Keakraban dasar dengan sintaks kueri GraphQL
Lokasi untuk menjalankan kueri ini
Mulai cepat: Gunakan API untuk editor GraphQL di ruang kerja Fabric Anda untuk menguji semua contoh dalam artikel ini. Editor menyediakan eksplorasi skema, validasi kueri, dan hasil langsung.
Untuk aplikasi: Kirim kueri sebagai permintaan HTTP POST ke titik akhir GraphQL Anda, menggunakan pustaka klien GraphQL apa pun untuk bahasa pemrograman Anda.
Untuk pengembangan: Alat seperti GraphQL Playground, Insomnia, atau Postman bekerja dengan baik untuk pengembangan dan pengujian kueri.
Nota
Contoh dalam artikel ini siap untuk disalin dan dijalankan setelah Anda mengonfigurasi API untuk titik akhir GraphQL. Beberapa contoh dipersingkat untuk singkat dan mungkin memerlukan adaptasi untuk skema spesifik Anda.
Contoh skenario: Data e-niaga dalam Fabric
Untuk panduan ini, kami menggunakan himpunan data e-niaga fiktif yang disimpan di microsoft Fabric lakehouse atau gudang Anda. Skenario ini menunjukkan bagaimana Anda dapat menganalisis data ritel menggunakan agregasi GraphQL.
Dalam contoh ini, data produk termasuk dalam kategori, dengan masing-masing Product bidang yang berisi seperti harga dan peringkat (nilai numerik yang sempurna untuk agregasi), dan hubungan dengan Category. Saat Anda mengekspos tabel ini melalui API Fabric untuk GraphQL, skema yang dihasilkan mungkin terlihat seperti:
type Category {
id: ID!
name: String!
products: [Product!]! # one-to-many relationship
}
type Product {
id: Int!
name: String!
price: Float!
rating: Int!
category_id: Int!
category: Category! # many-to-one relationship
}
type ProductResult { # automatically generated, adding groupBy capabilities
items: [Product!]!
endCursor: String
hasNextPage: Boolean!
groupBy(fields: [ProductScalarFields!]): [ProductGroupBy!]!
}
type Query {
products(
first: Int
after: String
filter: ProductFilterInput
orderBy: ProductOrderByInput
): ProductResult!
}
Dalam contoh ini, products kueri dapat mengembalikan daftar item normal atau, jika groupBy digunakan, hasil agregat. Mari kita fokus pada penggunaan groupBy dan fitur agregasi dari kueri ini.
Nota
Anda tidak dapat mengambil item normal dan mengelompokkan hasil dalam kueri yang sama. Untuk detail selengkapnya, lihat Agregasi dan item mentah saling eksklusif.
Fungsi agregasi yang tersedia
Fungsi yang tepat tersedia tergantung pada implementasi, tetapi operasi agregasi umum meliputi:
- count – Jumlah rekaman (atau nilai bidang yang bukan null) dalam grup.
- sum – Jumlah semua nilai dalam bidang numerik.
- rata-rata – Nilai rata-rata (mean) dalam bidang numerik.
- min – Nilai minimum dalam bidang.
- max – Nilai maksimum dalam bidang.
Dalam agregasi GraphQL, Anda menentukan nama fungsi dan bidang target, seperti yang ditunjukkan dalam contoh count(field: id), sum(field: price), dll. Setiap fungsi mengembalikan objek yang memungkinkan Anda memilih satu atau beberapa bidang yang diterapkannya.
Nota
Dalam API Microsoft Fabric untuk GraphQL, operasi agregasi seperti count, , sumavg, min, dan max saat ini hanya berfungsi pada bidang numerik atau kuantitatif (bilangan bulat, float). Anda tidak dapat menggunakannya pada bidang teks atau tanggal secara langsung. Misalnya, Anda tidak dapat menghitung "rata-rata" bidang string. Dukungan untuk melakukan agregat pada jenis data lain (seperti perangkaian teks atau min/maks leksikografis) mungkin ditambahkan dalam pembaruan di masa mendatang ke Fabric.
Dasar-dasar kueri agregasi
Untuk melakukan agregasi di GraphQL API Fabric, Anda menentukan groupBy argumen dalam kueri Anda untuk menentukan cara mengelompokkan data, dan meminta bidang agregasi (seperti hitungan atau jumlah) dalam hasilnya. Mesin GraphQL Fabric memproses kueri ini secara efisien terhadap tabel lakehouse atau gudang yang mendasarinya, mengembalikan daftar rekaman yang dikelompokkan dengan nilai kuncinya dan metrik agregat yang dihitung.
Contoh 1: Menghitung produk per kategori
Mari kelompokkan produk berdasarkan kategorinya dan hitung berapa banyak produk yang ada di setiap grup. Kueri mungkin terlihat seperti:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id # grouped key values
}
aggregations {
count(field: id) # count of products in each group (count of "id")
}
}
}
}
Dalam kueri ini:
-
groupBy(fields: [category_id])memberi tahu mesin Fabric GraphQL untuk mengelompokkan produk menurutcategory_idbidang . - Dalam pilihan hasil, Anda meminta
groupdan mengagregasicountpada bidangid. Menghitungidsecara efektif menghitung produk dalam grup tersebut.
Seperti apa hasilnya: Setiap item dalam respons mewakili satu grup kategori. Objek groupBy berisi kunci pengelompokan. Di sini memuat category_id nilai dan count { id } menyediakan jumlah produk dalam kategori tersebut.
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2
}
},
// Sample shortened for brevity
]
}
}
}
Output ini memberi tahu kami kategori 1 memiliki tiga produk, kategori 2 memiliki 2, dan sebagainya.
Contoh 2: Jumlah dan rata-rata
Kita dapat meminta beberapa metrik agregasi dalam satu kueri. Misalkan kita ingin, untuk setiap kategori, total harga semua produk dan peringkat rata-rata:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
count(field: id) # number of products in the category
sum(field: price) # sum of all product prices in the category
avg(field: rating) # average rating of products in the category
}
}
}
}
Kueri ini akan mengembalikan hasil berikut:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3,
"sum": 2058.98,
"avg": 4
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2,
"sum": 109.94,
"avg": 4
}
},
...
]
}
}
}
Setiap objek grup mencakup kategori dan agregat komputasi seperti jumlah produk, jumlah harganya, dan peringkat rata-rata dalam kategori tersebut.
Contoh 3: Kelompokkan menurut beberapa bidang
Anda bisa mengelompokkan menurut lebih dari satu bidang untuk mendapatkan pengelompokan multi-tingkat. Misalnya, jika produk Anda memiliki bidang rating, Anda dapat mengelompokkan berdasarkan category_id dan rating, kemudian menghitung rata-rata price untuk kelompok tersebut.
query {
products {
groupBy(fields: [category_id, rating])
{
fields {
category_id
rating
}
aggregations {
avg(field: price)
}
}
}
}
Ini akan mengelompokkan produk dengan kombinasi unik kategori dan peringkat seperti yang ditunjukkan di bawah ini:
{
"fields": {
"category_id": 10,
"rating": 4
},
"aggregations": {
"avg": 6.99
}
}
Dan sebagainya untuk setiap pasangan peringkat kategori dalam data.
Tip
Saat mengelompokkan menurut beberapa bidang, pengurutan eksplisit menjadi sangat penting untuk hasil yang dapat diprediksi. Lihat Mengurutkan hasil yang dikelompokkan memerlukan urutan eksplisit.
Contoh 4: Menggunakan distinct
Fitur agregasi mendukung pengubah yang berbeda untuk menghitung atau mempertimbangkan nilai unik. Misalnya, untuk mengetahui berapa banyak kategori berbeda yang ada dalam koleksi produk, Anda dapat menggunakan jumlah yang berbeda:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
count(field: id, distinct: true)
}
}
}
}
Kueri ini mengembalikan hasil dengan jumlah produk unik untuk setiap kategori. Hasilnya akan terlihat seperti:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"count": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"count": 2
}
},
...
]
}
}
}
Tip
Untuk panduan selengkapnya tentang kapan dan bagaimana menggunakan berbeda dengan tepat, lihat Menggunakan agregasi yang berbeda dengan tepat.
Contoh 5: Menggunakan alias
Anda dapat membuat alias untuk agregasi untuk memberikan nama yang bermakna dan mudah dipahami untuk hasil agregat. Misalnya, Anda dapat memberi nama agregasi dalam contoh distinctProductCategoryCount sebelumnya karena menghitung kategori produk yang berbeda untuk lebih memahami hasilnya:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
distinctProductCategoryCount: count(field: id, distinct: true)
}
}
}
}
Hasilnya serupa tetapi lebih bermakna dengan alias kustom:
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"distinctProductCategoryCount": 3
}
},
{
"fields": {
"category_id": 2
},
"aggregations": {
"distinctProductCategoryCount": 2
}
},
...
]
}
}
}
Contoh 6: Menggunakan having klausa
Dimungkinkan untuk memfilter hasil agregat dengan having klausa. Misalnya, Anda dapat memodifikasi contoh sebelumnya untuk hanya mengembalikan hasil yang lebih besar dari dua:
query {
products {
groupBy(fields: [category_id])
{
fields {
category_id
}
aggregations {
distinctProductCategoryCount: count(field: id, distinct: true, having: {
gt: 2
})
}
}
}
}
Hasilnya mengembalikan nilai tunggal dari satu-satunya kategori yang memiliki lebih dari dua produk.
{
"data": {
"products": {
"groupBy": [
{
"fields": {
"category_id": 1
},
"aggregations": {
"distinctProductCategoryCount": 3
}
}
]
}
}
}
Pembatasan dan praktik terbaik
Saat Anda menggunakan agregasi di API Microsoft Fabric untuk GraphQL, ada aturan dan batasan penting yang perlu dipertimbangkan. Dengan mengikuti praktik terbaik ini dan memahami pembatasan ini, Anda dapat membangun kueri agregasi GraphQL yang efektif yang menghasilkan wawasan yang kuat sambil memastikan hasil yang dapat diprediksi, terutama saat bekerja dengan himpunan data besar atau menerapkan penomoran halaman.
Fitur agregasi berguna untuk kasus penggunaan pelaporan dan analitik, tetapi memerlukan penataan kueri yang cermat. Selalu periksa kembali apakah bidang Anda groupBy selaras dengan bidang output yang Anda pilih, tambahkan pengurutan untuk urutan yang dapat diprediksi terutama saat paginating, dan gunakan fungsi yang berbeda dan agregat dengan tepat untuk jenis data.
Bagian berikut mencakup tiga area utama yang perlu Anda pahami: Agregasi dan item mentah saling eksklusif, Mengurutkan hasil yang dikelompokkan memerlukan pengurutan eksplisit, dan Menggunakan agregasi yang berbeda dengan tepat.
Agregasi dan item mentah saling eksklusif
Saat ini, Anda tidak dapat mengambil data ringkasan yang dikelompokkan dan daftar mentah item dalam kueri yang sama secara bersamaan. Saat Anda menggunakan groupBy dalam kueri, API beralih ke "mode agregasi" dan hanya mengembalikan hasil yang dikelompokkan. Desain ini menjaga struktur respons tetap tidak ambigu - setiap kueri berada dalam "mode agregasi" atau "mode item daftar", tetapi tidak pernah keduanya.
Cara kerja ini dalam praktiknya:
Kueri products(...) mengembalikan salah satu dari:
- Daftar produk individual (saat
groupBytidak digunakan) - Daftar hasil yang dikelompokkan dengan data agregat (saat
groupBydigunakan)
Perhatikan dalam contoh agregat di atas bahwa respons berisi groupBy dan bidang agregat, tetapi daftar produk yang biasa items hilang.
Apa yang terjadi jika Anda mencoba keduanya:
Jika Anda mencoba meminta item dan grup normal dalam kueri yang sama, mesin GraphQL mengembalikan kesalahan atau tidak akan mengizinkan pilihan tersebut.
Solusi:
Jika Anda memerlukan data mentah dan data agregat, jalankan dua kueri terpisah: satu untuk data mentah dan satu untuk data agregat. Pendekatan ini memberi Anda kontrol penuh atas dataset dan bisa dioptimalkan sesuai dengan kebutuhan caching dan performa spesifik Anda.
Mengurutkan hasil yang dikelompokkan memerlukan pengurutan eksplisit
Grup agregat dikembalikan dalam urutan yang tidak dapat diprediksi kecuali Anda menentukan pengurutan eksplisit. Selalu gunakan orderBy atau sort argumen untuk memastikan hasil yang konsisten dan bermakna.
Mengapa pemesanan eksplisit penting:
-
Urutan default yang tidak dapat diprediksi: Tanpa
orderBy, grup mungkin kembali dalam urutan yang ditentukan database arbitrer - Persyaratan penomoran halaman: Urutan pengurutan yang stabil sangat penting untuk perilaku penomoran halaman yang konsisten
- Pengalaman pengguna: Urutan yang dapat diprediksi meningkatkan interpretasi data dan keandalan aplikasi
Saat Anda harus menentukan pengurutan:
-
Tidak ada kunci utama di bidang groupBy: Jika bidang pengelompokan Anda tidak menyertakan kunci utama, Anda harus menambahkan
orderBy - Kunci pengelompokan non-unik: Saat mengelompokkan menurut bidang seperti nama kategori atau tanggal
- Skenario paginasi: Kapan saja Anda berencana untuk menggunakan batas/offset atau paginasi kursor
Praktik terbaik:
- Mengurutkan menurut nilai agregat (seperti jumlah tertinggi terlebih dahulu) untuk wawasan analitis
- Menggunakan pengurutan alfabet untuk pengelompokan berbasis kategori
- Menggabungkan beberapa kriteria pengurutan untuk kebutuhan pengurutan yang kompleks
Gunakan agregasi berbeda dengan tepat
Pengubah distinct menghilangkan nilai duplikat sebelum melakukan agregasi, memastikan perhitungan yang akurat saat data Anda berisi duplikat.
Kasus penggunaan umum:
-
Jumlah unik:
count(field: category_id, distinct: true)menghitung berapa banyak kategori berbeda yang ada di setiap grup -
Jumlah yang dideduksi:
sum(field: price, distinct: true)menambahkan setiap nilai harga unik hanya sekali per grup - Skenario penggabungan: Ketika produk muncul beberapa kali karena penggabungan tabel, distinct memastikan setiap item dihitung sekali.
Kapan menggunakan 'distinct':
- Data Anda berisi duplikat yang sah yang akan mempengaruhi perhitungan.
- Anda bekerja dengan tabel gabungan yang membuat baris duplikat
- Anda perlu menghitung jumlah nilai yang unik daripada total kemunculan.
Pertimbangan performa:
Operasi yang berbeda memerlukan lebih banyak pemrosesan. Hanya gunakan jika perlu untuk akurasi data.