LookML で複雑な計算を定義する場合は、より単純な計算を含む中間ステップに分割すると便利です。中間 measure を作成すると、各中間計算が 1 か所で正しいことを確認するだけで済むため、計算が読みやすく、管理が容易になり、エラーが発生しにくくなります。
このページでは、複雑な計算をより小さく管理しやすいステップに分割するために中間メジャーを定義することで、LookML での計算を読みやすく、管理しやすいものにする例について説明します。
材料
- LookML の
measure
パラメータ - measure の
sql
パラメータ type: sum
の measuretype: number
の measure- LookML の
hidden
パラメータ(フィールド用)
前提条件
例: 複雑な計算を中間 measure に分割する
オンラインで商品を販売する会社が、利益と配当の合計を計算するための measure を定義したいとします。これを行う 1 つの方法は、次のように total_profit
measure と shareholder_dividends
measure という 2 つの measure を定義することです。
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})) ;;
この例では、両方の measure の sql
パラメータで計算 SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost})
が再利用されます。エラーを修正するなど、この計算の定義を更新する必要がある場合は、両方の measure に対して計算を手動で更新する必要があります。
shareholder_dividends
measure の計算内で total_profit
measure を再利用することで、これらの measure 定義の管理を容易にできます。
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
の計算は、他の計算で再利用できるさらに単純な measure に分割できます。たとえば、total_sales
、total_revenue
、total_cost
、total_salary
という type: sum
の measure を作成できます。
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} ;;
}
すでに多くの measure を定義していますが、これらの中間 measure は他の計算でも再利用できます。また、誤りを簡単に修正したり、複数の measure で使用されている計算に変更を加えたりすることもできます。