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 non-unik (paling umum)
- Penggunaan
sql_distinct_key
yang salah - Mereferensikan suatu bidang pada berbagai pandangan ketika fanout terlibat
Kunci utama tidak unik
Penyebab paling umum dari kesalahan ini adalah kueri Anda melibatkan kunci utama yang tidak unik. Anda menentukan kunci utama menggunakan primary_key: yes
pada dimensi, dan kunci utama tersebut harus berupa dimensi tanpa nilai berulang.
Perbaikan cepat
Setelah mengidentifikasi dimensi kunci utama dalam kueri, Anda dapat mengujinya untuk 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 jumlahnya tidak cocok, kunci utama tidak unik dan akan muncul di beberapa baris. Anda harus memilih atau membuat dimensi baru sebagai kunci utama. Jika tidak ada dimensi tunggal yang berisi nilai yang sepenuhnya unik, Anda mungkin perlu menyambungkan kolom untuk membuat dimensi kunci utama Anda sendiri.
Menggunakan row_number
guna 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 yang 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 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
untuk 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 merujuk ke kolom dari tampilan B. Dalam situasi ini, Looker akan menggunakan kunci utama dari tampilan A untuk menghitung ukuran tersebut. Jika kueri Anda melibatkan fanout, itu mungkin bukan {i>primary key<i} yang benar untuk digunakan. (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 satu pun penyebab yang tercantum yang berlaku, tetapi error masih terjadi?
Ada situasi yang sangat spesifik di mana kunci utama Anda bisa unik, dan penyebab lain dari masalah ini tidak berlaku untuk kueri Anda namun kesalahan ini masih terjadi. Pertama, kueri Anda akan melibatkan beberapa gabungan relationship: one_to_many
. Kedua, salah satu ukuran dalam kueri akan merujuk ke dimensi yang menggabungkan nilai dari beberapa tampilan yang digabungkan.
Untuk memperbaiki masalah ini, catat ukuran tersebut, lalu ikuti langkah-langkah berikut:
- Temukan dimensi dalam ukuran yang menggabungkan nilai dari beberapa tampilan yang digabungkan.
- Temukan tampilan yang direferensikan oleh dimensi tersebut.
- Gabungkan kunci utama dari tampilan tersebut menggunakan fungsi penyambungan dialek SQL Anda.
- Tempatkan kunci gabungan tersebut ke dalam parameter
sql_distinct_key
pada ukuran yang menyebabkan masalah.