Quando definisci calcoli complessi in LookML, può essere utile suddividerli in passaggi intermedi che prevedono calcoli più semplici. Creando misure intermedie, rendi i calcoli più leggibili, più facili da gestire e meno soggetti a errori, poiché devi solo assicurarti che ogni calcolo intermedio sia corretto in un'unica posizione.
Questa pagina fornisce un esempio di come rendere i calcoli in LookML più leggibili e gestibili definendo misure intermedie per suddividere i calcoli complessi in passaggi più piccoli e gestibili.
Ingredienti
- Il parametro
measure
di LookML - Il parametro
sql
di una misura - Una misura di
type: sum
- Una misura di
type: number
- Il parametro
hidden
di LookML (per i campi)
Prerequisiti
Esempio: suddividere un calcolo complesso in misure intermedie
Supponiamo che tu abbia un'azienda che vende prodotti online e che tu voglia definire misure per calcolare il profitto totale e i dividendi degli azionisti. Un modo per farlo è definire due misure: una misura total_profit
e una misura shareholder_dividends
, come segue:
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})) ;;
In questo esempio, il calcolo SUM(${orders.sale_price}) - SUM(${employees.salary}) - SUM(${products.cost})
viene riutilizzato nel parametro sql
per entrambe le misure. Se devi aggiornare la definizione di questo calcolo, ad esempio per correggere un errore, devi aggiornare il calcolo manualmente per entrambe le misure.
Puoi semplificare la gestione di queste definizioni di misura riutilizzando la misura total_profit
all'interno del calcolo della misura 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} ;;
Ti consigliamo di suddividere il calcolo in total_profit
in misure ancora più semplici che possono essere riutilizzate in altri calcoli. Ad esempio, puoi creare misure di type: sum
chiamate total_sales
, total_revenue
, total_cost
e 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} ;;
}
Puoi quindi riutilizzare i campi intermedi che hai definito come segue:
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} ;;
}
Anche se hai definito più misure, queste misure intermedie possono essere riutilizzate in altri calcoli e sarà più facile correggere un errore o apportare modifiche ai calcoli utilizzati in più misure.