Como maximizar a reutilização de códigos com o DRY LookML: como definir medidas reutilizáveis para cálculos complexos

Ao definir cálculos complexos no LookML, pode ser útil dividi-los em etapas intermediárias que envolvem cálculos mais simples. Ao criar medidas intermediárias, você torna seus cálculos mais legíveis, fáceis de manter e menos propensos a erros, pois só precisa garantir que cada cálculo intermediário esteja correto em um só lugar.

Nesta página, fornecemos um exemplo de como tornar seus cálculos no LookML mais legíveis e fáceis de manter definindo medidas intermediárias para dividir cálculos complexos em etapas menores e mais gerenciáveis.

Componentes

Pré-requisitos

Exemplo: divisão de um cálculo complexo em medidas intermediárias

Suponha que você tenha uma empresa que vende produtos on-line e queira definir medidas para calcular o lucro total e os dividendos para os acionistas. Uma maneira de fazer isso seria definir duas medidas: total_profit e shareholder_dividends, da seguinte maneira:


measure: total_profit {
  type: number
  sql: SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost}) ;;
}

measure: shareholder_dividends
  description: "We give shareholders 60% of our total profits."
  type: number
  sql: 0.6 * (SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost})) ;;

Neste exemplo, o cálculo SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost}) é reutilizado no parâmetro sql para as duas medidas. Se você precisar atualizar a definição desse cálculo, como para corrigir um erro, será necessário atualizar o cálculo manualmente para as duas medidas.

Para facilitar a manutenção dessas definições de medida, reutilize a medida total_profit no cálculo da shareholder_dividends:


measure: total_profit {
  type: number
  sql: SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost}) ;;
}

measure: shareholder_dividends
  description: "We give shareholders 60% of our total profits."
  type: number
  sql: 0.6 * ${total_profit} ;;

É recomendado dividir o cálculo em total_profit em medidas ainda mais simples que podem ser reutilizadas em outros cálculos. Por exemplo, você pode criar medidas de type: sum chamadas total_sales, total_revenue, total_cost e total_salary:


measure: total_sales {
  hidden: yes
  type: sum
  sql: ${orders.sale_price} ;;
}

measure: total_revenue {
  hidden: yes
  type: number
  sql: ${total_sales} ;;
}

measure: total_cost {
  hidden: yes
  type: sum
  sql: ${products.cost} ;;
}

measure: total_salary {
  hidden: yes
  type: sum
  sql: ${employees.salary} ;;
}

Em seguida, você poderá reutilizar os campos intermediários definidos da seguinte forma:


measure: total_expenses {
  type: number
  sql: ${total_cost} + ${total_salary} ;;
}

measure: total_profit {
  type: number
  sql: ${total_revenue} - ${total_expenses} ;;
}

measure: shareholder_dividends {
  description: "We give shareholders 60% of our total profits."
  type: number
  sql: 0.6 * ${total_profit} ;;
}

Embora você tenha definido mais medidas, essas medidas intermediárias podem ser reutilizadas em outros cálculos, e será mais fácil corrigir um erro ou fazer alterações nos cálculos usados em várias medidas.