clé_principale

Utilisation

view_name {
dimension: field_name {
primary_key: oui
}
}
Hiérarchie
primary_key
Types de champs possibles
Dimension

Acceptation
Valeur booléenne (oui ou non)

Définition

Le paramètre primary_key indique qu'une dimension est la clé primaire de sa vue. La valeur par défaut est false. Exemple :

dimension: id {
  primary_key: yes
  sql: ${TABLE}.id ;;
}

Le paramètre primary_key présente les qualités et les exigences suivantes:

  • Elle aide Looker à éviter les clauses GROUP BY inutiles.
  • est nécessaire au bon fonctionnement du paramètre foreign_key.
  • Est nécessaire au bon fonctionnement des agrégats symétriques. Lorsque vous associez des vues avec des mesures (agrégats), un primary_key doit être défini de chaque côté de la jointure pour calculer correctement les agrégations.
  • Ne peut pas être un dimension_group qui spécifie plusieurs timeframe.

Créer une clé primaire composée

Si vous avez une clé primaire composée de plusieurs colonnes, vous pouvez créer une dimension qui concatène ces colonnes, puis la déclarer comme clé primaire. Exemple :

dimension: primary_key {
  primary_key: yes
  sql: CONCAT(${TABLE}.promotion_id, ${TABLE}.sku) ;;
}

CONCAT fonctionne dans certaines bases de données, telles que MySQL, mais d'autres bases de données peuvent avoir un équivalent différent. Redshift, par exemple, utilise || comme opérateur de concaténation.

Utiliser une table dérivée persistante (PDT) pour créer une clé primaire

S'il n'existe aucun moyen raisonnable d'identifier une ligne unique en tant que clé primaire, vous pouvez créer une table dérivée persistante (PDT) pour générer un ID unique. Par exemple, la table dérivée suivante utilise le numéro de ligne de la table comme clé primaire:

view: transaction {
  # sql_table_name: warehouse.transaction
  derived_table: {
    sql: SELECT ROW_NUMBER as transaction_pk, * FROM warehouse.transaction ;;
    sql_trigger_value: SELECT CURRENT_DATE ;;
    indexes: [customer_id, product_id, salesperson_id, transaction_date]
  }

  dimension: transaction_pk {
    type: number
    primary_key: yes
    hidden: yes
    sql: ${TABLE}.transaction_pk ;;
    ...
  }
}