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
- Paramètre LookML
measure
- Paramètre
sql
d'une mesure - Mesure de
type: sum
- Mesure de
type: number
- Paramètre LookML
hidden
(pour les champs)
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.