Utilizzo
dimension: field_name {
primary_key: sì
}
}
Gerarchia
primary_key |
Tipi di campi possibili
DimensioneAccetta
Una voce booleana (sì o no) |
Definizione
Il parametro primary_key
specifica che una dimensione è la chiave principale per la sua vista. Il valore predefinito è false
. Ad esempio:
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
Il parametro primary_key
ha le seguenti qualità e requisiti:
- Consente a Looker di evitare clausole
GROUP BY
non necessarie. - È necessario che il parametro
foreign_key
funzioni correttamente. - È necessario per il corretto funzionamento degli aggregati simmetrici. Quando unisci le visualizzazioni con misure (aggregate), per poter calcolare correttamente le aggregazioni è necessario definire un
primary_key
su ogni lato dell'unione. - Non può essere un
dimension_group
che specifica più di untimeframe
.
Creazione di una chiave primaria composta
Se hai una chiave primaria composta da più colonne, puoi creare una dimensione che concatena queste colonne, quindi dichiararla come chiave primaria. Ad esempio:
dimension: primary_key {
primary_key: yes
sql: CONCAT(${TABLE}.promotion_id, ${TABLE}.sku) ;;
}
CONCAT
funziona in alcuni database, ad esempio MySQL, ma altri database potrebbero avere un equivalente diverso. Redshift, ad esempio, utilizza||
come operatore di concatenazione.
Utilizzo di una tabella derivata permanente (PDT) per creare una chiave primaria
Se non esiste un modo ragionevole per identificare una riga univoca come chiave primaria, puoi creare una tabella derivata permanente (PDT) per generare un ID univoco. Ad esempio, la seguente tabella derivata utilizza il numero di riga della tabella per essere utilizzato come chiave principale:
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 ;;
...
}
}