primary_key

用法

view: 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,以便正确计算汇总

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

在扩展视图中定义新的主键

如果您使用 extends 参数来扩展视图,则基本视图中的主键将扩展到新视图。

如需将主键更改为新维度,请在新视图中向原始维度定义添加 primary_key: no,并向新视图中的新维度定义添加 primary_key: yes

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