Fehler: Nicht eindeutiger Wert/Primärschlüssel (oder sql_distinct_key), Wertüberlauf oder Kollision bei Berechnung der Summe

Auf dieser Seite können Sie diesen Looker-Fehler beheben:

  Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum

Dieser Fehler kann eines der folgenden Probleme verursachen:

Nicht eindeutiger Primärschlüssel

Die häufigste Ursache für diesen Fehler ist, dass Ihre Abfrage einen nicht eindeutigen Primärschlüssel enthält. Sie geben einen Primärschlüssel mithilfe von primary_key: yes für eine Dimension an. Dabei muss es sich um eine Dimension ohne wiederholte Werte handeln.

Schnelle Fehlerbehebung

Nachdem Sie die Primärschlüsseldimensionen in Ihrer Abfrage identifiziert haben, können Sie sie mit der folgenden Abfrage auf Eindeutigkeit im SQL Runner von Looker testen:

SELECT
  COUNT(*),
  COUNT(DISTINCT your_primary_key)
FROM
  your_table_name

Wenn die Anzahlen in dieser Abfrage übereinstimmen, ist der Primärschlüssel eindeutig. Wenn die Anzahlen nicht übereinstimmen, ist der Primärschlüssel nicht eindeutig und wird in mehreren Zeilen angezeigt. Sie müssen eine neue Dimension als Primärschlüssel auswählen oder erstellen. Wenn keine einzelne Dimension eindeutige Werte enthält, müssen Sie möglicherweise die Felder verketten, um eine eigene Primärschlüsseldimension zu erstellen.

Mit row_number einen Primärschlüssel für eine abgeleitete Tabelle generieren

Wenn Sie diesen Fehler bei einer abgeleiteten Tabelle erhalten, können Sie die Fensterfunktion row_number() in Postgres- und Redshift-Datenbanken verwenden, um ein eindeutiges Feld zu erstellen. Dieses Feld kann dann als Primärschlüssel verwendet werden:

  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 können Sie eine Variable verwenden, die jede Zeile iteriert, um den gleichen Effekt zu erzielen:

  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 ;;
    }
  }
  

Falsche Verwendung von sql_distinct_key

Wenn einer der Messwerte in Ihrer Abfrage den Typ sum_distinct hat, stimmt die Eindeutigkeit der Parameter sql_distinct_key und sql möglicherweise nicht überein.

Schnelle Fehlerbehebung

Informationen zu den Anforderungen dieser Parameter finden Sie auf der Dokumentationsseite von sum_distinct.

Felder mit Fanouts in verschiedenen Ansichten referenzieren

In der Abfrage wird möglicherweise ein Messwert aus Ansicht A verwendet, aber der Messwert verweist auf ein Feld aus Ansicht B. In diesem Fall verwendet Looker den Primärschlüssel aus Ansicht A, um diesen Messwert zu berechnen. Wenn Ihre Abfrage ein Fanout umfasst, ist dies möglicherweise nicht der richtige Primärschlüssel. Weitere Informationen zu Fanouts findest du in unserem zugehörigen Communitybeitrag.

Schnelle Fehlerbehebung

Zur Behebung dieses Problems fügen Sie dem Problemmesswert den Primärschlüssel aus Ansicht B mit dem Parameter sql_distinct_key hinzu.

Was passiert, wenn keiner der aufgeführten Ursachen zutrifft, der Fehler aber weiterhin auftritt?

Es gibt eine sehr spezielle Situation, in der Ihr Primärschlüssel eindeutig sein kann, und die anderen Ursachen dieses Problems treffen nicht auf Ihre Abfrage zu, der Fehler tritt jedoch weiterhin auf. Zunächst umfasst Ihre Abfrage mehrere Joins von relationship: one_to_many. Zweitens verweist einer der Messwerte in Ihrer Abfrage auf eine Dimension, die Werte aus mehreren verknüpften Datenansichten kombiniert.

Um dieses Problem zu beheben, notieren Sie sich diese Messung und gehen Sie dann so vor:

  1. Suchen Sie die Dimension innerhalb des Messwerts, in der Werte aus mehreren verknüpften Datenansichten kombiniert werden.
  2. Suchen Sie die Ansichten, auf die diese Dimension verweist.
  3. Verketten Sie die Primärschlüssel aus diesen Ansichten mithilfe der Verkettungsfunktion Ihres SQL-Dialekts.
  4. Fügen Sie diesen verketteten Schlüssel in einen sql_distinct_key-Parameter für den Messwert ein, der das Problem verursacht hat.