Error: Valor no único o clave primaria (o sql_distinct_key), desbordamiento de valor o colisión cuando se calcula la suma

Esta página te ayudará a solucionar este error de Looker:

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

Este error puede deberse a uno de varios problemas:

Clave primaria no única

La causa más común de este error es que tu consulta involucra una clave primaria que no es única. Para especificar una clave primaria, usa primary_key: yes en una dimensión, que debe ser una dimensión sin valores repetidos.

Solución rápida

Una vez que identifiques las dimensiones clave primaria en tu consulta, puedes probar la unicidad en el ejecutor de SQL de Looker con esta consulta:

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

Si los recuentos en esta consulta coinciden, la clave primaria es única. Si los recuentos no coinciden, la clave primaria no es única y aparece en varias filas. Deberás elegir o crear una dimensión nueva como clave primaria. Si ninguna dimensión única contiene valores únicos, es posible que debas concatenar los campos para crear tu propia dimensión de clave primaria.

Usa row_number a fin de generar una clave primaria para una tabla derivada

Si recibes este error con una tabla derivada, puedes usar la función analítica row_number() en las bases de datos de Postgres y Redshift para crear un campo único. Luego, puedes usar este campo como clave 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 ;;
    }
  }
  

En MySQL, puedes usar una variable que itere cada fila para lograr el mismo efecto:

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

Uso incorrecto de sql_distinct_key

Si alguna de las mediciones de tu consulta es del tipo sum_distinct, puede haber una discrepancia de singularidad entre los parámetros sql_distinct_key y sql de esa medida.

Solución rápida

Consulta nuestra página de documentación de sum_distinct para conocer los requisitos de estos parámetros.

Referencia a campos en vistas con fanouts

Tu consulta puede usar una medida de la vista A, pero la medición hace referencia a un campo de la vista B. En esta situación, Looker usará la clave primaria de la vista A para calcular esa medición. Si tu consulta implica un fanout, es posible que esa no sea la clave primaria correcta que debes usar. (para familiarizarte con las fanouts, consulta nuestra publicación de Comunidad relacionada).

Solución rápida

Para resolver este problema, agrega la clave primaria de la vista B a la medición de problemas con el parámetro sql_distinct_key.

¿Qué sucede si ninguna de las causas mencionadas se aplica, pero el error aún ocurre?

Existe una situación muy específica en la que tu clave primaria puede ser única, y las otras causas de este problema no se aplican a tu consulta, pero este error aún ocurre. Primero, tu consulta incluirá varias uniones de relationship: one_to_many. Segundo, una de las mediciones de tu consulta hará referencia a una dimensión que combina valores de varias vistas unidas.

Para solucionar este problema, toma nota de esa medida y, luego, sigue estos pasos:

  1. Busca la dimensión dentro de la medición que combina valores de varias vistas unidas.
  2. Busca las vistas a las que hace referencia esa dimensión.
  3. Concatena las claves primarias de esas vistas usando la función de concatenación de tu dialecto SQL.
  4. Coloca la clave concatenada en un parámetro sql_distinct_key en la medición que causó el problema.