Como maximizar a reutilização de código com o DRY LookML: defina campos uma vez e use operadores de substituição em todos os lugares

As definições de campo do LookML podem mudar com o tempo. Por exemplo, o nome de uma coluna do banco de dados pode mudar, ou talvez você precise mudar a definição de um campo do LookML por outros motivos.

Se você usar a sintaxe {TABLE}.field_name para fazer referência a uma coluna do banco de dados diretamente em vários lugares, será necessário atualizar cada referência manualmente. Os campos que fazem referência a essa dimensão podem ser corrompidos se você esquecer de atualizá-los, e o Looker vai mostrar um erro:

O Looker mostra o erro "Coluna desconhecida" order_items.sale_price na lista de campos.

Para tornar seus projetos do LookML mais eficientes e fáceis de manter, defina campos em um só lugar e use o operador de substituição ($) para fazer referência a esses campos em todos os outros.

Esta página mostra um exemplo de uso do operador de substituição (com a sintaxe ${field_name}) para referenciar uma única dimensão nas definições de vários campos do LookML.

Ingredientes

Pré-requisitos

Exemplo: fazer referência à coluna do banco de dados subjacente apenas uma vez para uma dimensão

Defina uma coluna de tabela de banco de dados em um projeto da LookML usando a sintaxe ${TABLE}.field_name no parâmetro sql da dimensão. Em seguida, faça referência à dimensão usando a sintaxe ${field_name} ou ${view_name.field_name} em outro lugar do projeto. Isso permite manter a definição do LookML da coluna do banco de dados em um só lugar (a dimensão ${TABLE}.field_name original), o que é útil se você precisar fazer referência a ela em vários lugares do projeto.

Por exemplo, use a sintaxe ${TABLE}.sale_price para definir uma dimensão base chamada sale_price em uma visualização chamada order_items:


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

Ao definir outros campos que fazem referência à dimensão sale_price, você pode usar a sintaxe ${sale_price} na visualização order_items ou a sintaxe ${order_items.sale_price} para fazer referência à dimensão sale_price em outras visualizações.


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

Neste exemplo, se o nome da coluna da dimensão sale_price mudar, você só vai precisar atualizar a referência ${TABLE}.sale_price uma vez, na definição da dimensão sale_price de base. Essa mudança será propagada automaticamente para os campos profit, item_gross_margin e total_sale_price, bem como para todos os outros campos que fazem referência à dimensão sale_price.