累积计数和总和
累积计数计算拆分后的总行数。累积总和计算拆分后的滚动总和(也称为运行总计)。
语法
您可以使用预定义的“累积计数”和“累积总和”指标,或者自定义表达式。
CumulativeCount
CumulativeSum(column)
累积指标只能在查询生成器的“汇总”步骤中使用 — 您不能使用累积指标来创建自定义列或过滤器。
累积指标的计算方式
在后台,累积计数分三个步骤计算:
- 使用“分组依据”块中的拆分来对记录进行分组。
- 计算每个组中的行数。
- 对于每个组,计算所有先前组(包括当前组)中计数的累积总和。
由于累积指标使用先前行的值,因此拆分列中的排序顺序很重要。
例如,如果您有一个按月分组的数据表,Metabase 将按以下方式计算累积计数:
| 月份 | Count() |
CumulativeCount() |
|---|---|---|
| 七月 | 5 | 5 |
| 十一月 | 4 | 5 + 4 = 9 |
| 三月 | 2 | 5 + 4 + 2 = 11 |
如果排序发生更改(而值保持不变),那么累积计数也会随之更改。
| 月份 | Count() |
CumulativeCount() |
|---|---|---|
| 三月 | 2 | 2 |
| 七月 | 5 | 2 + 5 = 7 |
| 十一月 | 4 | 2 + 5 + 4 = 11 |
当查询中只有一个拆分时,Metabase 将按拆分列的升序对数据进行排序(使用数据库为该列数据类型设置的逻辑)。要更改 Metabase 累积指标的方式,可以添加拆分列的“排序”块。
具有多个拆分的累积指标
由于累积指标是根据先前行来计算其汇总的,因此 Metabase 需要确定哪些是先前行。Metabase 将首先根据您是否按日期时间列进行分组,然后根据其他拆分的顺序来决定如何计算和显示累积指标。
具有日期时间维度的查询
如果您在“分组依据”块中使用日期时间维度,Metabase 将沿着日期时间维度进行累积,然后按“分组依据”块中的任何其他字段进行拆分(按顺序)。

如果有多个日期时间维度(包括同一日期时间列的多个分组),Metabase 将沿着更精细的维度进行累积,而忽略它们的顺序。例如,如果您按“创建于:月”和“查看于:周”分组,Metabase 将沿“查看于:周”进行累积。

在具有日期时间维度的查询中,非日期时间字段的“排序”块不会影响 Metabase 计算结果的方式。排序块只会影响结果中拆分的顺序。
没有日期时间维度的查询
如果“分组依据”块中没有日期时间字段,Metabase 将沿着“分组依据”块中指定的 *最后一个* 维度进行累积,并按从左到右的顺序拆分其他字段。

默认情况下,Metabase 将对用于累积的维度使用升序排序。您可以为累积维度添加“排序”块来更改顺序,这将同时改变 Metabase 计算累积指标的方式以及它呈现结果的方式。

按 *最后一个*(累积)字段以外的任何字段排序只会影响结果中拆分的顺序。它不会改变 Metabase 计算结果的方式。
相关函数
SQL 中的累积计数
在 SQL 中,您可以使用窗口函数来计算累积指标。例如,要计算按月累积的订单计数,您可以使用以下查询:
SELECT
created_month,
SUM(count(*)) OVER (
ORDER BY
created_month ASC ROWS UNBOUNDED PRECEDING
) AS "sum"
FROM
(
SELECT
quantity,
DATE_TRUNC ('month', created_at) AS created_month
FROM
orders
)
GROUP BY
created_month
ORDER BY
created_month ASC
SQL 中的累积总和
对于累积总和,您可以使用:
SELECT
created_month,
SUM(SUM(quantity)) OVER (
ORDER BY
created_month ASC ROWS UNBOUNDED PRECEDING
) AS "sum"
FROM
(
SELECT
quantity,
DATE_TRUNC ('month', created_at) AS created_month
FROM
orders
)
GROUP BY
created_month
ORDER BY
created_month ASC
您可以通过单击右上角的“查看 SQL”(>_)按钮,在查询生成器中查看查询生成的 SQL。
阅读其他版本的 Metabase 的文档。