Questa pagina ti aiuterà a risolvere questo errore di Looker:
Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum
Questo errore può essere causato da uno dei seguenti problemi:
- Una chiave primaria non univoca (più comune)
- Utilizzo non corretto di
sql_distinct_key
- Fare riferimento a un campo tra le visualizzazioni in caso di coinvolgimento di fanout
Chiave primaria non univoca
La causa più comune di questo errore è che la query coinvolge una chiave primaria non univoca. Devi specificare una chiave primaria utilizzando primary_key: yes
in una dimensione, che deve essere una dimensione senza valori ripetuti.
Soluzione rapida
Dopo aver identificato le dimensioni della chiave primaria nella query, puoi verificarne l'unicità in SQL Runner di Looker con questa query:
SELECT COUNT(*), COUNT(DISTINCT your_primary_key) FROM your_table_name
Se i conteggi in questa query corrispondono, la chiave primaria è univoca. Se i conteggi non corrispondono, la chiave primaria non è univoca e viene visualizzata in più righe. Dovrai scegliere o creare una nuova dimensione come chiave primaria. Se nessuna singola dimensione contiene valori completamente univoci, potrebbe essere necessario concatenare i campi per creare una dimensione chiave principale.
Utilizzo di row_number
per generare una chiave primaria per una tabella derivata
Se ricevi questo errore con una tabella derivata, puoi utilizzare la funzione finestra row_number()
nei database Postgres e Redshift per creare un campo univoco. Questo campo può quindi essere utilizzato come chiave primaria:
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 ;; } }
In MySQL, puoi utilizzare una variabile che itera su ogni riga per ottenere lo stesso effetto:
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 ;; } }
Utilizzo non corretto di sql_distinct_key
Se una delle misure nella tua query è di tipo sum_distinct
, potrebbe esserci una mancata corrispondenza di univocità tra i parametri sql_distinct_key
e sql
di questa misura.
Correzione rapida
Consulta la nostra pagina della documentazione di sum_distinct
per i requisiti di questi parametri.
Fare riferimento ai campi in più visualizzazioni con i fanout
La query potrebbe utilizzare una misura della visualizzazione A, ma la misura fa riferimento a un campo della visualizzazione B. In questo caso, Looker utilizzerà la chiave primaria della vista A per calcolare questa misura. Se la query prevede un fanout, la chiave primaria potrebbe non essere quella corretta da utilizzare. Per acquisire familiarità con i fanout, consulta il post della scheda Community correlato.
Soluzione rapida
Per risolvere il problema, aggiungi la chiave primaria della vista B alla misura del problema con il parametro sql_distinct_key
.
Che cosa succede se nessuna delle cause elencate è applicabile, ma l'errore si verifica ancora?
Esiste una situazione molto specifica in cui la chiave primaria può essere univoca e le altre cause di questo problema non si applicano alla query, ma si verifica comunque questo errore. Innanzitutto, la query prevede più join di relationship: one_to_many
. In secondo luogo, una delle misure nella query farà riferimento a una dimensione che combina i valori di più visualizzazioni unite.
Per risolvere il problema, prendi nota della misura e segui questi passaggi:
- Trova la dimensione all'interno della misura che combina i valori di più visualizzazioni unite.
- Trova le viste a cui fa riferimento quella dimensione.
- Concatena le chiavi principali da queste visualizzazioni utilizzando la funzione di concatenazione del tuo dialetto SQL.
- Inserisci la chiave concatenata in un parametro
sql_distinct_key
sulla misura che ha causato il problema.