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ê se 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, 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 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 de destino apenas uma vez para uma dimensão

Defina uma coluna de tabela de 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 referenciá-la em vários locais no seu projeto.

Por exemplo, você pode usar a sintaxe ${TABLE}.sale_price para definir uma dimensão base com o nome sale_price em uma visualização com o nome 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 sale_price da dimensão 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.