Halaman ini akan membantu Anda memecahkan masalah error Looker ini:
Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum
Salah satu dari beberapa masalah dapat menyebabkan error ini:
- Kunci utama yang tidak unik (paling umum)
- Penggunaan
sql_distinct_key
yang salah - Mereferensikan kolom di seluruh tampilan saat fanout terlibat
Kunci utama non-unik
Penyebab paling umum error ini adalah kueri Anda melibatkan kunci utama yang tidak unik. Anda menentukan kunci utama menggunakan primary_key: yes
pada dimensi, dan dimensi tersebut harus berupa dimensi tanpa nilai berulang.
Perbaikan cepat
Setelah mengidentifikasi dimensi kunci utama dalam kueri, Anda dapat menguji keunikannya di SQL Runner Looker dengan kueri ini:
SELECT COUNT(*), COUNT(DISTINCT your_primary_key) FROM your_table_name
Jika jumlah dalam kueri ini cocok, kunci utama bersifat unik. Jika jumlah tidak cocok, kunci utama tidak unik dan muncul di beberapa baris. Anda harus memilih atau membuat dimensi baru sebagai kunci utama. Jika tidak ada satu dimensi pun yang berisi nilai yang sepenuhnya unik, Anda mungkin perlu menggabungkan kolom untuk membuat dimensi kunci utama Anda sendiri.
Menggunakan row_number
untuk membuat kunci utama untuk tabel turunan
Jika menerima error ini dengan tabel turunan, Anda dapat menggunakan fungsi jendela row_number()
di database Postgres dan Redshift untuk membuat kolom unik. Kolom ini kemudian dapat digunakan sebagai kunci utama:
view: derived_table_name { derived_table { sql: SELECT row_number() OVER(ORDER BY created_at) AS prim_key, * FROM orders ;; } dimension: prim_key { type: number primary_key: yes sql: ${TABLE}.prim_key ;; } }
Di MySQL, Anda dapat menggunakan variabel yang melakukan iterasi pada setiap baris untuk mencapai efek yang sama:
view: derived_table_name { derived_table { sql: SELECT CAST(@rownum := @rownum + 1 AS UNSIGNED) AS prim_key, t.* FROM orders t, (SELECT @rownum := 0) r ;; } dimension: prim_key { type: number primary_key: yes sql: ${TABLE}.prim_key ;; } }
Penggunaan sql_distinct_key
yang salah
Jika salah satu ukuran dalam kueri Anda berjenis sum_distinct
, mungkin ada ketidakcocokan keunikan antara parameter sql_distinct_key
dan sql
dari ukuran tersebut.
Perbaikan cepat
Lihat halaman dokumentasi sum_distinct
kami untuk mengetahui persyaratan parameter ini.
Mereferensikan kolom di seluruh tampilan dengan fanout
Kueri Anda mungkin menggunakan ukuran dari tampilan A, tetapi ukuran tersebut mereferensikan kolom dari tampilan B. Dalam situasi ini, Looker akan menggunakan kunci utama dari tampilan A untuk menghitung ukuran tersebut. Jika kueri Anda melibatkan fanout, kunci utama yang digunakan mungkin salah. (Untuk memahami fanout, lihat Postingan komunitas terkait.)
Perbaikan cepat
Untuk mengatasi masalah ini, tambahkan kunci utama dari tampilan B ke pengukuran masalah dengan parameter sql_distinct_key
.
Bagaimana jika tidak ada penyebab yang tercantum yang berlaku, tetapi error masih terjadi?
Ada situasi yang sangat spesifik ketika kunci utama Anda dapat bersifat unik, dan penyebab lain dari masalah ini tidak berlaku untuk kueri Anda, tetapi error ini masih terjadi. Pertama, kueri Anda akan melibatkan beberapa join relationship: one_to_many
. Kedua, salah satu ukuran dalam kueri Anda akan mereferensikan dimensi yang menggabungkan nilai dari beberapa tampilan gabungan.
Untuk memperbaiki masalah ini, catat ukuran tersebut, lalu ikuti langkah-langkah berikut:
- Temukan dimensi dalam pengukuran yang menggabungkan nilai dari beberapa tampilan yang digabungkan.
- Temukan tampilan yang dirujuk oleh dimensi tersebut.
- Gabungkan kunci utama dari tampilan tersebut menggunakan fungsi penyambungan dialek SQL Anda.
- Tempatkan kunci yang digabungkan tersebut ke dalam parameter
sql_distinct_key
pada pengukuran yang menyebabkan masalah.