Cuando definas cálculos complejos en LookML, puede ser útil dividirlos en pasos intermedios que impliquen cálculos más simples. Cuando creas medidas intermedias, tus cálculos son más legibles, fáciles de mantener y menos propensos a errores, ya que solo debes asegurarte de que cada cálculo intermedio sea correcto en un solo lugar.
En esta página, se proporciona 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 fáciles de administrar.
Componentes
- El parámetro
measure
de LookML - El parámetro
sql
de una medida - Una medida de
type: sum
- Una medida de
type: number
- El parámetro
hidden
de LookML (para campos)
Requisitos previos
Ejemplo: Cómo dividir un cálculo complejo en medidas intermedias
Supongamos que tienes una empresa que vende productos en línea y quieres definir medidas para calcular las ganancias totales y los dividendos de los accionistas. Una forma de hacerlo sería definir dos medidas: una medida total_profit
y una medida shareholder_dividends
, de la siguiente manera:
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
para ambas medidas. Si necesitas actualizar la definición de este cálculo, por ejemplo, para corregir un error, deberás actualizar el cálculo de forma manual para ambas medidas.
Para facilitar el mantenimiento de estas definiciones de medición, puedes volver a usar la medición total_profit
dentro del cálculo de la medición 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} ;;
Te recomendamos que dividas el cálculo en total_profit
en medidas aún más simples que se puedan volver a usar 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} ;;
}
Luego, puedes volver a usar los campos intermedios que definiste 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 definiste más medidas, estas medidas intermedias se pueden volver a usar en otros cálculos, y será más fácil corregir un error o realizar cambios en los cálculos que se usan en varias medidas.