用法
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 参数具有以下限制:
- 您无法在每个视图中将此参数添加到多个字段。
- 您无法将此参数添加到指定了多个
timeframe的dimension_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 ;;
}
}