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) 返回 2013/01。 weekname('01/12/2013', 0, 1) 返回 2013/02。
示例 1 – 没有其他参数的日期 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 2021 最后一周和 2022 年前两周的一组交易的数据集加载到名为 ‘Transactions ’ 的表中。
设置为 MM/DD/YYYY 格式的 DateFormat 系统变量。
设置为 1 的 BrokenWeeks 系统变量。
设置为 6 的 FirstWeekDay 系统变量。
包含以下内容的前置 Load:
加载脚本
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 日的交易。