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.
Pemfilteran mempersempit hasil Anda ke baris yang penting. Agregasi meringkas baris tersebut menjadi hitungan, total, dan rata-rata. Artikel ini memperlihatkan kepada Anda cara menerapkan kedua teknik dalam kueri GQL terhadap grafik dalam Microsoft Fabric.
Contoh menggunakan himpunan data sampel jejaring sosial. Untuk referensi lengkap pernyataan dan ekspresi GQL, lihat Panduan bahasa GQL.
Prasyarat
- Elemen grafik dengan data yang telah dimuat. Jika Anda baru menggunakan grafik, selesaikan tutorial terlebih dahulu.
- Pemahaman tentang konsep dasar
MATCHdanRETURNkueri. Lihat Panduan bahasa GQL.
Memfilter baris dengan FILTER
Gunakan FILTER untuk menyimpan hanya baris yang memenuhi kondisi. Tempatkan FILTER setelah MATCH untuk mempersempit hasil yang cocok.
Kueri berikut mengembalikan semua wanita dengan nama dan ulang tahun mereka:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Gabungkan beberapa kondisi dengan AND dan OR. Misalnya, kueri berikut mengembalikan nama semua wanita yang lahir sebelum 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tip
Untuk performa yang lebih baik, lakukan penyaringan saat pemadanan pola berlangsung dengan menggunakan klausa sebaris WHERE daripada dalam pernyataan terpisah FILTER. Lihat Filter selama pencocokan pola.
Filter selama pencocokan pola
Klausa sebaris WHERE di dalam MATCH pola membatasi simpul dan tepi mana yang cocok sebelum hasil apa pun dihasilkan. Pendekatan ini lebih efisien daripada klausa pasca-pencocokan FILTER karena mesin kueri memangkas baris sebelumnya.
Misalnya, untuk menemukan orang yang lahir sebelum 1994 bersama dengan perusahaan tempat mereka bekerja, membatasi hasil untuk perusahaan yang namanya dimulai dengan 'A':
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filter properti tepi dengan cara yang sama. Misalnya, untuk menampilkan hanya orang yang mulai bekerja di perusahaan pada tahun 2000 atau setelahnya:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Untuk informasi lebih lanjut tentang perbedaan kinerja antara pemfilteran inline dan setelah pencocokan, lihat Mengoptimalkan Kinerja Kueri GQL.
Menangani nilai null dalam filter
GQL menggunakan logika tiga nilai: predikat mengevaluasi ke TRUE, , FALSEatau UNKNOWN. Saat nilai properti null, perbandingan mengembalikan UNKNOWN.
FILTER memperlakukan UNKNOWN sebagai tidak cocok, maka baris tersebut dikecualikan.
Gunakan IS NULL dan IS NOT NULL untuk menguji nilai null secara eksplisit:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Gunakan coalesce() untuk mengganti nilai default saat properti mungkin null:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Perhatian
NULL = NULL bernilai UNKNOWN, bukan TRUE. Selalu gunakan IS NULL untuk menguji nilai null, bukan kesetaraan.
Hasil agregat dengan RETURN
Gunakan fungsi agregat di RETURN untuk meringkas hasil Anda. GQL mendukung count(), , sum()avg(), min(), dan max().
Misalnya, untuk menghitung semua orang dalam grafik:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Untuk menghitung nilai yang berbeda seperti berapa banyak perusahaan yang berbeda mempekerjakan orang:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Mengelompokkan hasil dengan GROUP BY
GROUP BY Gunakan RETURN untuk mengelompokkan baris menurut nilai bersama dan menghitung agregat dalam setiap grup. Pengelompokan ini setara dengan GQL SQL GROUP BY.
Misalnya, untuk menghitung karyawan per perusahaan:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Kelompokkan menurut beberapa kolom dan komputasi beberapa agregat sekaligus. Misalnya, uraikan jumlah orang dan rentang ulang tahun berdasarkan jenis kelamin dan browser, mengembalikan 10 kombinasi yang paling umum:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Note
Semua ekspresi non-agregat di RETURN harus muncul di GROUP BY. Ekspresi yang tidak ada GROUP BY harus menggunakan fungsi agregat.
Mengurutkan dan membatasi hasil agregat
Gunakan ORDER BY dan LIMIT bersama-sama dengan GROUP BY untuk menemukan hasil N teratas.
Misalnya, untuk menemukan lima kota teratas menurut jumlah penduduk:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Penting
Tempatkan ORDER BY sebelum LIMIT.
LIMIT selalu berlaku untuk kumpulan hasil yang sudah diurutkan.
Gunakan CASE untuk nilai kondisional dalam hasil
Gunakan CASE/WHEN/THEN/ELSEuntuk menghitung nilai bersyarat di RETURN atau .LET
Misalnya, untuk mengategorikan orang ke dalam era berdasarkan tahun kelahiran mereka:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era