weekyear - 脚本和图表函数在该页面上
此函数用于返回根据环境变量周数所属的年份。星期数范围在 1 和大约 52 之间。
语法:
weekyear( timestamp [, first_week_day [, broken_weeks [, reference_day]]] )
返回数据类型: 整数
参数 timestamp 要评估的日期或时间戳。 first_week_day 指定一周的开始日期。如果忽略,使用 FirstWeekDay 变量的值。
可能的值 first_week_day 为:周一为 0,周二为 1,周三为 2,周四为3,周五为 4,周六为 5,星期日为 6。
有关系统变量的详细信息,请参见FirstWeekDay 。
broken_weeks 如果不指定 broken_weeks ,则变量 BrokenWeeks 的值将用于定义周是否已中断。
有关系统变量的详细信息,请参见BrokenWeeks
reference_day 如果不指定 reference_day ,则变量 ReferenceDay 的值将用于定义将一月的哪一天设置为定义第 1 周的参考日。默认设置下,Qlik Sense 函数使用 4 作为参考日。这意味着第 1 周必须包含 1 月 4 日,换句话说,第 1 周始终至少具有 1 月份的前 4 天。
有关系统变量的详细信息,请参见ReferenceDay
weekyear() 函数确定日期属于年份的哪个周。然后返回与该周数对应的年份。
如果 BrokenWeeks 设置为 0 (false),weekyear() 将返回与 year() 相同的。
weekyear() 函数范围的图表
但是,如果 BrokenWeeks 系统变量设置为使用连续周,则根据 ReferenceDay 系统变量中指定的值,第 1 周只能包含 1 月份的特定天数。
例如,如果使用 4 的 ReferenceDay 值,则第 1 周必须包括 1 月份的至少四天。第 1 周可以包括上一年 12 月的日期,或者一年的最后一周可以包括下一年 1 月的日期。在这种情况下,weekyear() 函数将向 year() 函数返回不同的值。
使用非中断周时的 weekyear() 函数范围的图表
适用场景
当您希望按年份比较聚合时,weekyear() 函数非常有用。例如,如果您希望按年份查看产品的总销售额。当用户希望与应用程序中的 BrokenWeeks 系统变量保持一致时,可以选择 weekyear() 函数而非 year() 。
区域设置 除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
函数示例 示例 结果 weekyear('12/30/1996',0,0,4) 返回 1997,因为 1997 年第 1 周从 1996 年 12 月 30 日开始 weekyear('01/02/1997',0,0,4) 返回 1997 weekyear('12/28/1997',0,0,4) 返回 1997 weekyear('12/30/1997',0,0,4) 返回 1998,因为 1998 年第 1 周从 1997 年 12 月 29 日开始 weekyear('01/02/1999',0,0,4) 返回 1998,因为 1998 的第 53 周在 1999 年的 1 月 3 日结束
示例 1 - 中断周 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
加载脚本
SET BrokenWeeks=1;
Transactions:
Load
*,
week(date) as week,
weekyear(date) as week_year
;
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表 id 日期 周 week_year 8176 12/28/2020 53 2020 8177 12/29/2020 53 2020 8178 12/30/2020 53 2020 8179 12/31/2020 53 2020 8180 01/01/2021 1 2021 8181 01/02/2021 1 2021 8182 01/03/2021 2 2021 8183 01/04/2021 2 2021 8184 01/05/2021 2 2021 8185 01/06/2021 2 2021 8186 01/07/2021 2 2021
通过使用 weekyear() 函数并将日期字段作为函数的参数传递,在前置 Load 语句中创建了 ‘week_year ’ 字段。
BrokenWeeks 系统变量设置为 1 ,意味着应用程序使用中断周。第 1 周从 1 月 1 日开始。
使用中断周的 weekyear() 函数范围的图表
交易 8181 发生在1月2日,这是第 1 周的一部分。因此,它为 ‘week_year ’ 字段返回 2021 的值。
示例 2 - 非中断周 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
但是,在本例中,公司政策是使用非中断周。
加载脚本
SET BrokenWeeks=0;
Transactions:
Load
*,
week(date) as week,
weekyear(date) as week_year
;
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表 id 日期 周 week_year 8176 12/28/2020 53 2020 8177 12/29/2020 53 2020 8178 12/30/2020 53 2020 8179 12/31/2020 53 2020 8180 01/01/2021 53 2020 8181 01/02/2021 53 2020 8182 01/03/2021 1 2021 8183 01/04/2021 1 2021 8184 01/05/2021 1 2021 8185 01/06/2021 1 2021 8186 01/07/2021 1 2021
BrokenWeeks 系统变量设置为 0 表示应用程序使用非中断的周。因此,第一周不需要从 1 月 1 日开始。
2020 年第 53 周持续到 2021 年 1 月 2 日,2021 第 1 周从 2021 年 1 月 3 日星期日开始。
使用非中断周的 weekyear() 函数范围的图表
交易 8181 发生在1月2日,这是第 1 周的一部分。因此,它为 ‘week_year ’ 字段返回 2021 的值。
示例 3 – 图表对象示例 加载脚本和图表表达式 概述
使用与第一个 相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。返回交易发生年份的周数的计算将在应用程序中的图表中创建为度量。
加载脚本
SET BrokenWeeks=1;
Transactions:
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
要计算交易发生的周,请创建以下度量:
要根据周数计算交易发生的年份,请创建以下度量:
结果表 id 日期 周 week_year 8176 12/28/2020 53 2020 8177 12/29/2020 53 2020 8178 12/30/2020 53 2020 8179 12/31/2020 53 2020 8180 01/01/2021 1 2021 8181 01/02/2021 1 2021 8182 01/03/2021 2 2021 8183 01/04/2021 2 2021 8184 01/05/2021 2 2021 8185 01/06/2021 2 2021 8186 01/07/2021 2 2021
通过使用 weekyear() 函数并将日期字段作为函数的参数传递,在前置 Load 语句中创建了 ‘week_year ’ 字段。
BrokenWeeks 系统变量设置为 1 ,意味着应用程序使用中断周。周 1 从 1 月 1 日开始。
使用中断周的 weekyear() 函数范围的图表
交易 8181 发生在1月2日,这是第 1 周的一部分。因此,它为 ‘week_year ’ 字段返回 2021 的值。
示例 4 – 场景 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 2020 年最后一周和 2021 第一周的一组交易的数据集,该数据集加载到名为 ‘Transactions ’ 的表中。
BrokenWeeks 变量,设置为 0 。这意味着应用程序将使用非中断周。
ReferenceDay 变量,设置为 2 。这意味着这一年将从 1 月 2 日开始,1 月至少有两天。
FirstWeekDay 变量,设置为 1 。这意味着一周的第一天是星期二。
公司的政策是使用中断周。最终用户想要一个按年度列出总销售额的图表。该应用程序使用连续的周,第一周在 1 月至少包含两天。
加载脚本
SET BrokenWeeks=0;
SET ReferenceDay=2;
SET FirstWeekDay=1;
Transactions:
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
结果
加载数据并打开工作表。新建表格。
要根据周数计算交易发生的年份,请创建以下度量:
要计算总销售额,请创建以下度量:
将度量的数字格式 设置为金额 。
结果表 weekyear(date) =sum(amount) 2020 19.42 2021 373.37