Cuando definas cálculos complejos en LookML, puede ser útil dividirlos en pasos intermedios que impliquen cálculos más sencillos. Al crear medidas intermedias, las operaciones son más legibles, fáciles de mantener y menos propensas a errores, ya que solo tienes que asegurarte de que cada cálculo intermedio sea correcto en un solo lugar.
En esta página se ofrece un ejemplo de cómo puedes hacer que tus cálculos en LookML sean más legibles y fáciles de mantener definiendo medidas intermedias para dividir los cálculos complejos en pasos más pequeños y manejables.
Ingredientes
- Parámetro
measure
de LookML - El parámetro
sql
de una métrica - Una medida de
type: sum
- Una medida de
type: number
- El parámetro
hidden
de LookML (para campos)
Requisitos previos
Ejemplo: desglosar un cálculo complejo en medidas intermedias
Supongamos que tienes una empresa que vende productos online y quieres definir medidas para calcular el beneficio total y los dividendos de los accionistas. Una forma de hacerlo sería definir dos medidas: una de total_profit
y otra de shareholder_dividends
, como se indica a continuación:
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})) ;;
En este ejemplo, el cálculo SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost})
se reutiliza en el parámetro sql
de ambas medidas. Si necesitas actualizar la definición de este cálculo, por ejemplo, para corregir un error, tendrías que actualizarlo manualmente en ambas métricas.
Para que sea más fácil mantener estas definiciones de métricas, puede reutilizar la métrica total_profit
en el cálculo de la métrica 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} ;;
Puede dividir el cálculo de total_profit
en medidas aún más sencillas que se puedan reutilizar en otros cálculos. Por ejemplo, puedes crear medidas de type: sum
llamadas total_sales
, total_revenue
, total_cost
y 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} ;;
}
Después, puedes reutilizar los campos intermedios que hayas definido de la siguiente manera:
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} ;;
}
Aunque haya definido más medidas, estas medidas intermedias se pueden reutilizar en otros cálculos, y será más fácil corregir un error o hacer cambios en los cálculos que se usen en varias medidas.