Maximizar a reutilização de código com o LookML DRY: defina campos uma vez e use operadores de substituição em qualquer lugar

As definições de campos LookML podem mudar ao longo do tempo. Por exemplo, o nome de uma coluna da base de dados pode mudar ou pode ter de alterar a definição de um campo LookML por outros motivos.

Se usar a sintaxe {TABLE}.field_name para fazer referência a uma coluna da base de dados diretamente em vários locais, tem de atualizar cada referência manualmente. Todos os campos que façam referência a essa dimensão podem falhar se se esquecer de os atualizar, e o Looker apresenta um erro:

O Looker apresenta o erro Unknown column order_items.sale_price in field list.

Para tornar os seus projetos LookML mais eficientes e fáceis de manter, pode definir campos num único local e usar o operador de substituição ($) para fazer referência a esses campos em qualquer outro lugar.

Esta página fornece um exemplo de utilização 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 da base de dados subjacente apenas uma vez para uma dimensão

Defina uma coluna de tabela da base de dados num projeto LookML uma vez usando a sintaxe ${TABLE}.field_name no parâmetro sql da dimensão. Em seguida, faça referência à dimensão através da sintaxe ${field_name} ou ${view_name.field_name} noutras partes do projeto. Isto permite-lhe manter a definição do LookML da coluna da base de dados num único local (a dimensão ${TABLE}.field_name original), o que é útil se precisar de fazer referência a ela em vários locais no seu projeto.

Por exemplo, pode usar a sintaxe ${TABLE}.sale_price para definir uma dimensão base denominada sale_price numa visualização denominada 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."
  }

Quando define outros campos que fazem referência à dimensão sale_price, pode usar a sintaxe ${sale_price} na vista order_items (ou usar a sintaxe ${order_items.sale_price} para fazer referência à dimensão sale_price noutras vistas).


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, só tem de atualizar a referência ${TABLE}.sale_price uma vez, na definição da dimensão base sale_price. Esta alteração é, em seguida, propagada automaticamente para os campos profit, item_gross_margin e total_sale_price, bem como para todos os outros campos que referenciam a dimensão sale_price.