累计计数和总和
累计计数计算跨越细分的行数的累加总数。累计总和计算跨越细分的列的滚动总和(也称为运行总计)。
语法
您可以使用预定义的“累计计数”和“累计总和”指标,或自定义表达式
CumulativeCount
CumulativeSum(column)
累积指标只能在查询构建器的汇总步骤中使用 — 您不能使用累积指标来创建自定义列或筛选器。
累积指标的计算方式
在底层,累积指标分三个步骤计算
- 使用分组依据块中的细分对记录进行分组。
- 计算每个组中的行数。
- 对于每个组,计算所有先前组(包括当前组)中计数的累计总数。
由于累积指标使用来自先前行的值,因此细分列中的排序顺序很重要。
例如,如果您有一个按月份分组的数据表,Metabase 将按如下方式计算累计计数
月份 | 计数 |
累计计数 |
---|---|---|
七月 | 5 | 5 |
十一月 | 4 | 5+4 = 9 |
三月 | 2 | 5 + 4 + 2 = 11 |
如果排序发生更改(而值保持不变),则累计计数也会更改
月份 | 计数 |
累计计数 |
---|---|---|
三月 | 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 版本的文档。