Quando define cálculos complexos no LookML, pode ser útil dividi-los em passos intermédios que envolvem cálculos mais simples. Ao criar medidas intermédias, torna os seus cálculos mais legíveis, fáceis de manter e menos propensos a erros, uma vez que só tem de garantir que cada cálculo intermédio está correto num único local.
Esta página oferece um exemplo de como pode tornar os seus cálculos no LookML mais legíveis e fáceis de manter definindo medidas intermédias para dividir cálculos complexos em passos mais pequenos e mais fáceis de gerir.
Ingredientes
- 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 intermédias
Suponhamos que tem uma empresa que vende produtos online e quer definir medidas para calcular o lucro total e os dividendos dos acionistas. Uma forma de o fazer é definir duas medidas: uma medida total_profit
e uma medida shareholder_dividends
, da seguinte forma:
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 ambas as medidas. Se precisar de atualizar a definição deste cálculo, por exemplo, para corrigir um erro, tem de atualizar o cálculo manualmente para ambas as métricas.
Pode facilitar a manutenção destas definições de medidas reutilizando a medida total_profit
no cálculo da 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} ;;
Pode querer dividir o cálculo em total_profit
em medidas ainda mais simples que podem ser reutilizadas noutros cálculos. Por exemplo, pode criar medidas de type: sum
denominadas 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, pode reutilizar os campos intermédios que definiu 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 tenha definido mais medidas, estas medidas intermédias podem ser reutilizadas noutros cálculos, e é mais fácil corrigir um erro ou fazer alterações aos cálculos usados em várias medidas.