累积计数和累积求和

累积计数计算跨分组行的累加总计数。累积求和计算跨分组列的滚动求和(也称为运行总计)。

语法

您可以使用预定义的“累积计数”和“累积求和”指标,或自定义表达式

CumulativeCount
CumulativeSum(column)

累积指标只能在查询构建器的**摘要**步骤中使用 — 您不能使用累积指标创建自定义列或筛选器。

累积指标的计算方式

在后台,累积计数分三个步骤计算:

  1. 使用**分组依据**块中的分组对记录进行分组。
  2. 计算每个组中的行数。
  3. 对于每个组,计算包括当前组在内的所有先前组的计数的累积总数。

因为累积指标使用前一行中的值,所以分组列中的排序顺序很重要。

例如,如果您的表数据按月份分组,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 将沿日期时间维度进行累积,然后按**分组依据**块中的任何其他字段(按顺序)进行分组

Cumulative count by category, source, and created at

如果有多个日期时间维度(包括按同一日期时间列进行多次分组),Metabase 将沿更精细的维度进行累积,无论其顺序如何。例如,如果您按“创建时间:月份”和“查看时间:星期”进行分组,Metabase 将沿“查看时间:星期”进行累积。

Cumulative count by two datetime fields

在具有日期时间维度的查询中,非日期时间字段的**排序**块不会影响 Metabase 计算结果的方式。排序块只会影响结果中分组的顺序。

不含日期时间维度的查询

如果**分组依据**块中没有日期时间字段,Metabase 将沿**分组依据**块中指定的_最后一个_维度进行累积,并按其他字段的顺序从左到右进行分组。

Cumulative count by two categorical dimensions

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

Cumulative count by two categorical dimensions with order of accumulation changed

按_除_最后一个(累积)字段以外的任何字段排序只会影响结果中分组的顺序。它不会改变 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 的文档。

这有帮助吗?

感谢您的反馈!
想改进这些文档吗?提出更改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.