偏移
⚠️ 目前,MySQL/MariaDB、MongoDB和Druid不支持`Offset`函数。
`Offset`函数返回不同行中的表达式值。`Offset`只能在查询构建器的Summarize步骤中使用(您不能使用`Offset`来创建自定义列)。
语法:Offset(表达式, 行偏移)
表达式
是从不同行获取的值。
行偏移
是相对于当前行的数字。例如,-1
表示上一行,或1
表示下一行。
示例:Offset(Sum([Total]), -1)
将从上一行获取Sum([Total])
的值。
分组的顺序很重要
因为Offset
引用其他行,所以分组的顺序很重要(分组是汇总步骤中“分组依据”部分的组)。Metabase将按第一个组排序,然后按任何附加的分组进行分区。例如,如果您想按产品类别查看订单数随时间的变化,以及前期的产品类别计数,您应该首先按Created At
分组,然后按产品类别分组。
数据类型
Offset
函数返回偏移行中的任何值。
数据类型 | 由Offset 返回 |
---|---|
字符串 | ✅ |
数字 | ✅ |
时间戳 | ✅ |
布尔值 | ✅ |
JSON | ✅ |
使用Offset
进行跨年度时间序列比较的示例
在样本数据库中,您可以使用Offset
来比较年度订单数的年度变化(YoY)。
首先,按总金额汇总。然后再次汇总该汇总,这次使用Offset
来获取上一行的值。
Offset(Sum([Total]), -1)
然后按年将结果分组为Created At
结果是
有了这些偏移量(“前期”列中的总和),然后我们可以创建自定义列来计算如年度总和之间的差异等
[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其他版本的文档。