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

더 많은 측정을 정의했더라도 다른 계산 내에서 이러한 중간 측정을 재사용할 수 있으며 이를 통해 보다 쉽게 실수를 교정하거나 여러 측정에서 사용되는 계산을 변경할 수 있습니다.