周数

年份的周数从 1 编号到 52、53 或 54(取决于如何确定年份的第一周)。Metabase 支持多种算法来确定年份的第一周。

在查询构建器中,您可以按年份的周数对摘要进行分组,或者使用自定义表达式从日期列中提取年份的周数。

按年份的周数对摘要进行分组在进行期间与期间的比较时非常有用 - 例如,当比较今年第一周的指标与去年第一周的指标时。

在查询构建器中按年份的周数汇总

您可以选择在查询构建器中按年份的周数对指标进行分组。

  1. 在“汇总”部分中,单击选择要分组的列并选择一个日期字段
  2. 单击字段名称右侧带有日期粒度(例如,“按月”)的下拉列表;
  3. 在带有日期粒度选项的弹出窗口中,单击更多…以查看其他选项,然后选择年份的周数

结果将按周数汇总(而不是按周日期,例如当您选择“按周”选项时)

Summarize by week of year

Metabase 如何对年份的周数进行编号

默认情况下,当您在查询构建器中按年份的周数分组时,Metabase 将查找年份的第一个星期日,并将该周称为“第 1 周”。第一个星期日之前的任何一天都被视为上一年最后一周的一部分(第 52 或 53 周)。

使用不同的年份第一周

即使您的实例在本地化设置中设置了不同的每周第一天,查询构建器的默认年份的周数分组也始终使用星期日作为一周的开始。

使用实例的本地化设置的方法是在带有 "Instance" 模式的自定义表达式中使用 week 函数,如下所示:week([创建于], "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 日开始。周从本地化设置中指定的星期几开始。在大多数年份,第一周将是不完整的一周。

请注意,当前可用的三种模式均与查询构建器中按年份的周数汇总中使用的第一周算法不匹配。

比较不同算法如何计算第一周和最后一周

  • 在查询构建器中使用按年份的周数分组

    How the week numbers are calculated for Group by Week of year

  • week(column)week(column, "ISO")

    How the week numbers are calculated by ISO

  • week(column, "US"):

    How the week numbers are calculated by US method

  • 如果实例的每周第一天是星期一,则为 week(column, "Instance")

    How the week numbers are calculated by Instance method

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 算法