Memfilter dan mengagregasi data grafik dalam Microsoft Fabric

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 MATCH dan RETURN kueri. 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