Massimizzazione del riutilizzo del codice con LookML DRY: definizione di misure riutilizzabili per calcoli complessi

Quando definisci calcoli complessi in LookML, può essere utile suddividerli in passaggi intermedi che prevedono calcoli più semplici. Creando misure intermedie, rendi i tuoi 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 più gestibili.

Ingredienti

Prerequisiti

Esempio: suddividere un calcolo complesso in misure intermedie

Supponiamo che tu abbia una società che vende prodotti online e che tu voglia definire delle 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 indicato di seguito:


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 aggiornarlo manualmente per entrambe le misure.

Puoi semplificare la manutenzione di queste definizioni di misura riutilizzando la misura total_profit nel calcolo nella 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} ;;

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

Sebbene siano state definite più misure, queste misure intermedie possono essere riutilizzate nell'ambito di altri calcoli ed è più facile correggere un errore o apportare modifiche ai calcoli utilizzati in più misure.