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 os cálculos mais legíveis, fáceis de manter e menos propensos a erros, já que só precisa garantir que cada cálculo intermediário esteja correto em um só lugar.
Esta página mostra 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
- O parâmetro
measure
do LookML - O parâmetro
sql
de uma medida - Uma medida de
type: sum
- Uma medida de
type: number
- O parâmetro
hidden
do LookML (para campos)
Pré-requisitos
Exemplo: dividir 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 dos acionistas. Uma maneira de fazer isso é definir duas medições: 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, por exemplo, para corrigir um erro, terá que atualizar o cálculo manualmente para as duas medidas.
Para facilitar a manutenção dessas definições de medidas, reutilize a medida total_profit
no cálculo na medida 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} ;;
Talvez você queira dividir o cálculo em total_profit
em medidas ainda mais simples que possam ser reutilizadas em outros cálculos. Por exemplo, é possível 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} ;;
}
É possível reutilizar os campos intermediários definidos da seguinte maneira:
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.