Offset
⚠️
Offset
函數目前不適用於 MySQL/MariaDB、MongoDB 和 Druid。
Offset
函數會傳回不同列中表達式的值。Offset
只能在查詢產生器的「摘要」步驟中使用(您無法使用 Offset
建立自訂欄位)。
語法:Offset(expression, rowOffset)
expression
是要從不同列取得的值。
rowOffset
是相對於目前列的數字。例如,-1
代表前一列,或 1
代表下一列。
範例:Offset(Sum([Total]), -1)
會從前一列取得 Sum([Total])
的值。
分組的順序很重要
由於 Offset
參考其他列,因此分組的順序很重要(分組是「摘要」步驟中「依群組」區段中的群組)。Metabase 將先依第一個群組排序,然後依任何其他分組進行分割。例如,如果您想查看依產品類別和時間劃分的訂單計數,以及上一期間依產品類別劃分的計數,則應先依 Created At
分組,然後再依產品類別分組。
Offset 不會考量遺失的資料
Offset
只能參考您擁有的列,這表示它可能會產生正確但出乎意料的結果。例如,假設您想將每一天的計數與前一天進行比較。
以下表為例,其中 Previous
欄位是由表達式 Offset(Count, -1)
建立
日期 | 計數 | 前一個 |
---|---|---|
2022 年 10 月 1 日 | 6 | |
2022 年 10 月 2 日 | 3 | 6 |
2022 年 10 月 4 日 | 2 | 3 |
10 月 4 日的 Previous
欄位中的值為 3
,這是前一列的值。雖然根據資料是正確的,但前一列是 10 月2 日;沒有前一天 10 月 3 日的資料。如果您想使用 offset 來比較前幾天(或幾週,或其他任何時間單位),您需要確保您的資料包含您想要比較的每個資料點的列。在這種情況下,您的資料需要包含每天的列,包括計數為零的日子。如果您的資料中缺少日期,您可以將日曆表格加入您的資料,以確保每天在您的資料中都有列。
資料類型
Offset
函數會傳回 offset 列中的任何值。
資料類型 | Offset 傳回 |
---|---|
字串 | ✅ |
數字 | ✅ |
時間戳記 | ✅ |
布林值 | ✅ |
JSON | ✅ |
使用 Offset
的年度 (YoY) 時間序列比較範例
在範例資料庫中,您可以使用 Offset
來比較年度 (YoY) 訂單計數。
首先,依「總計加總」進行摘要。然後再次摘要該加總,這次使用 Offset
抓取前一列的值。
Offset(Sum([Total]), -1)
然後依年份將結果依 Created At
分組
產生
有了這些 offset(「前一期間」欄位中的加總),我們就可以建立自訂欄位來計算年度加總之間的差異等項目
[Sum of total] - [Previous period]
以及年度百分比變更
[Difference] / [Previous period] * 100
使用 Offset
的滾動平均值範例
您可以使用包含 Offset
的自訂表達式來計算滾動平均值。
例如,假設您想計算過去三個月訂單總計的滾動平均加總。您可以建立自訂表達式來計算這些滾動平均值
(Sum([Total]) + Offset(Sum([Total]), -1) + Offset(Sum([Total]), -2)) / 3
上述表達式會將本期間的總計,加上前兩個期間的總計(offset 分別為 -1
和 -2
),然後除以三以取得這些期間的平均值。
相關函數
SQL
Offset
函數與 SQL 的 LAG
和 LEAD
視窗函數進行比較。
例如,如果您嘗試建立具有兩個序列的折線圖,以比較 a) 本月的訂單計數與 b) 上個月的訂單計數,您會先count
本月的訂單,然後使用 offset
表達式來計算上個月的訂單,如下所示
Offset(count, -1)
在底層,Metabase 會將該 Offset
表達式轉換為 LAG
視窗函數,如下列查詢所示
SELECT
"source"."CREATED_AT" AS "CREATED_AT",
COUNT(*) AS "count",
LAG(COUNT(*), 1) OVER (
ORDER BY
"source"."CREATED_AT" ASC
) AS "Order count previous period"
FROM
(
SELECT
DATE_TRUNC('month', "PUBLIC"."ORDERS"."CREATED_AT") AS "CREATED_AT"
FROM
"PUBLIC"."ORDERS"
) AS "source"
GROUP BY
"source"."CREATED_AT"
ORDER BY
"source"."CREATED_AT" ASC
延伸閱讀
閱讀其他Metabase 版本的文件。