在 LookML 中定义复杂的计算时,将其分解为涉及更简单计算的中间步骤会很有帮助。通过创建中间测量,您可以使计算更易于阅读、更易于维护并且更不容易出错,因为您只需确保每个中间计算在一个地方正确无误。
本页提供了一个示例,说明如何通过定义中间测量来将复杂的计算拆分为更小、更易于管理的步骤,从而提高 LookML 中计算的可读性和可维护性。
原料
- LookML
measure
参数 - 测量的
sql
参数 type: sum
的计量单位type: number
的衡量指标- LookML
hidden
参数(适用于字段)
前提条件
示例:将复杂的计算拆分为中间测量
假设您有一家在线销售产品的公司,您希望制定计算总利润和股东股息的衡量指标。一种方法是定义两个测量值: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_sales
、total_revenue
、total_cost
和 total_salary
的 type: 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} ;;
}
虽然您定义了更多测量值,但这些中间度量值可以在其他计算中重复使用,并且您可以更轻松地纠正错误或更改在多个测量值中使用的计算。