DRY LookML でのコードの再利用性の最大化: フィールドを 1 回だけ定義し、どこでも置換演算子を使用する

LookML フィールドの定義は時間の経過とともに変更される可能性があります。たとえば、データベースの列名が変更されたり、他の理由で LookML フィールドの定義を変更する必要が生じたりします。

構文 {TABLE}.field_name を使用して複数の場所からデータベース列を直接参照する場合は、各参照を手動で更新する必要があります。ディメンションの更新を忘れると、そのディメンションを参照するフィールドが失われ、Looker によってエラーが表示されます。

Looker に「フィールド リストに不明な列 order_items.sale_price があります」というエラーが表示される。

LookML プロジェクトをより効率的で保守しやすいものにするには、フィールドを 1 か所で定義し、そうしたフィールドを置換演算子($)を使用して他の場所で参照します。

このページでは、置換演算子の使用例(構文 ${field_name})を使用して、複数の LookML フィールドの定義で 1 つのディメンションを参照する例を示します。

材料

前提条件

例: ディメンションで基になるデータベース列を 1 回だけ参照する

ディメンションの sql パラメータで ${TABLE}.field_name 構文を使用して、LookML プロジェクトでデータベース テーブル列を 1 回定義します。次に、プロジェクトの他の場所で構文 ${field_name} または ${view_name.field_name} を使用してディメンションを参照します。これにより、データベース列の LookML 定義を 1 か所(元の ${TABLE}.field_name ディメンション)で維持できます。これは、プロジェクト内の複数の場所から参照する必要がある場合に便利です。

たとえば、構文 ${TABLE}.sale_price を使用して、order_items というビューに sale_price というベース ディメンションを定義できます。


  dimension: sale_price {
    type: number
    value_format_name: usd
    sql: ${TABLE}.sale_price ;;
    description: "The price at which an item is set to sell."
  }

sale_price ディメンションを参照するほかのフィールドを定義する場合は、order_items ビュー内で構文 ${sale_price} を使用できます(または、他のビューで sale_price ディメンションを参照するには構文 ${order_items.sale_price} を使用します)。


dimension: profit {
  type: number
  value_format_name: usd
  sql: ${sale_price} - ${inventory_items.cost} ;;
  description: "The difference between an item's sale price and an item's cost."
}

dimension: item_gross_margin {
  type: number
  value_format_name: percent_2
  sql: 1.0 * ${profit}/NULLIF(${sale_price},0) ;;
}

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
}

この例では、ディメンション sale_price の列名が変更された場合、ベース sale_price ディメンションの定義で ${TABLE}.sale_price 参照を一度だけ更新する必要があります。この変更は profit フィールド、item_gross_margin フィールド、total_sale_price フィールドと、sale_price ディメンションを参照するほかのすべてのフィールドに自動的に伝播されます。