累积计数和总和

累积计数计算拆分后的总行数。累积总和计算拆分后的滚动总和(也称为运行总计)。

语法

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

CumulativeCount
CumulativeSum(column)

累积指标只能在查询生成器的“汇总”步骤中使用 — 您不能使用累积指标来创建自定义列或过滤器。

累积指标的计算方式

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

  1. 使用“分组依据”块中的拆分来对记录进行分组。
  2. 计算每个组中的行数。
  3. 对于每个组,计算所有先前组(包括当前组)中计数的累积总和。

由于累积指标使用先前行的值,因此拆分列中的排序顺序很重要。

例如,如果您有一个按月分组的数据表,Metabase 将按以下方式计算累积计数:

月份 Count() CumulativeCount()
七月 5 5
十一月 4 5 + 4 = 9
三月 2 5 + 4 + 2 = 11

如果排序发生更改(而值保持不变),那么累积计数也会随之更改。

月份 Count() CumulativeCount()
三月 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.