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