Maximizar a reutilização do código com o LookML DRY: defina os 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 de banco de dados pode mudar ou talvez seja necessário alterar 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. Todos 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 "Desconhecido" da coluna order_items.sale_price na lista de campos.

Para tornar seus projetos do LookML mais eficientes e fáceis de manter, você pode definir campos em um só lugar e usar o operador de substituição ($) para se referir a esses campos em qualquer outro lugar.

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

Componentes

Pré-requisitos

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

Defina uma coluna da tabela do banco de dados em um projeto do 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, é possível usar a sintaxe ${sale_price} na visualização order_items (ou usar a sintaxe ${order_items.sale_price} para referenciar a 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.