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 參數有下列限制:

  • 每個檢視畫面中,最多只能在一個欄位加入這個參數。
  • 如果 dimension_group 指定多個 timeframe,您就無法新增這個參數。

建立複合主鍵

如果主鍵由多個資料欄組成,您可以建立串連這些資料欄的維度,然後將該維度宣告為主鍵。例如:

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