weekname - 脚本和图表函数在该页面上
此函数用于返回一个值,显示带有与包含 date 的周的第一天的第一毫秒时间戳对应的基本数值对应的年份和周数。
语法:
WeekName( date[, period_no [, first_week_day [, broken_weeks [, reference_day]]]] )
weekname() 函数确定日期属于哪一周,并返回该周的周数和年份。一周的第一天由 FirstWeekDay 系统变量确定。但是,您可以使用 weekname() 函数中的 first_week_day 参数更改将哪个月设置为第一个月。
在 Qlik Sense 中,创建应用程序时获取区域设置,相应的设置作为环境变量存储在脚本中。
北美的应用程序开发人员经常在脚本中加入 Set BrokenWeeks=1; ,对应于中断周。欧洲的应用程序开发人员经常在脚本中加入 Set BrokenWeeks=0; ,对应于非中断周。
如果您的应用程序使用中断周,则周数计数从 1 月 1 日开始,到 FirstWeekDay 系统变量的前一天结束,而不管发生了多少天。
但是,如果您的应用程序使用的是连续的周,则第 1 周可以从上一年开始,也可以从 1 月的前几天开始。这取决于如何使用 ReferenceDay 和 FirstWeekDay 系统变量。
Weekend 函数示例
日期
ISO 周名称
US 周名称
2020 年 12 月 26 日星期六
2020/52
2020/52
2020 年 12 月 27 日星期日
2020/52
2020/53
2020 年 12 月 28 日星期一
2020/53
2020/53
2020 年 12 月 29 日星期二
2020/53
2020/53
2020 年 12 月 30 日星期三
2020/53
2020/53
2020 年 12 月 31 日星期四
2020/53
2020/53
2021 年 1 月 1 日星期五
2020/53
2021/01
2021 年 1 月 2 日周六
2020/53
2021/01
2021 年 1 月 3 日星期日
2020/53
2021/02
2021 年 1 月 4 日星期一
2021/01
2021/02
2021 年 1 月 5 日星期二
2021/01
2021/02
适用场景
当您希望按周比较聚合时,weekname() 函数非常有用。
例如,如果您想查看每周产品的总销售额。要保持与应用程序中 BrokenWeeks 环境变量的一致性,请使用 weekname() 而不是 lunarweekname() 。如果应用程序使用不间断的周,则第 1 周可能包含上一年 12 月的日期,也可能不包括本年 1 月的日期。如果应用程序使用的是中断周,则第 1 周可能少于 7 天。
返回数据类型: 双
参数
timestamp
要评估的日期或时间戳。
period_no
shift 为整数,其中值 0 表示该星期包含 date 。shift 为负数,表示前几星期,正数表示随后的几星期。
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
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
以下示例假设:
Set FirstWeekDay=0;
Set BrokenWeeks=0;
Set ReferenceDay=4;
函数示例
示例
结果
weekname('01/12/2013')
返回 2013/02。
weekname('01/12/2013', -1)
Returns 2013/01.
weekname('01/12/2013', 0, 1)
返回 2013/02。
示例 1 – 没有其他参数的日期
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 2021 最后一周和 2022 年前两周的一组交易的数据集加载到名为 ‘Transactions ’ 的表中。
设置为 MM/DD/YYYY 格式的 DateFormat 系统变量。
设置为 1 的 BrokenWeeks 系统变量。
设置为 6 的 FirstWeekDay 系统变量。
包含以下内容的前一加载:
加载脚本
SET BrokenWeeks=1;
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
Transactions:
Load
*,
WeekDay(date) as week_day,
Weekname(date) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
id
date
week_day
week_number
结果表
id
日期
week_day
week_number
8183
12/27/2021
Mon
2021/53
8184
12/28/2021
Tue
2021/53
8185
12/29/2021
Wed
2021/53
8186
12/30/2021
Thu
2021/53
8187
12/31/2021
Fri
2021/53
8188
01/01/2022
Sat
2022/01
8189
01/02/2022
Sun
2022/02
8190
01/03/2022
Mon
2022/02
8191
01/04/2022
Tue
2022/02
8192
01/05/2022
Wed
2022/02
8193
01/06/2022
Thu
2022/02
8194
01/07/2022
Fri
2022/02
8195
01/08/2022
Sat
2022/02
8196
01/09/2022
Sun
2022/03
8197
01/10/2022
Mon
2022/03
8198
01/11/2022
Tue
2022/03
8199
01/12/2022
Wed
2022/03
8200
01/13/2022
Thu
2022/03
8201
01/14/2022
Fri
2022/03
通过使用 weekname() 函数并将日期字段作为函数的参数传递,在前面的 LOAD 语句中创建了 ‘week_number ’ 字段。
weekname() 函数最初确定日期值属于哪一周,并返回周数计数和交易发生的年份。
FirstWeekDay 系统变量将星期日设置为一周的第一天。BrokenWeeks 系统变量将应用程序设置为使用中断周,这意味着第 1 周将从 1 月 1 日开始。
带有默认变量的 weekname() 函数图表。
第 1 周开始于 1 月 1 日,即星期六,因此在此日期发生的交易返回值 2022/01 (年和周数)。
识别交易 8192 的周数的 weekname() 函数图表。
由于应用程序使用的是不连续的星期,第一个工作日是星期日,因此从 1 月 2 日到 1 月 8 日发生的交易返回值 2022/02 (2022 年的第 2 周)。例如,发生在 1 月 5 日的交易 8192 返回 ‘week_number ’ 字段的值 2022/02 。
示例 2 – period_no
加载脚本和结果
概述
使用与第一个 相同的数据集和场景。
但是,在本例中,任务是创建一个字段 ‘previous_week_number ’,该字段返回交易发生之前的年份和周数。
打开 数据加载编辑器 ,并将以下加载脚本添加到新选项卡。
加载脚本
SET BrokenWeeks=1;
SET FirstWeekDay=6;
Transactions:
Load
*,
weekname(date,-1) as previous_week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
id
date
week_day
week_number
结果表
id
日期
week_day
week_number
8183
12/27/2021
Mon
2021/52
8184
12/28/2021
Tue
2021/52
8185
12/29/2021
Wed
2021/52
8186
12/30/2021
Thu
2021/52
8187
12/31/2021
Fri
2021/52
8188
01/01/2022
Sat
2021/52
8189
01/02/2022
Sun
2021/53
8190
01/03/2022
Mon
2021/53
8191
01/04/2022
Tue
2021/53
8192
01/05/2022
Wed
2021/53
8193
01/06/2022
Thu
2021/53
8194
01/07/2022
Fri
2021/53
8195
01/08/2022
Sat
2022/01
8196
01/09/2022
Sun
2022/02
8197
01/10/2022
Mon
2022/02
8198
01/11/2022
Tue
2022/02
8199
01/12/2022
Wed
2022/02
8200
01/13/2022
Thu
2022/02
8201
01/14/2022
Fri
2022/02
由于 weekname() 函数中使用了 -1 的 period_no 作为偏移参数,因此函数首先标识交易发生的周。然后,它查找前一周,并确定该周的第一毫秒。
weekname() 函数的图表,其中 period_no 偏移为 -1.
交易 8192 发生在 2022 年 1 月 5 日。weekname() 函数查找 2021 年 12 月 30 日前一周,并返回该日期的周数和年份 – 2021/53 。
示例 3 – first_week_day
加载脚本和结果
概述
使用与第一个 相同的数据集和场景。
However, in this example, the company policy is for the year to begin from April 1.
打开 数据加载编辑器 ,并将以下加载脚本添加到新选项卡。
加载脚本
SET BrokenWeeks=1;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekday(date) as week_day,
weekname(date,0,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
id
date
week_day
week_number
结果表
id
日期
week_day
week_number
8183
12/27/2021
Mon
2021/52
8184
12/28/2021
Tue
2021/53
8185
12/29/2021
Wed
2021/53
8186
12/30/2021
Thu
2021/53
8187
12/31/2021
Fri
2021/53
8188
01/01/2022
Sat
2022/01
8189
01/02/2022
Sun
2022/01
8190
01/03/2022
Mon
2022/01
8191
01/04/2022
Tue
2022/02
8192
01/05/2022
Wed
2022/02
8193
01/06/2022
Thu
2022/02
8194
01/07/2022
Fri
2022/02
8195
01/08/2022
Sat
2022/02
8196
01/09/2022
Sun
2022/02
8197
01/10/2022
Mon
2022/02
8198
01/11/2022
Tue
2022/03
8199
01/12/2022
Wed
2022/03
8200
01/13/2022
Thu
2022/03
8201
01/14/2022
Fri
2022/03
星期二为一周的第一天的 weekname() 函数的图表。
因为 weekname() 函数中使用了 1 的 first_week_date 参数,所以它使用星期二作为一周的第一天。因此,该函数确定 2021 年第 53 周从 12 月 28 日星期二开始;而且,由于应用程序使用了中断周,第一周从 2022 年 1 月 1 日开始,到 2022 年 2 月 3 日星期一的最后一毫秒结束。
显示交易 8192 的周数的图表,星期二为一周的第一天。
交易 8192 发生在 2022 年 1 月 5 日。因此,使用周二的 first_week_day 参数,weekname() 函数返回 ‘week_number ’ 字段的值 2022/02 。
示例 4 – 图表对象
加载脚本和图表表达式
概述
使用与第一个 相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。在应用程序的图表对象中创建了返回交易发生时的周数的计算,将其作为度量。
加载脚本
SET BrokenWeeks=1;
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
要计算交易发生的周的开始时间,请创建以下度量:
=weekname(date)
结果表
id
日期
=weekday(date)
=weekname(date)
8183
12/27/2021
Mon
2021/53
8184
12/28/2021
Tue
2021/53
8185
12/29/2021
Wed
2021/53
8186
12/30/2021
Thu
2021/53
8187
12/31/2021
Fri
2021/53
8188
01/01/2022
Sat
2022/01
8189
01/02/2022
Sun
2022/02
8190
01/03/2022
Mon
2022/02
8191
01/04/2022
Tue
2022/02
8192
01/05/2022
Wed
2022/02
8193
01/06/2022
Thu
2022/02
8194
01/07/2022
Fri
2022/02
8195
01/08/2022
Sat
2022/02
8196
01/09/2022
Sun
2022/03
8197
01/10/2022
Mon
2022/03
8198
01/11/2022
Tue
2022/03
8199
01/12/2022
Wed
2022/03
8200
01/13/2022
Thu
2022/03
8201
01/14/2022
Fri
2022/03
通过使用 weekname() 函数并将日期字段作为函数的参数传递,将 ‘week_number ’ 字段创建为图表对象中的度量。
weekname() 函数最初确定日期值属于哪一周,并返回周数计数和交易发生的年份。
FirstWeekDay 系统变量将星期日设置为一周的第一天。BrokenWeeks 系统变量将应用程序设置为使用中断周,这意味着第 1 周从 1 月 1 日开始。
显示周数的图表,星期日为一周的第一天。
显示交易 8192 发生在第二周的图表。
由于应用程序使用的是不连续的星期,第一个工作日是星期日,因此从 1 月 2 日到 1 月 8 日发生的交易返回值 2022/02(2022 年的第 2 周)。请注意,交易 8192 发生在 1 月 5 日,并返回 ‘week_number ’ 字段的值 2022/02。
示例 5 – 场景
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 2019 最后一周和 2020 年前两周的一组交易的数据集加载到名为 ‘Transactions ’ 的表中。
设置为 0 的 BrokenWeeks 系统变量。
设置为 2 的 ReferenceDay 系统变量。
设置为 MM/DD/YYYY 格式的 DateFormat 系统变量。
加载脚本
SET BrokenWeeks=0;
SET ReferenceDay=2;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2019,58.27
8184,12/28/2019,67.42
8185,12/29/2019,23.80
8186,12/30/2019,82.06
8187,12/31/2019,40.56
8188,01/01/2020,37.23
8189,01/02/2020,17.17
8190,01/03/2020,88.27
8191,01/04/2020,57.42
8192,01/05/2020,53.80
8193,01/06/2020,82.06
8194,01/07/2020,40.56
8195,01/08/2020,53.67
8196,01/09/2020,26.63
8197,01/10/2020,72.48
8198,01/11/2020,18.37
8199,01/12/2020,45.26
8200,01/13/2020,58.23
8201,01/14/2020,18.52
];
结果
加载数据并打开工作表。新建表格。
使用以下表达式创建计算维度:
=weekname(date)
要计算总销售额,请创建以下聚合度量:
=sum(amount)
将度量的数字格式 设置为金额 。
结果表
weekname(date)
=sum(amount)
2019/52
$125.69
2020/01
$346.51
2020/02
$347.57
2020/03
$122.01
要演示在此场景中使用 weekname() 函数的结果,请添加以下字段作为维度:
date
带有日期字段的结果表
weekname(date)
日期
=sum(amount)
2019/52
12/27/2019
$58.27
2019/52
12/28/2019
$67.42
2020/01
12/29/2019
$23.80
2020/01
12/30/2019
$82.06
2020/01
12/31/2019
$40.56
2020/01
01/01/2020
$37.23
2020/01
01/02/2020
$17.17
2020/01
01/03/2020
$88.27
2020/01
01/04/2020
$57.42
2020/02
01/05/2020
$53.80
2020/02
01/06/2020
$82.06
2020/02
01/07/2020
$40.56
2020/02
01/08/2020
$53.67
2020/02
01/09/2020
$26.63
2020/02
01/10/2020
$72.48
2020/02
01/11/2020
$18.37
2020/03
01/12/2020
$45.26
2020/03
01/13/2020
$58.23
2020/03
01/14/2020
$18.52
由于应用程序使用不间断的周,并且由于 ReferenceDay 系统变量,第 1 周在 1 月至少需要两天,因此 2020 年第 1 周包括 2019 年 12 月 29 日的交易。