累计计数和求和

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

语法

您可以使用预定义的“累计计数”和“累计求和”度量,或自定义表达式。

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 版本的文档。

© . All rights reserved.