一年中的周次
一年中的周次从 1 到 52、53 或 54 编号(取决于如何确定一年中的第一周)。Metabase 支持多种算法来确定一年中的第一周。
在查询构建器中,您可以按一年中的周次对摘要进行分组,或使用自定义表达式从日期列中提取一年中的周次。
按一年中的周次对摘要进行分组在进行同比比较时非常有用——例如,比较今年第一周的指标与去年第一周的指标。
在查询构建器中按一年中的周次汇总
您可以选择在查询构建器中按一年中的周次对指标进行分组。
- 在“汇总”部分,点击 选择要分组的列 并选择一个日期字段
- 点击字段名称右侧带有日期粒度(例如,“按月”)的下拉菜单;
- 在带有日期粒度选项的弹出窗口中,点击 更多… 查看其他选项,然后选择 一年中的周次。
结果将按周数汇总(而不是像选择“按周”选项时那样按周 _日期_)
Metabase 如何对一年中的周次进行编号
默认情况下,当您在查询构建器中按一年中的周次进行分组时,Metabase 会找到一年中的第一个星期日,并将其称为“第 1 周”。第一个星期日之前的任何一天都被视为上一年最后一周(第 52 或 53 周)的一部分。
使用不同的一年中的第一周
即使您的实例在 本地化设置 中设置了不同的周首日,查询构建器的默认一年中的周次分组将 _始终_ 使用星期日作为周的开始。
使用实例本地化设置的方法是在自定义表达式中使用 week
函数和 "Instance"
模式,如下所示:week([Created At], "Instance")
(见下文)。
week
自定义表达式提供了三种计算一年中第一周的替代算法。要使用替代算法进行汇总,您可以创建一个自定义列,使用 week
表达式从日期列中提取周数,然后按该自定义列进行分组。
week
自定义表达式
week
自定义表达式将一年中的周次提取为整数。
语法
week(column, mode)
示例
week([Created At])
week([Created At], "US")
week([Created At], "Instance")
其中
column
是您要从中提取周数的日期列。mode
是可选的,指定用于确定一年中第一周的算法。它可以是以下之一:"ISO"
(默认):一年中的第一周是包含该年第一个星期四的周。周从星期一开始。这是 ISO 8601 标准。"US"
:一年中的第一周从 1 月 1 日开始。周从星期日开始。在大多数年份中,第一周将是不完整的。"Instance"
:一年中的第一周从 1 月 1 日开始。周从 本地化设置 中指定的周首日开始。在大多数年份中,第一周将是不完整的。
请注意,当前可用的三种模式都不与查询构建器中按一年中的周次进行汇总时使用的第一周算法匹配。
比较不同算法如何计算第一周和最后一周
-
在查询构建器中,使用 按一年中的周次分组 时
-
week(column)
或week(column, "ISO")
-
week(column, "US")
: -
week(column, "Instance")
如果实例的周首日是星期一
SQL
不同的 SQL 数据库有不同的方法和函数来提取一年中的周次。有些引擎提供多个函数来提取一年中的周次,以及多种算法来使用 SQL 计算一年中的周次。请参阅您的数据库文档。
以下是一个不完整的示例函数列表
数据库 | 示例 | 第一周算法 |
---|---|---|
Postgres | EXTRACT(WEEK FROM TIMESTAMP created_at) |
ISO 算法 |
MySQL | WEEKOFYEAR("2017-06-15") |
周首日是星期一,并且一年中的第一周有超过 3 天。存在替代函数。 |
BigQuery | EXTRACT(WEEK FROM DATE ticreated_at) |
周从 0 编号。早于一年中第一个星期日的日期属于第 0 周。存在替代函数。 |
Redshift | DATE_PART(week, TIMESTAMP created_at) |
ISO 算法 |
阅读其他版本的 Metabase 的文档。