Error: Valor no único/clave primaria (o sql_distinct_key), desbordamiento de valores 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 los siguientes problemas:

Clave primaria no única

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

Solución rápida

Una vez que identifiques las dimensiones de clave principal en tu consulta, puedes probarlas para verificar su 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 de 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 completamente únicos, es posible que debas concatenar 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. Este campo se puede usar 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 itera 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, es posible que haya una discrepancia de unicidad entre los parámetros sql_distinct_key y sql de esa medición.

Solución rápida

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

Haz referencia a campos en las vistas con distribuciones

Tu consulta puede usar una medición 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 medida. Si tu consulta involucra una distribución, es posible que esa no sea la clave primaria correcta a usar. (Para familiarizarte con los 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 medida del problema con el parámetro sql_distinct_key.

¿Qué sucede si no corresponde ninguna de las causas mencionadas, pero el error persiste?

Hay una situación muy específica en la que tu clave principal puede ser única, y las otras causas de este problema no se aplican a tu consulta, pero este error aún se produce. Primero, tu consulta involucrará varias uniones de relationship: one_to_many. En segundo lugar, 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, a continuación, sigue estos pasos:

  1. Encuentra 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 medida que causó el problema.