Looker 中的與前一段時期相比指標

週期性分析 (PoP) 是一種分析模式,可衡量當前情況,並與過去類似時間範圍的相同衡量指標進行比較。

對於支援期增率指標的方言,Looker 開發人員可以在 LookML 專案中新增期增率指標,以便在對應的 Looker 探索中進行期增率分析。

舉例來說,下列 Looker 探索查詢會顯示本月建立的訂單數量,以及去年建立的訂單數量、與去年的差異,以及與去年相比的百分比變化。您可以抽查值,驗證與前一年的比較結果。舉例來說,2012-03 的「去年訂單數」值與 2011-03 的「訂單數」值相同:

Looker 探索顯示 2012 年 3 月的「去年訂單」為 89,2011 年 3 月的「訂單數」也為 89。

如要將 PoP 衡量指標新增至 LookML 專案,Looker 開發人員必須建立 measuretype: period_over_period,並加入本頁面下一節所述的子參數

舉例來說,以下是 PoP 測量的 LookML,可提供前一年的訂單數:

  measure: order_count_last_year {
    type: period_over_period
    description: "Order count from the previous year"
    based_on: orders.count
    based_on_time: orders.created_year
    period: year
    kind: previous
  }

這項 PoP 措施具有下列屬性:

  • 這是以 based_on: orders.count 定義,因此 PoP 指標會提供前一個時間範圍的訂單數量資料。
  • 定義為 kind: previous,也就是提供前一時間範圍的訂單數量值 (而非前一時間範圍的訂單數量差異,或前一時間範圍的訂單數量變化百分比)。
  • 這項指標是以 period: year 定義,因此會提供與去年同期相近時間範圍內的訂單數。

PoP 評估指標的子參數

PoP 措施是 measuretype: period_over_period,包含下列章節所述的子參數:

如「使用 PoP 指標探索查詢」一節所述,PoP 指標會根據 PoP 指標的 LookML 定義和探索查詢中的欄位計算值。因此,在 LookML 中建立 PoP 衡量指標時,請遵循下列最佳做法:

  • 在 PoP 指標名稱或指標的 description 子參數中,向探索使用者提供 PoP 指標的 period
  • 在 PoP 指標名稱或指標的 description 子參數中,向 Explore 使用者提供 PoP 指標的 based_on 指標。

舉例來說,以下 PoP 評估指標名為 order_count_last_year,並附上說明,讓使用者瞭解這項指標提供的是前一年的訂單數量:

  measure: order_count_last_year {
    type: period_over_period
    description: "Order count from the previous year"
    based_on: orders.count
    based_on_time: orders.created_year
    period: year
    kind: previous
  }

based_on

使用 based_on 欄位指定 PoP 衡量指標所依據的 LookML 衡量指標。舉例來說,如要根據 orders.count 欄位建立 PoP 評估指標,請輸入下列內容:

    based_on: orders.count

orders.count為準的 PoP 指標會提供上一個時間範圍的訂單數量資訊,方便你比較目前和上一個時間範圍的銷售量。

您在 based on 欄位中指定的 LookML 評估指標必須屬於下列其中一種類型:

based_on_time

使用 based_on_time 子參數,向 Looker 提供時間欄位,以便計算 PoP 衡量指標值。這個時間欄位可以是下列任一項:

  • 時間型維度。如果您在 based_on_time 子參數中指定時間維度,使用者必須在所有使用 PoP 評估指標的查詢中,加入完全相同的時間維度。此外,時間型維度的時間範圍必須等於或小於 PoP 指標的 period 值。舉例來說,如果 PoP 評估指標是使用 based_on_time: created_month 定義,則 PoP 評估指標的 period 值不得為 weekdate
  • type: time維度群組的下列其中一個時間範圍:

    • year
    • fiscal_year
    • month
    • fiscal_quarter
    • quarter
    • week
    • date
    • raw

如果您在 based_on_time 子參數中指定維度群組時間範圍,您使用的特定時間範圍並不重要,只要將 PoP 評估指標指向 type: time 的維度群組,PoP 評估指標就能使用維度群組的基礎時間戳記。您無法從維度群組type: duration指定時間範圍;系統不支援時間長度類型維度群組,且會在探索中產生執行階段錯誤。

kind

使用 kind 參數指定 PoP 指標要對前一期進行的計算類型。您可以為 kind 指定下列其中一個值:

  • previous:(預設) 上個期間的值。
  • difference:兩個期間的差異 (目前期間減去上個期間)。
  • relative_change:與前一個週期相比的百分比變化。百分比變化的計算公式如下:

    $$ relativeChange = (current - previous)/previous $$

period

使用 period 子參數指定 PoP 比較的頻率,以及要回溯多長時間。舉例來說,以 period: year 定義的 PoP 指標會顯示前一年的值。如果您對每月訂單數執行「探索」查詢,period: year PoP 指標會顯示去年同月的資料,方便您比較 2025 年 11 月的訂單數與 2024 年 11 月的銷售量。

period 子參數支援下列值:

  • year
  • fiscal_year
  • quarter
  • fiscal_quarter
  • month
  • week
  • date

value_to_date

使用 value_to_date 子參數,指出 Looker 是否應在查詢執行時,使用目前時間範圍內經過的時間量,計算 PoP 衡量指標的值。value_to_date 子參數可以是 no (預設) 或 yes

  • 匯總資料時,no 值會假設整個時間範圍。
  • 如果值為 yes,系統會計算目前期間的觀察時間量,並套用至 PoP 指標。

舉例來說,如果以 value_to_date: yes 定義月度 PoP 指標,並在 6 月 6 日 13:10:00 執行含有 PoP 指標和日期時間範圍維度的探索查詢,Looker 會將 6 月 6 日經過的時間 (13 小時、10 分鐘和 0 秒) 套用至查詢中每個日期的計算。針對每個日期,Looker 會提供前 13 小時 10 分鐘的值。

如果您在 6 月 6 日下午 1:10:00 執行相同的「探索」查詢,且定義的 PoP 評估指標與 value_to_date: no 相同,Looker 會使用每個日期可用的所有資料,計算 PoP 的值。如果您想比較 6 月 6 日與上個月 6 日的值,請注意,由於 6 月 6 日尚未結束,13:10:00 後可能會有額外資料。

如需 value_to_date: yes 如何影響探索查詢結果的範例,請參閱「value_to_date 如何影響 PoP 評估值」。

如「使用 PoP 衡量指標的探索查詢需求」一節所述,當您執行含有 PoP 衡量指標的探索查詢時,Looker 會自動將查詢的最低時間範圍精細度套用至 PoP 衡量指標所用的時間範圍。如果探索查詢定義了 PoP 測量指標 (使用 value_to_date: yes),Looker 會採用查詢中最小的時間範圍維度,計算查詢執行時已過的時間範圍部分,然後將該部分套用至 PoP 測量指標的所有值。

探索含有 PoP 測量指標的查詢

系統會根據 PoP 衡量指標的 LookML 定義,以及 Explore 查詢中指定的時間範圍,計算 PoP 衡量指標。PoP 衡量指標會根據 Explore 查詢中選取的時間範圍調整計算方式。舉例來說,如果 PoP 指標是以 period: year 定義,且探索查詢包含 orders.created_month 時間範圍維度,PoP 指標會計算每月值,並比較 2025 年 1 月和 2024 年 1 月。如要查看年度值,您必須使用 PoP 指標和僅限 orders.created_year 時間範圍,執行探索查詢。

以下舉例說明 PoP 指標 period 如何與在探索查詢中選取的時間範圍互動:

  • 如果使用 period: year 定義 PoP 評估指標,並執行探索查詢 (時間範圍為一季),PoP 評估指標會傳回前一年同一季的值 (例如:2025 年第 1 季與 2024 年第 1 季的比較)。
  • 如果使用 period: year 定義 PoP 指標,並執行時間範圍為一個月的「探索」查詢,PoP 指標會傳回前一年同月的資料 (例如 2025 年 4 月與 2024 年 4 月的比較)。
  • 如果 PoP 衡量指標是以 period: month 定義,且您執行「探索」查詢時指定了月份時間範圍,PoP 衡量指標會傳回上個月的值 (2025 年 4 月與 2025 年 3 月的比較)。

使用期增率指標探索查詢的需求條件

由於 PoP 指標會根據 PoP 指標的 LookML 定義和您在探索查詢中選取的欄位進行計算,因此在包含 PoP 指標的探索查詢中,您至少必須加入下列欄位:

  • PoP 措施。
  • 適合與 PoP 指標相關聯的時間維度。period您可以透過探索的欄位挑選器或探索的篩選器,在查詢中加入時間維度:
    • PoP 衡量指標查詢支援的細微時間範圍為日期或更長,例如月、季或年。PoP 衡量指標查詢不支援以小時或分鐘為時間範圍的維度。
    • 如果 PoP 衡量指標是使用維度群組的時間範圍 based_on_time 定義,則探索查詢必須包含來自相同維度群組的時間範圍,且該時間範圍必須等於或小於 PoP 衡量指標 period 參數中指定的時間範圍。您可以在「探索」中加入維度群組 (從「探索」的欄位挑選器中選取維度群組),或依維度群組篩選。舉例來說,如果 PoP 指標的 based_on_time 值是透過 orders.created 維度群組的時間範圍定義,且 PoP 指標是透過 period: month 定義,則 Explore 查詢必須包含 orders.created 維度群組的時間範圍,且該時間範圍必須小於或等於一個月,例如 orders.created_date。因為探索查詢的時間範圍必須相符或較小,舉例來說,您無法比較一年時間範圍內的月與月。
    • 如果 PoP 衡量指標是使用based_on_time定義,且based_on_time以時間為準的維度,則探索查詢必須包含完全相同的以時間為準的維度,方法是從探索的欄位挑選器中加入該維度,或指定該維度的篩選條件。時間維度的時間範圍必須等於或小於 PoP 指標 period 參數中指定的時間範圍。舉例來說,如果 PoP 指標是以 based_on_time: created_date 定義,且 PoP 指標是以 period: month 定義,則「探索」查詢必須包含 created_date 維度。

如果 PoP 衡量指標是使用維度群組的時間範圍 based_on_time 定義,請注意探索查詢中時間範圍的下列規定:

  • 探索查詢中的時間範圍必須等於或小於 PoP 指標 period 參數中指定的時間範圍。舉例來說,如果 PoP 指標的 based_on_time 是以 orders.created 維度群組的時間範圍定義,而 PoP 指標是以 period: month 定義,則探索查詢必須包含 orders.created 維度群組的時間範圍,且該時間範圍必須小於或等於一個月,例如 orders.created_date。探索查詢的時間範圍必須較小,例如,您無法比較一年時間範圍內的月與月。
  • Explore 查詢的時間範圍本身必須包含時間戳記資訊。舉例來說,維度群組的 yearmonthdate 時間範圍會提供實際時間戳記資訊。反之,day_of_week 時間範圍會從基礎時間戳記中抽象化,以提供 Wednesday 等值。同樣地,month_namemonth_numday_of_month 等時間範圍本身不會提供時間戳記資訊,因此 PoP 指標無法使用這些時間範圍計算前一期的值。不過,如果您在探索查詢中加入時間戳記 (例如 date),系統就會提供時間戳記資訊給 PoP 指標,以便計算前一週期的值。您可以在「探索」查詢中加入 day_of_week 時間範圍,因為 PoP 指標可以使用 date 時間範圍資訊進行計算。

只要探索查詢符合這些條件,您就可以在探索查詢中新增其他欄位和時間範圍維度,但探索查詢中的所有時間範圍都必須小於或等於 PoP 指標的 period 時間範圍。使用 PoP 衡量指標執行「探索」查詢時,Looker 會自動將查詢中的最短時間範圍精細度,套用至 PoP 衡量指標所用的時間範圍。在本頁開頭顯示的範例「探索」中,所有 PoP 衡量指標都已在 LookML 中定義 period: year。也就是說,無論在探索查詢中選取哪個時間範圍 (在本例中為每月),PoP 指標都會傳回前一年相同時間範圍的結果。

如要在探索中查看 PoP 指標支援的時間範圍,可以測試不同的時間範圍,不必執行查詢。按一下「探索」專區的「SQL」分頁,然後從「探索」的欄位挑選器新增欄位和篩選器。如果 PoP 指標無法使用所選欄位和篩選器計算查詢,SQL 分頁會顯示無法產生 SQL 的訊息。

如果執行無法產生 SQL 的查詢,「探索」視窗會傳回錯誤,並提供詳細資料和相關 LookML 的連結。

範例

以下各節提供不同 PoP 指標和探索查詢的範例:

將計數與年對年和月對月 PoP 指標進行比較

以下是範例total_births指標的 LookML,以及type:timebirth維度群組,還有兩個以total_births指標為基礎,並使用birth維度群組做為 based_on_time 欄位的 PoP 指標:


  dimension_group: birth {
    type: time
    timeframes: [raw, time, date, week, month, quarter, year]
    sql: ${TABLE}.birth_date ;;
  }  

  measure: total_births {
    type: sum
    sql: ${TABLE}.total_births ;;
  }

  measure: total_births_last_year {
    type: period_over_period
    kind: previous
    based_on: total_births
    based_on_time: birth_year
    period: year
    value_to_date: no
    value_format_name: decimal_0
  }

  measure: total_births_last_month {
    type: period_over_period
    kind: previous
    based_on: total_births
    based_on_time: birth_year
    period: month
    value_to_date: no
    value_format_name: decimal_0
  }

請注意這些欄位的下列事項:

  • 這兩項 PoP 衡量指標都是以 kind: previous 定義,因此兩者都會提供前一週期的衡量指標值。
  • 這兩項 PoP 指標都是以 value_to_date: no 定義,因此都會計算整個時間範圍的指標值 (也就是查詢的最小時間範圍精細度)。
  • 這兩個 PoP 衡量指標都是以 based_on_time: birth_year 定義,因此都會使用 birth 維度群組的基礎時間戳記。
  • total_births_last_year PoP 衡量指標是以 period: year 定義,total_births_last_month PoP 衡量指標則是以 period: month 定義。

以下是包含所有三項指標和 birth_month 維度時間範圍的探索查詢:

Looker 探索頁面,顯示「出生月份」、「出生總人數」、「上個月的出生總人數」和「去年的出生總人數」欄。2024 年 7 月的「上個月的總出生數」值為 290,699,與 2024 年 6 月的「總出生數」值相符。2024 年 7 月的「去年總出生數」值為 310,347,與 2023 年 7 月的「總出生數」值相符。

請注意下列有關探索結果的事項:

  • 探索查詢中的最小時間範圍維度為 birth_month,因此 PoP 指標會提供每月值。
  • 在最近一個月 (2024 年 7 月) 的資料列中,「上個月的總出生數」值會顯示上個月 (2024 年 6 月) 的總出生數。您可以查看「2024 年 6 月」資料列的「總出生數」值,確認這項資訊。這兩個值相符。
  • 在最近一個月 (2024 年 7 月) 的資料列中,「去年出生總人數」值會顯示去年 (2023 年) 同月 (7 月) 的出生總人數。您可以查看「2023 年 7 月」資料列的「總出生數」值,確認這項資訊。這兩個值相符。

value_to_date 對逐期變化指標值的影響

與先前的範例類似,以下是 total_births 措施的 LookML,以及 type:timebirth 維度群組,還有兩個以 total_births 措施為基礎的 PoP 措施,並使用 birth 維度群組做為 based_on_time 欄位。不過,在本例中,total_births_last_year_value_to_date PoP 評估指標是以 value_to_date: yes 定義,total_births_last_year PoP 評估指標則是以 value_to_date: no 定義:

  dimension_group: birth {
    type: time
    timeframes: [raw, time, date, week, month, quarter, year]
    sql: ${TABLE}.birth_date ;;
  }  

  measure: total_births {
    type: sum
    sql: ${TABLE}.total_births ;;
  }

  measure: total_births_last_year {
    type: period_over_period
    kind: previous
    based_on: total_births
    based_on_time: birth_year
    period: year
    value_to_date: no
    value_format_name: decimal_0
  }

  measure: total_births_last_year_value_to_date {
    type: period_over_period
    kind: previous
    based_on: total_births
    based_on_time: birth_year
    value_to_date: yes
    period: year
    value_format_name: decimal_0
  }

以下是包含所有三項指標和 birth_year 維度時間範圍的探索查詢。這項探索查詢是在 6 月 4 日 16:25:08 執行,這對 value_to_date: yes PoP 指標來說非常重要。

Looker 探索功能,顯示「出生年份」、「出生總人數」、「去年出生總人數」和「去年出生總人數 (年初至今)」的資料欄。2024 年的「去年總出生人數」值為 3,581,036,與 2023 年的「總出生人數」值相符。2024 年的「去年同期出生數」值為 1,743,505。

探索結果顯示 value_to_date 子參數如何變更 PoP 指標的計算方式:

請注意下列有關探索結果的事項:

  • 在最新年份 (2024 年) 的資料列中,「去年出生總人數」值會顯示前一年 (2023 年) 的出生總人數。查看「2023」列的「總出生數」值,即可驗證計算結果。這兩個值相符。
  • 在最新年份 (2024 年) 的資料列中,「去年迄今的總出生數」值小於「去年總出生數」值。這是因為系統在 6 月 4 日下午 4:25:08 執行了「探索」查詢,且 total_births_last_year_value_to_date PoP 指標是以 value_to_date: yes 定義,因此 Looker 在計算每年值時,只會使用各年 6 月 4 日下午 4:25:08 前的資料。

篩選包含年增率指標的探索查詢

如要篩選包含 PoP 指標的探索查詢,請注意下列事項:

  • 如果探索查詢包含年增率指標,系統會支援篩選功能。不過,您無法依據 PoP 指標本身進行篩選。舉例來說,在第一個範例中,您對 birth_month 維度和 total_birthstotal_births_last_yeartotal_births_last_month PoP 測量指標的查詢,無法根據 total_birthstotal_births_last_yeartotal_births_last_month PoP 測量指標篩選該查詢。
  • 如果篩選的欄位與 PoP 指標的 based_on_time 參數相關聯,且篩選器的時間範圍比查詢的時間範圍更精細,則 PoP 指標只會顯示查詢時間範圍內篩選器值部分的結果。舉例來說,如果您查詢 orders.created_year 維度,並將查詢篩選條件設為 1 月,則 PoP 指標會針對每年只顯示 1 月的值。這可能會誤導使用者,以為這是全年的業績。
  • 如果是 PoP 評估指標的探索查詢,Looker 會以查詢最精細的時間範圍,擷取額外時間範圍的資料,以計算 PoP 評估指標的資料。舉例來說,如果您使用每月維度建立探索查詢、以 period: year 定義 PoP 指標,並篩選過去 6 個月,Looker 會找出查詢中最低的細微程度,在本例中為 PoP 指標的 year 時間範圍。在這個範例中,Looker 會擷取過去 6 個月的資料,外加額外一年的資料,以便比較過去 6 個月與前一年同月份的資料。
  • 如「包含 PoP 指標的探索查詢規定」一文所述,包含 PoP 指標的探索查詢必須有適當的時間維度,才能與 PoP 指標相關聯的 period 搭配使用。如果未從探索的欄位挑選器選取時間維度,Looker 可以從探索的篩選器中的時間維度衍生必要資訊。在這種情況下,Looker 會依篩選器的時間維度排序探索查詢結果。

以期增率指標製作圖表

建議使用表格圖表呈現 PoP 指標。視探索查詢中的欄位而定,其他視覺化選項也可能適用。

如果使用表格圖以外的視覺化效果,請確認視覺化效果清楚明瞭。由於 PoP 指標會與前一段時間進行比較,因此使用 PoP 指標的視覺化內容可能會造成誤導。舉例來說,如果將年對年百分比變化指標定義為 kind: previous,系統就會顯示今年日期對應的去年值。如果您的「探索」查詢包含當年度的值,以及與前一年相比的百分比變化指標,則當年度在視覺化圖表中會有兩個值。

如果您使用的不是表格圖表,請確認視覺化效果清楚指出任何年增率指標都是與前一時間範圍的比較結果。

PoP 措施的限制

請注意,PoP 指標有下列限制:

  • PoP 衡量指標僅適用於使用新版 LookML 執行階段的 LookML 專案。如果執行個體已啟用「使用舊版 LookML 執行階段」舊版功能,專案的資訊清單檔案就必須包含 new_lookml_runtime:yes 陳述式。
  • Looker Studio 的 Looker 連接器不支援 PoP 指標。
  • PoP 評估指標必須以匯總評估指標為準,詳情請參閱based_on一節。PoP 衡量指標無法以非匯總衡量指標為依據。
  • 如果執行個體啟用 BI Engine 對稱匯總實驗室功能,則 BigQuery 連線支援 PoP 指標,但含有 PoP 指標的 SQL 查詢不會使用 BI Engine 對稱匯總功能。
  • PoP 指標不支援同類群組分析。
  • PoP 指標不支援滾動計算。
  • PoP 指標一律會比較目前與前一個週期。您無法設定年增率指標,將目前期間與前一期以外的期間進行比較。舉例來說,您無法建立年對年指標,比較去年 5 月和今年 12 月的資料。
  • 系統不支援使用自訂日曆 (例如零售業 4-5-4 日曆) 測量 PoP。如需 PoP 衡量指標支援的時間範圍,請參閱「period」一節。
  • 系統不支援自訂時間範圍的 PoP 衡量指標,例如目前兩週與前兩週的比較。
  • PoP 評估指標的參數不支援 Liquid 參數。不過,如果 PoP 的 based_onbased_on_time 欄位指向以 Liquid 定義的維度,系統就會處理該 Liquid。

  • 下列 Looker 功能不支援 PoP 指標:

  • PoP 指標無法用於建立自訂欄位

  • 如果 PoP 指標不是以 period: weekperiod: date 定義,您就無法在「探索」查詢中選取週時間範圍。

  • 如果 PoP 衡量指標的期間是根據會計時間範圍定義,就無法在非會計時間範圍的探索查詢中使用。此外,如果 PoP 衡量指標的期間是以非會計時間範圍定義,就無法在查詢中使用會計時間範圍維度。

  • PoP 評估指標支援會計月份偏移,也就是說,PoP 評估指標的 based_on_time 參數會從與「探索」相關聯的 LookML 模型檔案中,繼承 fiscal_month_offset 值。如果您使用 fiscal_yearfiscal_quarter 定義 PoP 衡量指標,只有在「探索」查詢指定 fiscal_yearfiscal_quarter 時間範圍時,系統才會支援該指標。在這種情況下,系統會採用 fiscal_offset_month

  • PoP 指標的 period 必須大於或等於在「探索」查詢中選取的時間範圍。舉例來說,如果 PoP 指標是以 period: month 定義,則探索查詢的時間範圍維度必須是月或更小,例如週或天。

PoP 措施支援的資料庫方言

下表列出 Looker 最新版本中支援 PoP 措施的方言:

方言 是否支援?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica