共用方式為


指標視圖中的可組合性

本頁說明可組合性在指標檢視中的運作方式,並提供範例,說明如何透過在單一檢視中建置維度、量值和聯結來撰寫邏輯。

概觀

指標檢視是可組合的,這表示您可以定義分層、可重複使用的邏輯。 您可以建立以現有維度和度量為基礎的新定義,而不是從頭開始編寫每個定義。

透過可組合性,您可以:

  • 於新維度中引用先前定義的維度
  • 在新量值中參考任何維度或先前定義的量值
  • 在度量視圖中定義的聯結中參照欄位

可組合性可協助您避免重複、簡化指標定義,並支援更複雜的分析,而無需每次都需要原始 SQL。

指標可組合性

可組合性 是透過重複使用更簡單的基礎量度來建立複雜指標的原則。 您無需為每個衍生 KPI 編寫和維護複雜的巢狀 SQL 邏輯,而是定義一次核心「原子」量值,然後在其他更複雜的計算中參考它們。 這種方法可大幅改善語意層的一致性可稽核性和維護

可組合性的基礎是 MEASURE() 函數,它允許量值定義參考相同度量檢視中定義的任何其他量值。

定義具有可組合性的量值

可組合性是在 measures 指標檢視 YAML 的區段中實作。

量值類型 Description Example
Atomic 來源資料行上的簡單、直接彙總。 這些構成了基礎構件。 SUM(o_totalprice)
組成 使用 MEASURE() 函數的數學運算式,將一個或多個其他量值組合起來。 MEASURE(Total Revenue) / MEASURE(Order Count)

範例:平均訂單價值 (AOV)

要計算 平均訂單價值 (AOV),您需要兩個度量: Total RevenueOrder Count

source: samples.tpch.orders

measures:
  # Total Revenue
  - name: total_revenue
    expr: SUM(o_totalprice)
    comment: The gross total value of all orders.
    display_name: 'Total Revenue'

  # Order Count
  - name: order_count
    expr: COUNT(1)
    comment: The total number of line items or orders.
    display_name: 'Order Count'

  # Composed Measure: Average Order Value (AOV)
  - name: avg_order_value
    # Defines AOV as Total Revenue divided by Order Count
    expr: MEASURE(total_revenue) / MEASURE(order_count)
    comment: Total revenue divided by the number of orders.
    display_name: 'Avg Order Value'

在此範例中,如果 total_revenue 的定義發生變更(例如,如果新增了排除稅金的篩選器),avg_order_value 會自動繼承該變更,確保 AOV 指標與新的業務規則保持一致。

具有條件邏輯的可組合性

您可以使用可組合性來建立複雜的比率、條件百分比和成長率,而無需依賴視窗函數進行簡單的週期比較計算。

範例:履行率

若要計算 履行率 (已履行訂單/訂單總數),請先使用子句定義 FILTER 已完成訂單的度量。

source: samples.tpch.orders

measures:
  # Total Orders (denominator)
  - name: total_orders
    expr: COUNT(1)
    comment: Total volume of orders regardless of status.

  #  Fulfilled Orders (numerator)
  - name: fulfilled_orders
    expr: COUNT(1) FILTER (WHERE o_orderstatus = 'F')
    comment: Only includes orders marked as fulfilled.

  # Composed Measure: Fulfillment Rate (Ratio)
  - name: fulfillment_rate
    expr: MEASURE(fulfilled_orders) / MEASURE(total_orders)
    display_name: 'Order Fulfillment Rate'
    format:
      type: percentage # Using semantic metadata to format as a percent

使用可組合性的最佳實務

  1. 先定義原子量值: 在定義任何參考基本量值之前,請務必先建立基本量值 (SUMCOUNTAVG)。
  2. 為了一致性,請使用MEASURE()MEASURE()中參考另一個指標的計算時,請始終使用expr函數。 請勿嘗試手動重複彙總邏輯 (例如,如果分子和分母的量值已存在,請避免 SUM(a) / COUNT(b) 使用)。
  3. 優先考慮可讀性:expr對於組合量值,讀起來應該像 KPI 的數學公式。 例如,比 MEASURE(Gross Profit) / MEASURE(Total Revenue) 單一複雜的 SQL 運算式更清楚且更容易稽核。
  4. 結合語義元資料: 撰寫比率後,使用 語意中繼資料 (如範例所示 fulfillment_rate )自動將結果格式化為下游工具的百分比或貨幣。 請參閱在度量視圖中使用語意中繼資料。