DRY LookML でのコードの再利用性の最大化: 複雑な計算のために再利用可能な measure を定義する

LookML で複雑な計算を定義する場合は、より単純な計算を含む中間ステップに分割すると便利です。中間 measure を作成すると、各中間計算が 1 か所で正しいことを確認するだけで済むため、計算が読みやすく、管理が容易になり、エラーが発生しにくくなります。

このページでは、複雑な計算をより小さく管理しやすいステップに分割するために中間メジャーを定義することで、LookML での計算を読みやすく、管理しやすいものにするについて説明します。

材料

前提条件

例: 複雑な計算を中間 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_salestotal_revenuetotal_costtotal_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 で使用されている計算に変更を加えたりすることもできます。