主键

用量

视图:view_name {
dimension: field_name {
primary_key: yes
}
}
层次结构
primary_key
可能的字段类型
维度

接受
布尔值(是或否)

定义

primary_key 参数指定维度作为其视图的主键。默认值为 false。例如:

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

primary_key 参数具有以下质量和要求:

  • 帮助 Looker 避免不必要的 GROUP BY 子句。
  • 必须确保 foreign_key 参数正常运行。
  • 为使对称汇总正常运行,必须使用此索引。当您使用衡量(汇总)联接视图时,必须在联接两侧定义 primary_key正确计算汇总
  • 不能是指定了多个 timeframedimension_group

创建复合主键

如果主键由多个列组成,您可以创建一个将这些列串联的维度,然后将其声明为主键。例如:

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

CONCAT 适用于某些数据库(如 MySQL),但其他数据库可能有不同的等效项。例如,Redshift 使用 || 作为串联运算符。

使用永久性派生表 (PDT) 创建主键

如果没有将唯一行标识为主键的合理方式,您可以创建一个持久派生表 (PDT) 来生成唯一 ID。例如,以下派生表将表的行号用作主键:

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