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 パラメータには次の制限があります。

  • このパラメータを各ビューの複数のフィールドに追加することはできません。
  • 複数の 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 ;;
  }
}