Optimiser la réutilisabilité du code avec DRY LookML: définir des mesures réutilisables pour les calculs complexes

Lorsque vous définissez des calculs complexes dans LookML, il peut être utile de les décomposer en étapes intermédiaires impliquant des calculs plus simples. En créant des mesures intermédiaires, vous rendez vos calculs plus lisibles, plus faciles à gérer et moins sujets aux erreurs, car vous n'avez qu'à vous assurer que chaque calcul intermédiaire est correct en un seul endroit.

Cette page fournit un exemple de la façon dont vous pouvez rendre vos calculs dans LookML plus lisibles et faciles à gérer en définissant des mesures intermédiaires pour décomposer des calculs complexes en étapes plus petites et plus faciles à gérer.

Composants

Prérequis

Exemple : Diviser un calcul complexe en mesures intermédiaires

Supposons que vous possédiez une entreprise qui vend des produits en ligne et que vous souhaitiez définir des mesures pour calculer le bénéfice total et les dividendes des actionnaires. Pour ce faire, vous pouvez définir deux mesures : une mesure total_profit et une mesure shareholder_dividends, comme suit :


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

Dans cet exemple, le calcul SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost}) est réutilisé dans le paramètre sql pour les deux mesures. Si vous devez modifier la définition de ce calcul, par exemple pour corriger une erreur, vous devrez modifier le calcul manuellement pour les deux mesures.

Vous pouvez faciliter la maintenance de ces définitions de mesures en réutilisant la mesure total_profit dans le calcul de la mesure 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 * ${total_profit} ;;

Vous pouvez diviser le calcul de total_profit en mesures encore plus simples qui peuvent être réutilisées dans d'autres calculs. Par exemple, vous pouvez créer des mesures de type: sum appelées total_sales, total_revenue, total_cost et total_salary :


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

Vous pouvez ensuite réutiliser les champs intermédiaires que vous avez définis comme suit :


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

Bien que vous ayez défini d'autres mesures, ces mesures intermédiaires peuvent être réutilisées dans d'autres calculs. Il sera ainsi plus facile de corriger une erreur ou d'apporter des modifications aux calculs utilisés dans plusieurs mesures.