使用 DRY LookML 最大限度地提高代码可重复使用性:为复杂计算定义可重复使用的衡量标准

在 LookML 中定义复杂计算时,不妨将其拆分为涉及更简单计算的中间步骤。通过创建中间测量,您可以使计算更易于阅读、更易于维护且不易出错,因为您只需确保每个中间计算在一个位置正确无误即可。

本页提供了一个示例,说明如何通过定义中间测量来将复杂的计算拆分为更小、更易于管理的步骤,从而提高 LookML 中计算的可读性和可维护性。

成分

前提条件

示例:将复杂的计算拆分为中间测量

假设您经营一家在线销售产品的公司,并且想要定义一些衡量指标来计算总利润和股东分红。实现此目的的一种方法是定义两个测量:total_profit 测量和 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 * (SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost})) ;;

在此示例中,计算 SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost}) 会在两个测量的 sql 参数中重复使用。如果您需要更新此计算方式的定义(例如更正错误),则必须手动更新这两项指标的计算方式。

您可以通过在 shareholder_dividends 指标的计算中重复使用 total_profit 指标,使这些指标定义更易于维护:


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} ;;

您可能需要将 total_profit 中的计算拆分为更简单的测量,以便在其他计算中重复使用。例如,您可以创建名为 total_salestotal_revenuetotal_costtotal_salarytype: sum 衡量标准:


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} ;;
}

然后,您可以重复使用您定义的中间字段,如下所示:


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} ;;
}

虽然您定义了更多指标,但这些中间指标可以在其他计算中重复使用,这样您就可以更轻松地更正错误或对多个指标中使用的计算进行任何更改。