Maximiza la reutilización de código con DRY LookML: Definición de medidas reutilizables para cálculos complejos

Cuando definas cálculos complejos en LookML, puede ser útil desglosarlos en pasos intermedios que impliquen cálculos más simples. Al crear medidas intermedias, tus cálculos serán más legibles, más fáciles de mantener y menos propensos a errores, ya que solo necesitas 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 mediante la definición de medidas intermedias para dividir los cálculos complejos en pasos más pequeños y manejables.

Componentes

Requisitos previos

Ejemplo: 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 mediciones: una de total_profit y una de 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 vuelve a usar en el parámetro sql para ambas mediciones. Si necesitas actualizar la definición de este cálculo, por ejemplo, para corregir un error, tendrás que actualizar el cálculo manualmente para ambas mediciones.

Puedes hacer que estas definiciones de medición sean más fáciles de mantener si reutilizas 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} ;;

Es posible que quieras dividir el cálculo de total_profit en medidas aún más simples que se pueden volver a usar en otros cálculos. Por ejemplo, puedes crear mediciones 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 hayas definido más medidas, estas medidas intermedias pueden reutilizarse en otros cálculos, y será más fácil corregir un error o realizar cualquier cambio en los cálculos que se usan en múltiples medidas.