透過 DRY LookML 盡量提高程式碼可重用性:為多種用途自訂單一基本檢視畫面

假設您有許多使用者共用一個「探索」頁面,但他們的使用情境因所屬團隊或地區而異。每位使用者都只想查看與其用途相關的欄位。為了滿足使用者的多樣化需求,您可以使用 LookML 精修功能自訂現有的檢視畫面和探索,而不必修改原始 LookML。接著,您可以將這些精緻的檢視畫面和探索內容,加入專屬的模型檔案,以便根據使用者的不同需求進行自訂。

本頁提供範例,說明如何使用 LookML 精修功能自訂單一基礎檢視畫面,並為貴公司內的兩個團隊建立不同的探索。並提供精修內容中隱藏和新增欄位的範例。

食材

事前準備

範例:從相同的基本檢視畫面建立多個自訂的探索

假設您有一個包含客戶、購買、運送和位置資料的「銷售」探索報表。貴公司的行銷和物流團隊都需要探索這項資料,但他們各自專注於 Sales Explore 中的不同欄位。

您希望在「探索」欄位挑選器中,只顯示對各團隊有用的欄位,以利探索。為此,您可以為「銷售」探索和其依據的 sales 檢視畫面定義兩種不同的精確化項目。行銷團隊的 Explore 可顯示與客戶和購買趨勢相關的欄位,而物流團隊的 Explore 則可顯示與運送和位置相關的欄位。您也可以為每個精細檢視畫面新增欄位,以滿足各團隊的需求。

目前,「銷售」探索功能的欄位挑選器會顯示「銷售」檢視畫面中的所有欄位:

「Sales」檢視包含建立、送達、退貨和出貨日期的欄位,以及 ID、利潤、狀態、平均和總銷售價格,以及計數。

欄位挑選工具也會顯示已彙整的「使用者」檢視畫面中的所有欄位:

「使用者」檢視畫面包含年齡、城市、國家/地區、建立日期、電子郵件、名字、姓氏、ID、州/省、郵遞區號和計數的欄位。

您可以精簡 sales 檢視畫面,建立兩個個別的探索,只包含行銷和物流團隊感興趣的欄位,步驟如下:

  1. 建立新的 LookML 檔案,在本例中為名為 base_analysis.lkml 的檔案,其中包含「Sales」探索的 LookML,該探索是根據 sales 檢視表和已彙整的 users 檢視表建立。由於您想使用基礎 sales 探索和相應檢視畫面,為每個團隊建立自訂探索,因此可以在單一位置 (例如單一檔案) 定義所有共用欄位和資源。

    
    # base_analysis.lkml
    
    include: "views/sales.view.lkml"
    include: "views/inventory_items.view.lkml"
    include: "views/users.view.lkml"
    
    explore: sales {
      join: inventory_items {
        type: left_outer
        sql_on: ${sales.inventory_item_id} = ${inventory_items.id} ;;
        relationship: many_to_one
      }
    
      join: users {
        type: left_outer
        sql_on: ${sales.user_id} = ${users.id} ;;
        relationship: many_to_one
      }
    }
    
  2. 請建立兩個獨立檔案,用來收納您為各團隊定義的 Sales Explore 精進項目。您可以將檔案命名為 marketing_analysis.lkmllogistics_analysis.lkml。下方的 LookML 程式碼會精進先前所示 base_analysis.lkml 檔案中定義的基本 sales 探索,在名為 marketing_analysis.lkml 的新檔案中新增「行銷團隊的銷售分析」標籤。陳述式 include: "/base/base_analysis.lkml" 可讓 base_analysis.lkml 檔案的內容在 marketing_analysis.lkml 檔案中供參考。

    
    # marketing_analysis.lkml
    
    include: "/base/base_analysis.lkml"
    
    explore: +sales {
      label: "Sales Analysis for Marketing Team"
    }
    
    
  3. 為每個團隊建立個別的模型檔案,例如 ecommerce_marketing.modelecommerce_logistics.model。您可以將不同的精進項目放入各團隊專屬的模型,藉此多次精進相同的檢視畫面和探索,而不會覆寫為某個團隊用途而進行的自訂設定。詳情請參閱 LookML 精修項目說明文件頁面。

  4. 使用 include 參數,在 ecommerce_marketing.model 模型中加入 marketing_analysis.lkml,並在 ecommerce_logistics.model 模型中加入 logistics_analysis.lkml

  5. 視需要在 marketing_analysis.lkmllogistics_analysis.lkml 檔案中加入其他精細設定。舉例來說,您可以為每個團隊的經過精簡的探索功能隱藏不必要的欄位 ,並新增欄位

您可以選擇讓 Looker 管理員為每個專屬模型設定模型存取權,為特定團隊提供 Explore 層級存取權。

在精修的探索中隱藏不必要的欄位

您可以在 marketing_analysis.lkml 檔案中,將 sales 檢視畫面精細化,如下所示,隱藏「Returned」、「Shipped」、「Delivered」和「Created」維度群組,以及「Status」維度,因為行銷團隊不會使用這些欄位:


# marketing_analysis.lkml

include: "/base/base_analysis.lkml"

explore: +sales {
  label: "Sales Analysis for Marketing Team"
}

view: +sales
  dimension_group: returned {
    hidden: yes
  }

  dimension_group: shipped {
    hidden: yes
  }

  dimension_group: delivered {
    hidden: yes
  }

  dimension_group: created {
    hidden: yes
  }

  dimension: status {
    hidden: yes
  }
}

同樣地,您也可以在 logistics_analysis.lkml 檔案中使用下列 LookML,隱藏物流團隊不需要的欄位 (例如「Profit」、「Sale Price」和「Average Sale Price」):


# logistics_analysis.lkml

include: "/base/base_analysis.lkml"

explore: +sales {
  label: "Sales Analysis for Logistics Team"
}

view: +sales {
  dimension: profit {
    hidden: yes
  }

  dimension: sale_price {
    hidden: yes
  }

  measure: average_sale_price {
    hidden: yes
  }
}

由於物流團隊不需要查看顧客的個人資訊 (例如姓名、年齡或電子郵件地址),您也可以在 logistics_analysis.lkml 檔案中為已彙整的 users 檢視畫面新增精確化項目,在「探索」中隱藏這些欄位:

  view: +users {
    dimension: age {
    hidden: yes
  }

  dimension: email {
    hidden: yes
  }

  dimension: first_name {
    hidden: yes
  }

  dimension: last_name {
    hidden: yes
  }

  dimension_group: created {
    hidden: yes
  }
}

在精緻化探索中新增欄位

您也可以在精簡的 sales 檢視畫面中,建立行銷團隊感興趣的新欄位。舉例來說,您可以在精簡的 sales 檢視畫面中,新增「平均銷售價格」、「總銷售價格」和「每位使用者的平均支出金額」欄位:

「銷售」檢視畫面會列出 ID、利潤、銷售價格和計數,以及新的平均銷售價格、每位使用者的平均支出和總銷售價格欄位。

您可以使用下列 LookML,將這些欄位新增至 marketing_analysis.lkml 檔案中經過精簡的 sales 檢視畫面:


# marketing_analysis.lkml

view: +sales {
  measure: average_sale_price {
    type: average
    value_format_name: usd
    sql: ${sale_price} ;;
    drill_fields: [detail*]
  }

  measure: total_sale_price {
    type: sum
    value_format_name: usd
    sql: ${sale_price} ;;
    drill_fields: [detail*]
  }

  measure: average_spend_per_user {
    type: number
    value_format_name: usd
    sql: 1.0 * ${total_sale_price} / NULLIF(${users.count},0) ;;
    drill_fields: [detail*]
  }
}

您建立的行銷探索會包含「Sales」檢視畫面下的全新欄位,以及已彙整的「Users」檢視畫面中的欄位。行銷團隊不需要「Returned」、「Shipped」、「Delivered」和「Created」維度群組,因此這些維度群組和「Status」維度會隱藏。

同樣地,您也可以為物流團隊建立有用的新欄位,例如「運送時間區間」和「平均運送時間」

物流團隊的 Explore 功能現在會列出新的「Shipping Time Buckets」和「Average Shipping Time」欄位,以及其他運送和使用者位置欄位。

您可以使用下列 LookML,將這些欄位新增至 logistics_analysis.lkml 檔案中經過精簡的 sales 檢視畫面:


# logistics_analysis.lkml

view: +sales {
  dimension: shipping_time_buckets {
    case: {
      when: {
        sql: ${shipping_time} <= 7 ;;
        label: "One Week"
      }
      when: {
        sql: ${shipping_time} > 7 AND ${shipping_time} <= 14 ;;
        label: "Two Weeks"
      }
      when: {
        sql:  ${shipping_time} > 14 ;;
        label: "Over Two Weeks"
      }
      else: "Note Shipped"
    }
  }

  measure: average_shipping_time {
    type: average
    value_format_name: decimal_4
    sql: ${shipping_time} ;;
  }
}

您建立的物流探索會包含「Sales」檢視畫面下的全新欄位,以及已彙整的「Users」檢視畫面中的欄位。利潤銷售價格平均銷售價格欄位來自「銷售」檢視畫面,而「年齡」、「電子郵件」、「名字」、「姓氏」和「建立時間」欄位來自「使用者」探索,由於物流團隊不需要這些欄位,因此已隱藏。

每個團隊現在都能根據自身需求,取得更符合需求的 Explore。雖然這種做法需要事先進行更多設定,但將核心資料集中管理,可以讓您更輕鬆地查看及使用資料。