primary_key

Uso

view: view_name {
  dimension: field_name {
    primary_key: yes 
  }
}
Hierarquia
primary_key
Tipos de campo possíveis
Dimensão

Aceita
Um booleano (sim ou não)

Definição

O parâmetro primary_key especifica que uma dimensão é a chave primária da visualização. O valor padrão é false. Exemplo:

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

O parâmetro primary_key tem as seguintes qualidades:

  • Ajuda o Looker a evitar cláusulas GROUP BY desnecessárias.
  • É necessário para que o parâmetro foreign_key funcione corretamente.
  • É necessário para o funcionamento adequado de agregações simétricas. Ao unir visualizações com medidas (agregações), um primary_key precisa ser definido em cada lado da junção para calcular corretamente as agregações.

O parâmetro primary_key tem as seguintes limitações:

  • Não é possível adicionar esse parâmetro a mais de um campo em cada visualização.
  • Não é possível adicionar esse parâmetro a um dimension_group que especifica mais de um timeframe.

Como criar uma chave primária composta

Se você tiver uma chave primária composta por várias colunas, crie uma dimensão que concatene essas colunas e declare-a como sua chave primária. Exemplo:

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

O CONCAT funciona em alguns bancos de dados, como o MySQL, mas outros podem ter um equivalente diferente. O Redshift, por exemplo, usa || como operador de concatenação.

Usar uma tabela derivada permanente (PDT) para criar uma chave primária

Nos casos em que não há uma maneira razoável de identificar uma linha exclusiva como uma chave primária, é possível criar uma tabela derivada permanente (PDT) para gerar um ID exclusivo. Por exemplo, a tabela derivada a seguir usa o número da linha da tabela como uma chave primária:

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

Definir uma nova chave primária em uma visualização estendida

Se você usar o parâmetro extends para estender uma visualização, a chave primária da visualização de base será estendida para a nova visualização.

Para mudar a chave primária para uma nova dimensão, adicione primary_key: no à definição de dimensão original na nova visualização e primary_key: yes à definição de nova dimensão na nova visualização.

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