Massimizzare la riusabilità 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 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

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.