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
- Parâmetro
measure
do LookML - O parâmetro
sql
de uma medição - Uma medida de
type: sum
- Uma medida de
type: number
- O parâmetro
hidden
do LookML (para campos)
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.