累计计数和求和
累积计数计算在分组的所有行上的加法总数。累积总和计算在分组列上的滚动总和(也称为滚动总计)。
语法
您可以使用预定义的“累积计数”和“累积总和”度量指标,或自定义表达式
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版本的文档。