累计计数和总和

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

语法

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

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