Optimiser la réutilisation 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 à un seul endroit.

Cette page fournit un exemple illustrant comment rendre vos calculs dans LookML plus lisibles et plus faciles à gérer en définissant des mesures intermédiaires pour diviser les calculs complexes en étapes plus petites et plus faciles à gérer.

Composants

Prérequis

Exemple: Décomposer un calcul complexe en mesures intermédiaires

Supposons que vous ayez 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 aux 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 mettre à jour la définition de ce calcul, par exemple pour corriger une erreur, vous devez mettre à jour le calcul manuellement pour les deux mesures.

Vous pouvez faciliter la gestion de ces définitions de mesure 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 décomposer le calcul dans 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 davantage de mesures, ces mesures intermédiaires peuvent être réutilisées dans d'autres calculs et il sera plus facile de corriger une erreur ou d'apporter des modifications aux calculs utilisés dans plusieurs mesures.