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 プロジェクトでデータベース テーブル列を定義する。その後、プロジェクト内の別の場所で ${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 ディメンションを参照するほかのすべてのフィールドに自動的に伝播されます。