本頁面可協助您排解 Looker 錯誤:
Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum
以下是可能導致這項錯誤的幾個問題:
非唯一主鍵
這項錯誤最常見的原因是查詢涉及非唯一的主鍵。您可以在維度上使用 primary_key: yes
指定主鍵,且該維度不得有任何重複的值。
快速修正
在查詢中找出主鍵維度後,您可以使用以下查詢,在 Looker 的 SQL Runner 中測試主鍵是否唯一:
SELECT COUNT(*), COUNT(DISTINCT your_primary_key) FROM your_table_name
如果這項查詢中的計數相符,則主索引鍵是不重複的。如果計數不相符,則主鍵並非唯一,且會出現在多個資料列中。您必須選擇或建立新的維度做為主要索引鍵。如果沒有任何單一維度包含完全不重複的值,您可能需要連結欄位,自行建立主鍵維度。
使用 row_number
為衍生資料表產生主鍵
如果您在衍生資料表中收到這則錯誤訊息,可以在 Postgres 和 Redshift 資料庫中使用 row_number()
窗口函式建立不重複的欄位。這個欄位即可用做為主鍵:
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 ;; } }
在 MySQL 中,您可以使用可逐一檢查每個資料列的變數,達到相同的效果:
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 ;; } }
sql_distinct_key
使用方式不正確
如果查詢中的任何指標都是 sum_distinct
類型,則該指標的 sql_distinct_key
和 sql
參數之間可能會出現不一致的情況。
快速修正
如要瞭解這些參數的規定,請參閱 sum_distinct
說明文件頁面。
在使用扇形展開的多個檢視畫面中參照欄位
您的查詢可能會使用來自檢視畫面 A 的測量指標,但該測量指標會參照檢視畫面 B 的欄位。在這種情況下,Looker 會使用檢視畫面 A 的主鍵來計算該指標。如果查詢涉及分支,則可能不是要使用的正確主鍵。(如要瞭解 fanouts,請參閱相關社群貼文)。
快速修正
如要解決這個問題,請使用 sql_distinct_key
參數,將來自檢視區塊 B 的主索引鍵新增至問題度量資料。
如果上述原因都不符合你的情況,但錯誤仍會發生,該怎麼辦?
在某些特定情況下,主鍵可以是唯一的,而且這類問題的其他原因不適用於查詢,但仍會發生這個錯誤。首先,您的查詢會涉及多個 relationship: one_to_many
彙整作業。第二,查詢中的其中一個指標會參照維度,將多個已彙整的檢視畫面值合併。
如要修正這個問題,請記下該測量標準,然後按照下列步驟操作:
- 找出結合多個已彙整檢視圖的值的評估指標中所含的維度。
- 找出該維度參照的檢視畫面。
- 使用 SQL 方言的連接函式,將這些檢視表的主鍵連接起來。
- 將連接的鍵放入導致問題的評估項目的
sql_distinct_key
參數中。