Utilisation
dimension: field_name {
primary_key: oui
}
}
Hiérarchie
primary_key |
Types de champs possibles
DimensionAcceptation
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 plusieurstimeframe
.
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 ;;
...
}
}