本頁說明可組合性在指標檢視中的運作方式,並提供範例,說明如何透過在單一檢視中建置維度、量值和聯結來撰寫邏輯。
概觀
指標檢視是可組合的,這表示您可以定義分層、可重複使用的邏輯。 您可以建立以現有維度和度量為基礎的新定義,而不是從頭開始編寫每個定義。
透過可組合性,您可以:
- 於新維度中引用先前定義的維度
- 在新量值中參考任何維度或先前定義的量值
- 在度量視圖中定義的聯結中參照欄位
可組合性可協助您避免重複、簡化指標定義,並支援更複雜的分析,而無需每次都需要原始 SQL。
指標可組合性
可組合性 是透過重複使用更簡單的基礎量度來建立複雜指標的原則。 您無需為每個衍生 KPI 編寫和維護複雜的巢狀 SQL 邏輯,而是定義一次核心「原子」量值,然後在其他更複雜的計算中參考它們。 這種方法可大幅改善語意層的一致性、可稽核性和維護。
可組合性的基礎是 MEASURE() 函數,它允許量值定義參考相同度量檢視中定義的任何其他量值。
定義具有可組合性的量值
可組合性是在 measures 指標檢視 YAML 的區段中實作。
| 量值類型 | Description | Example |
|---|---|---|
| Atomic | 來源資料行上的簡單、直接彙總。 這些構成了基礎構件。 | SUM(o_totalprice) |
| 組成 | 使用 MEASURE() 函數的數學運算式,將一個或多個其他量值組合起來。 |
MEASURE(Total Revenue) / MEASURE(Order Count) |
範例:平均訂單價值 (AOV)
要計算 平均訂單價值 (AOV),您需要兩個度量: Total Revenue 和 Order 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
使用可組合性的最佳實務
-
先定義原子量值: 在定義任何參考基本量值之前,請務必先建立基本量值 (
SUM,COUNT,AVG)。 -
為了一致性,請使用
MEASURE():在MEASURE()中參考另一個指標的計算時,請始終使用expr函數。 請勿嘗試手動重複彙總邏輯 (例如,如果分子和分母的量值已存在,請避免SUM(a) / COUNT(b)使用)。 - 優先考慮可讀性:
expr對於組合量值,讀起來應該像 KPI 的數學公式。 例如,比MEASURE(Gross Profit) / MEASURE(Total Revenue)單一複雜的 SQL 運算式更清楚且更容易稽核。 -
結合語義元資料: 撰寫比率後,使用 語意中繼資料 (如範例所示
fulfillment_rate)自動將結果格式化為下游工具的百分比或貨幣。 請參閱在度量視圖中使用語意中繼資料。