Offset
⚠️
Offset
函数目前在 MySQL/MariaDB、MongoDB 和 Druid 中不可用。
Offset
函数返回不同行中表达式的值。Offset
只能在查询构建器的“汇总”步骤中使用(您不能使用 Offset
来创建自定义列)。
语法:Offset(expression, rowOffset)
expression
是要从不同行获取的值。
rowOffset
是相对于当前行的数字。 例如,-1
表示上一行,或 1
表示下一行。
示例:Offset(Sum([Total]), -1)
将从上一行获取 Sum([Total])
的值。
分组的顺序很重要
因为 Offset
引用其他行,所以分组的顺序很重要(分组是“汇总”步骤中“分组依据”部分中的组)。 Metabase 将首先按第一个组排序,然后按任何其他分组进行分区。 例如,如果您想查看按产品类别随时间推移的订单计数,以及上一期间按产品类别的计数,您应该首先按 创建时间
分组,然后再按产品类别分组。
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 返回 |
---|---|
字符串 | ✅ |
数字 | ✅ |
时间戳 | ✅ |
布尔值 | ✅ |
JSON | ✅ |
使用 Offset
的年度 (YoY) 时间序列比较示例
在示例数据库中,您可以使用 Offset
来比较订单计数同比 (YoY)。
首先,按“总计”求和进行汇总。 然后再次汇总该求和,这次使用 Offset
来获取上一行的值。
Offset(Sum([Total]), -1)
然后按 创建时间
(按年)对结果进行分组
这将产生
有了这些偏移量(“上个期间”列中的总和),我们就可以创建自定义列来计算年度总和之间的差异等内容
[Sum of total] - [Previous period]
以及同比百分比变化
[Difference] / [Previous period] * 100
使用 Offset
的滚动平均值示例
您可以使用带有 Offset
的自定义表达式来计算滚动平均值。
例如,假设您想计算过去三个月的订单总额的滚动平均值。 您可以创建一个自定义表达式来计算这些滚动平均值
(Sum([Total]) + Offset(Sum([Total]), -1) + Offset(Sum([Total]), -2)) / 3
上面的表达式将本期的总额加上前两个期间的总额(偏移量分别为 -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 的文档。