透過 DRY LookML 盡量提高程式碼重複使用性:只需定義一次欄位,即可隨處使用替換運算子

LookML 欄位定義可能會隨時間而變更。舉例來說,資料庫欄位名稱可能會變更,或者您可能需要基於其他原因變更 LookML 欄位的定義。

如果您使用 {TABLE}.field_name 語法直接在多個位置參照資料庫資料欄,則必須手動更新每個參照。如果您忘記更新參照該維度的欄位,Looker 就會顯示錯誤訊息,導致這些欄位無法正常運作:

Looker 在欄位清單中顯示「Unknown column order_items.sale_price」錯誤。

如要讓 LookML 專案更有效率且更易於維護,您可以在單一位置定義欄位,並使用替換運算子 ($) 在其他位置參照這些欄位。

本頁提供使用替換運算子 (使用 ${field_name} 語法) 的範例,說明如何在多個 LookML 欄位的定義中參照單一維度。

食材

事前準備

範例:針對維度僅參照基礎資料庫資料欄一次

在 LookML 專案中使用維度的 sql 參數,一次使用 ${TABLE}.field_name 語法定義資料庫資料欄。接著,在專案的其他位置使用 ${field_name}${view_name.field_name} 語法來參照維度。這樣一來,您就能在同一個位置 (原始 ${TABLE}.field_name 維度) 維護資料庫資料欄的 LookML 定義,如果您需要在專案的多個位置參照該資料欄,這項做法就很實用。

舉例來說,您可以使用 ${TABLE}.sale_price 語法,在名為 order_items 的檢視畫面中定義名為 sale_price 的基本維度:


  dimension: sale_price {
    type: number
    value_format_name: usd
    sql: ${TABLE}.sale_price ;;
    description: "The price at which an item is set to sell."
  }

定義參照 sale_price 維度的其他欄位時,可以在 order_items 檢視畫面中使用 ${sale_price} 語法 (或使用 ${order_items.sale_price} 語法參照其他檢視畫面中的 sale_price 維度)。


dimension: profit {
  type: number
  value_format_name: usd
  sql: ${sale_price} - ${inventory_items.cost} ;;
  description: "The difference between an item's sale price and an item's cost."
}

dimension: item_gross_margin {
  type: number
  value_format_name: percent_2
  sql: 1.0 * ${profit}/NULLIF(${sale_price},0) ;;
}

measure: total_sale_price {
  type: sum
  value_format_name: usd
  sql: ${sale_price} ;;
}

在這個範例中,如果維度 sale_price 的欄名稱有所變更,您只需要在基礎 sale_price 維度的定義中更新 ${TABLE}.sale_price 參照一次。這項變更會自動套用至 profititem_gross_margintotal_sale_price 欄位,以及參照 sale_price 維度的所有其他欄位。