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

Auf dieser Seite finden Sie Informationen zur Fehlerbehebung bei diesem Looker-Fehler:

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

Dieser Fehler kann verschiedene Ursachen haben:

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. Einen Primärschlüssel legen Sie mithilfe von primary_key: yes für eine Dimension fest. Es muss eine Dimension ohne wiederholte Werte sein.

Schnelle Fehlerbehebung

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

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

Wenn die Zählungen in dieser Abfrage übereinstimmen, ist der Primärschlüssel eindeutig. Wenn die Anzahl nicht übereinstimmt, ist der Primärschlüssel nicht eindeutig und wird in mehreren Zeilen angezeigt. Wählen Sie eine neue Dimension als Primärschlüssel aus oder erstellen Sie eine neue. Wenn keine einzelne Dimension ausschließlich eindeutige Werte enthält, müssen Sie möglicherweise Felder zusammenführen, um eine eigene Primärschlüsseldimension zu erstellen.

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

Wenn dieser Fehler bei einer abgeleiteten Tabelle auftritt, 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 durchläuft, um denselben 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 vom Typ sum_distinct ist, gibt es möglicherweise eine Abweichung bei der Eindeutigkeit zwischen den Parametern sql_distinct_key und sql dieses Messwerts.

Schnelle Fehlerbehebung

Weitere Informationen zu diesen Parametern finden Sie auf der Dokumentationsseite zu sum_distinct. Anforderungen.

Felder in verschiedenen Ansichten mit Verzweigungen referenzieren

In Ihrer Abfrage wird möglicherweise ein Messwert aus Ansicht A verwendet, der aber auf ein Feld aus Ansicht B verweist. In diesem Fall verwendet Looker den Primärschlüssel aus Ansicht A zur Berechnung dieses Messwerts. Wenn Ihre Abfrage einen Verzweigungspunkt enthält, ist dies möglicherweise nicht der richtige Primärschlüssel. Weitere Informationen zu Verzweigungen findest du in diesem Communitybeitrag.

Schnelle Fehlerbehebung

Fügen Sie dem Problemmesswert mit dem Parameter sql_distinct_key den Primärschlüssel aus Ansicht B hinzu, um dieses Problem zu beheben.

Was passiert, wenn keine der aufgeführten Ursachen zutrifft, der Fehler aber trotzdem auftritt?

Es gibt eine ganz bestimmte Situation, in der Ihr Primärschlüssel eindeutig sein kann und die anderen Ursachen dieses Problems nicht auf Ihre Abfrage zutreffen, der Fehler aber trotzdem auftritt. Erstens: Ihre Abfrage enthält mehrere Joins von relationship: one_to_many. Zweitens verweist einer der Kennzahlen in Ihrer Abfrage auf eine Dimension, die Werte aus mehreren verknüpften Datenansichten kombiniert.

Um dieses Problem zu beheben, notieren Sie sich den Messwert und gehen Sie dann so vor:

  1. Suchen Sie die Dimension im Messwert, in der Werte aus mehreren zusammengeführten Datenansichten kombiniert werden.
  2. Suchen Sie nach den Datenansichten, auf die diese Dimension verweist.
  3. Verbinden Sie die Primärschlüssel aus diesen Ansichten mithilfe der Koncatenationsfunktion Ihres SQL-Dialekts.
  4. Fügen Sie diesen zusammengesetzten Schlüssel in einen sql_distinct_key-Parameter für das Messwert-Element ein, das das Problem verursacht hat.