primary_key

Utilizzo

view: view_name {
  dimension: field_name {
    primary_key: yes 
  }
}
Gerarchia
primary_key
Tipi di campi possibili
Dimensioni

Accetta
Un valore booleano (sì o no)

Definizione

Il parametro primary_key specifica che una dimensione è la chiave primaria della relativa visualizzazione. Il valore predefinito è false. Ad esempio:

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

Il parametro primary_key ha le seguenti qualità:

  • Aiuta Looker a evitare clausole GROUP BY non necessarie.
  • È necessario per il corretto funzionamento del parametro foreign_key.
  • È necessario per il corretto funzionamento degli aggregati simmetrici. Quando unisci le visualizzazioni con le misure (aggregazioni), è necessario definire un primary_key su ogni lato dell'unione per calcolare correttamente le aggregazioni.

Il parametro primary_key presenta le seguenti limitazioni:

  • Non puoi aggiungere questo parametro a più di un campo in ogni visualizzazione.
  • Non puoi aggiungere questo parametro a un dimension_group che specifica più di un timeframe.

Creazione di una chiave primaria composta

Se hai una chiave primaria composta da più colonne, puoi creare una dimensione che le concatena e dichiararla come chiave primaria. Ad esempio:

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

CONCAT funziona in alcuni database, come 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

Nei casi in cui non esiste un modo ragionevole per identificare una riga univoca come chiave primaria, puoi creare una tabella derivata persistente (PDT) per generare un ID univoco. Ad esempio, la seguente tabella derivata utilizza il numero di riga della tabella come chiave primaria:

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

Definizione di una nuova chiave primaria in una visualizzazione estesa

Se utilizzi il parametro extends per estendere una visualizzazione, la chiave primaria della visualizzazione di base verrà estesa alla nuova visualizzazione.

Per modificare la chiave primaria in una nuova dimensione, aggiungi primary_key: no alla definizione della dimensione originale nella nuova visualizzazione e aggiungi primary_key: yes alla definizione della nuova dimensione nella nuova visualizzazione.

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

view: new {
  extends: base

  dimension: old_primary_key {
    primary_key: no
  }

  dimension: new_primary_key {
    primary_key: yes
    sql: ${TABLE}.new_id ;;
  }
}