自訂 Looker Blocks

本頁面提供最佳做法和範例,說明如何根據特定業務需求調整下列 Cortex Framework Looker Blocks:

安裝

您可以透過幾種方式安裝 Cortex Framework Looker Blocks,詳情請參閱「部署 Looker Blocks」說明文件。不過,我們建議將存放區分叉,這是根據業務需求自訂區塊最簡單的方法。

Cortex Framework Looker 區塊採用分層方式建立,每一層都會在前一層的基礎上新增一小段邏輯:

  • 基礎層:系統產生的 LookML 檢視表,參照來源資料表。
  • 核心層:手寫變更,可新增欄位或修改基礎層欄位。
  • 邏輯層:探索不同檢視區塊的定義和聯結。

使用精修是這個分層方法和自訂作業的關鍵。為遵循 DRY (不要重複) 原則,系統會運用 extends常數。標籤、SQL 陳述式、HTML 和連結屬性的動態內容,都是使用 Liquid 範本語言生成。

Google 一般最佳做法:

檔案和資料夾整理

在 Looker 模塊中,每個資料夾都代表一組物件類型 (例如檢視區塊、探索、資訊主頁等)。每個個別物件都是在獨立檔案中定義。專案根目錄包含下列重要檔案:

  • .model」檔案
  • 資訊清單檔案
  • README 和其他 Markdown 檔案
  • Marketplace 檔案 (如果該 Block 也可在 Looker Marketplace 中取得)

檔案瀏覽器

圖 1:Looker Block 內的資料夾組織範例。

模型

模組化檔案管理可讓專案的 model 檔案保持精簡,並使用下列參數:

  1. 連結
  2. 包含

    包括下列類型的檔案:

    • 元件 (資料群組,named_value_formats 視情況)
    • 探索 (模型檔案中未定義探索)
    • 資訊主頁

Block 中使用的檢視區塊 include 陳述式是在每個個別的探索檔案中定義,而不是在這個位置,如下列範例所示:

connection: "@{CONNECTION_NAME}"

include: "/components/**/*.lkml"
include: "/explores/**/*.explore"
include: "/dashboards/**/*.dashboard"

資訊清單

資訊清單檔案會指定整個專案中參照的常數。以下列舉幾個用於積木的常數範例:

  • 連線名稱
  • 專案 ID
  • 報表資料集

Cortex Framework Looker Blocks 也會使用常數定義下列項目:

  • 查看標籤
  • 欄位標籤
  • HTML 格式
  • 網址連結
  • 資訊主頁名稱

查看為 Looker Block 定義的常數,並視需要修改任何值。系統會對參照常數的所有位置套用變更。

使用者屬性

部分 Looker Blocks 需要管理員在 Looker 執行個體中定義使用者屬性。您可以根據預設語言或幣別等使用者屬性,自訂每個使用者或群組的資訊主頁顯示方式。如要進一步瞭解必要使用者屬性,請參閱每個區塊的總覽

瀏覽次數

「Base」資料夾中的檢視畫面是使用「從資料表建立檢視畫面」自動產生。這些檔案的變更幅度很小:

  • 以常數取代專案 ID 和資料集名稱。
  • 根據巢狀記錄將檢視畫面移至個別檔案。
  • 移除所有不必要的下鑽欄位定義。

這些檢視區塊的重大修改 (例如標籤、新維度和指標) 是在「核心」資料夾中,使用精修擴充衍生資料表建立。

在核心資料夾中,檢視畫面會加上後置字元,指出檢視畫面的類型:

  • _rfn,以利改善。
  • _ext,需要擴充功能才能查看。
  • _sdt,適用於以 SQL 為基礎的衍生資料表。
  • _ndt 適用於原生衍生資料表。
  • _pdt 永久衍生資料表。
  • _xvw,用於從多個檢視區塊參照欄位。

後置字串範例

圖 2:表示檢視畫面類型的後置字元範例。

每個檢視定義開頭都有註解,提供背景資訊,包括說明、來源、參照、擴充欄位和其他相關附註。

註解

圖 3. 檢視定義中的註解範例。

巢狀重複記錄

如果基礎資料表包含巢狀重複記錄,Looker 會建立個別檢視區塊,取消這些記錄的巢狀結構。舉例來說,在 Oracle EBS Looker Block 中,sales_orders 資料表有名為 lines 的巢狀重複結構。Looker 會將這兩者視為不同的檢視區塊:sales_orderssales_orders__lines

如要在「探索」中加入這些未巢狀化的記錄,您必須使用 sql 屬性搭配 UNNEST 指令定義聯結。

UNNEST 指令

圖 4. 以下範例說明如何搭配使用 UNNEST 指令與「sql」屬性,進行彙整。

詳情請參閱「如何在 Looker 中建立巢狀 BigQuery 資料模型」。

Cortex Framework Looker Blocks 的檢視區塊和其他物件包含大量註解。為提升程式碼導覽和理解能力,建議使用 LookML 開發環境中的「摺疊 LookML」選項。

摺疊 LookML

圖 5. 按一下「摺疊 LookML」。

展開 LookML

圖 6. 點選即可展開 LookML。

再次摺疊

圖 7. 再次點選即可摺疊 LookML。

欄位

field 一詞是指 dimensionmeasurefilterparameter 等物件。在這些較新的區塊中,我們遵循下列原則:

  1. 維度名稱使用 snake_case (小寫,字與字之間加底線)。例如:customer_name
  2. 系統會使用基礎資料表的資料欄名稱來命名維度。標籤可以套用至維度,為維度提供方便業務使用的名稱。舉例來說,名為 division_hdr_spart 的維度可能會標示為「部門 ID」。
  3. 如果資料表有很多資料欄,系統預設會隱藏欄位。使用檢視區塊的精簡版,將 hidden 屬性設為「no」,即可在「探索」中顯示欄位子集。如果欄位未如預期顯示,編輯這個欄位屬性即可解決問題。
  4. View_labelgroup_label 屬性可用於整理 Explore 中的欄位 (如適用)。
  5. 如果欄位用於多個檢視畫面,標籤等屬性會在「通用」檢視畫面中建立,然後擴充至其他檢視畫面。這種做法可集中定義屬性,提高重複使用率。所有必要修改作業都會在「common」檢視畫面中管理,確保變更會反映在所有擴充「common」檢視畫面的檢視畫面中。
  6. 在多個探索或參照多個檢視區塊的欄位中使用的參數,會定義在具有 _xvw 後置字元的僅限欄位檢視區塊中。詳情請參閱「避免不同探索之間出現不一致的情況」。

編輯範例

本節提供常見的自訂範例。

取消隱藏欄位

基礎檢視畫面包含基礎資料表的所有維度。如果大部分維度都不需要顯示,系統會預設使用精簡功能隱藏所有欄位。只要將 fields_hidden_by_default 屬性設為「yes」,即可完成這項操作。系統已取消隱藏與內含 LookML 資訊主頁相關的欄位子集。以下範例會考量名為 sales_orders 的基礎檢視區塊,以及名為 item_posnr 的維度。

view: sales_order {
  sql_table_name: reporting.sales_order ;;

  dimension: item_posnr {
    type: string
    sql: ${TABLE}.Item_POSNR
  }
}

這個檢視區塊的精細度定義在 _rfn 後綴的檔案中。精簡設定會將檢視畫面屬性 fields_hidden_by_default 設為「yes」,表示所有欄位一開始都會隱藏。如要在檢視畫面中顯示 item_posnr 欄位,請將 hidden 屬性設為「no」。

view: +sales_order {
   fields_hidden_by_default: yes

   dimension: item_posnr {
     hidden: no
   }
}

變更參數檢視畫面的標籤

多個 Looker Blocks 會使用獨立檔案中定義的一組共用參數。舉例來說,Oracle EBS Block 會使用 otc_common_parameters_xvw 檔案。這個檢視畫面會顯示「🔍 篩選器」標籤,該標籤是在資訊清單檔案中定義為常數。

如要修改這項標籤,請按照下列步驟操作:

  1. 在資訊清單檔案中找出 label_view_for_filters 常數。
  2. 將常數值編輯為所選標籤。
  3. 儲存資訊清單檔案。 凡是參照 label_view_for_filters 常數的位置,都會自動反映這項變更。
Manifest

constant: label_view_for_filters {
  value: "My Filters"
}

或者,您也可以前往檢視 otc_common_parameters_xvw,然後將「label」屬性編輯為所選值。

view: otc_common_parameters_xvw {
  label: "My Filters"
}

新增度量單位

您可以直接在相關的精選產品中新增指標。以下範例顯示新增至銷售訂單精細化的新指標:

view: +sales_orders {

  measure: customer_count {
    type: count_distinct
    sql: ${customer_id}
   }
}

新增第二層分類標籤

新的精選結果可以根據現有的精選結果建立。請參考下列範例,瞭解如何精簡 sales_orders_rfn.view 檔案中的 sales_orders,建立 average_sales 評估指標:

include: "/views/base/sales_orders"
view: +sales_orders {
  measure: average_sales {
    type: average
    sql: ${order_value}
  }
}

如要建立第二個精修檔案,請按照下列步驟操作:

  1. 建立新的精修檔案:將檔案命名為 sales_orders_rfn2.view
  2. 加入第一個精修檔案:這會將 sales_orders_rfn 中的所有定義併入 sales_orders_rfn2
  3. 編輯標籤屬性:將 average_saleslabel 屬性變更為「平均支出」或任何其他所選標籤。
  4. 新增維度:在 sales_orders_rfn2.view 檔案中加入新維度的程式碼。

    include: "/views/core/sales_orders_rfn.view"
    view: +sales_orders {
    
      measure: average_sales {
        label: "Average Spend"
      }
    
      dimension: customer_name_with_id {
        type: string
        sql: CONCAT(${customer_id},' ',${customer_name})
      }
    }
    
  5. 在「探索」中加入第二個精修檔案:這會將 sales_orders_rfn2 中的所有定義和強化功能納入「探索」中。

    include: "/views/core/sales_orders_rfn2.view"
    explore: sales_orders {
    }
    

建立新的精修圖層

如果 Cortex Framework Looker Block 中定義的任何基礎檢視畫面不符合特定需求,您可以替換該畫面。您可以直接編輯 _rfn 檔案,移除不必要的欄位定義或新增欄位定義。

或者,建立新的精修檔案:

  1. 建立新的精修檔案:將檔案命名為 sales_invoices_rfn 並儲存。
  2. 納入基本檢視畫面:這會將基本檢視畫面 sales_invoices 中的所有定義併入 sales_invoices_rfn
  3. 新增所選自訂項目:請務必將維度定義為主鍵。

    include: "/views/base/sales_invoices.view"
    
    view: +sales_invoices {
    
      fields_hidden_by_default: yes
    
      dimension: invoice_id {
        hidden: no
        primary_key: yes
        value_format_name: id
      }
    
      dimension: business_unit_name {
        hidden: no
        sql: CONCAT(${business_unit_id}, ":",${TABLE}.BUSINESS_UNIT_NAME) ;;
      }
    }
    
  4. 在「探索」中加入新的精簡項目:在 include 屬性中使用新檔案,而非 Cortex Framework Looker Block 中提供的精簡項目。

    include: "/views/my_customizations/sales_invoices_rfn.view"
    
    explore: sales_invoices {
    }
    

編輯 LookML 資訊主頁篩選器

多個 LookML 資訊主頁共用的資訊主頁篩選器集,會定義在以 _template 為後置字元的資訊主頁中,並擴充至每個資訊主頁。擴充後,您可以視需要修改篩選器物件,以用於特定資訊主頁。

編輯所有資訊主頁

如要變更所有資訊主頁的篩選器類型,請找出定義篩選器的範本檔案。編輯 ui_config 類型和顯示屬性,以符合所選設定。這項變更會套用至所有擴充範本的資訊主頁。以下是 otc_template.dashboard 範例:

- dashboard: otc_template
  extension: required

  filters:
  - name: customer_country
    title: "Sold to Customer: Country"
    type: field_filter
    default_value: ''
    allow_multiple_values: true
    required: false
    ui_config:
      type: dropdown_menu
      display: popover
    explore: countries_md
    field: countries_md.country_name_landx

編輯特定資訊主頁

如要修改特定資訊主頁的篩選條件,請找出資訊主頁檔案,並一併加入篩選條件名稱和需要修改的選取屬性。這項變更只會套用至單一資訊主頁。舉例來說,如要變更 otc_order_status.dashboard 的標題、UI 類型和 customer_country 篩選器顯示方式,只有這些屬性會納入資訊主頁檔案。其餘屬性會從擴充範本繼承。

- dashboard: otc_order_status
  title: Order Status
  extends: otc_template

  filters:
  - name: customer_country
    title: "Customer Country"
    ui_config:
      type: dropdown_menu
      display: inline

如要進一步瞭解如何建立及修改 LookML 資訊主頁,請參閱「建立 LookML 資訊主頁」。