week - 脚本和图表函数在该页面上
此函数返回一个整数,表示与输入的日期对应的周数。
语法:
week( 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
week() 函数确定日期属于哪一周,并返回周数。
在 Qlik Sense 中,创建应用程序时获取区域设置,相应的设置作为环境变量存储在脚本中。这些用于确定周数。
这意味着大多数欧洲应用程序开发人员都会获得以下环境变量,与 ISO 8601 定义相对应:
Set FirstWeekDay =0; // Monday as first week day
Set BrokenWeeks =0; // Use unbroken weeks
Set ReferenceDay =4; // Jan 4th is always in week 1
北美应用程序开发人员通常会获得以下环境变量:
Set FirstWeekDay =6; // Sunday as first week day
Set BrokenWeeks =1; // Use broken weeks
Set ReferenceDay =1; // Jan 1st is always in week 1
一周的第一天由 FirstWeekDay 系统变量确定。您还可以使用 week() 函数中的 first_week_day 参数更改将哪个月设置为第一个月。
如果您的应用程序使用中断周,则周数计数从 1 月 1 日开始,并在 FirstWeekDay 系统变量前一天结束,而不管发生了多少天。
如果您的应用程序使用的是连续的周,则第 1 周可以从上一年开始,也可以从 1 月的前几天开始。这取决于如何使用 FirstWeekDay 和 ReferenceDay 环境变量。
适用场景
当您希望按周比较聚合时,The week() 函数非常有用。例如,如果您想查看每周产品的总销售额,则可以使用它。当用户希望计算不一定使用应用程序的 BrokenWeeks 、FirstWeekDay 或 ReferenceDay 系统变量时,会选择函数 week() 而不是 weekname() 。
例如,如果您想查看每周产品的总销售额。
如果应用程序使用不间断的周,则第 1 周可能包含上一年 12 月的日期,也可能不包括本年 1 月的日期。如果应用程序使用的是中断周,则第 1 周可能少于 7 天。
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
以下示例假设
Set DateFormat= 'MM/DD/YYYY';
Set FirstWeekDay=0;
Set BrokenWeeks=0;
Set ReferenceDay=4;
函数示例 week('12/28/2021')
返回 52。
week(44614) 返回 8,因为这是 2022 年 2 月 22 日的序列号。 week('01/03/2021') 返回 53。 week('01/03/2021',6) 返回 1。
示例 1 – 默认系统变量 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 2021 最后一周和 2022 年前两周的一组事务的数据集加载到名为 Transactions 的表中。
日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
创建字段 week_number ,返回交易发生时的年和周数字。
创建一个名为 week_day 的字段,显示每个交易日期的工作日值。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(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
结果表 8183 12/27/2021 Mon 53 8184 12/28/2021 Tue 53 8185 12/29/2021 Wed 53 8186 12/30/2021 Thu 53 8187 12/31/2021 Fri 53 8188 01/01/2022 Sat 1 8189 01/02/2022 Sun 2 8190 01/03/2022 Mon 2 8191 01/04/2022 Tue 2 8192 01/05/2022 Wed 2 8193 01/06/2022 Thu 2 8194 01/07/2022 Fri 2 8195 01/08/2022 Sat 2 8196 01/09/2022 Sun 3 8197 01/10/2022 Mon 3 8198 01/11/2022 Tue 3 8199 01/12/2022 Wed 3 8200 01/13/2022 Thu 3 8201 01/14/2022 Fri 3
通过使用 week() 函数并将 date 字段作为函数的参数传递,在前置 Load 语句中创建了 week_number 字段。
没有其他参数传递到函数中,因此影响 week() 函数的以下默认变量有效:
使用默认系统变量的 week() 函数图表
因为应用程序正在使用默认 BrokenWeeks 系统变量,所以第一周从 1 月 1 日(星期六)开始。
由于默认的 FirstWeekDay 系统变量,周在星期天开始。1 月 1 日之后的第一个星期天发生在 1 月 2 日,也就是第 2 周开始的时候。
示例 2 – first_week_day 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
在本例中,我们希望将工作周的开始时间设置为星期二。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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
结果表 8183 12/27/2021 Mon 52 8184 12/28/2021 Tue 53 8185 12/29/2021 Wed 53 8186 12/30/2021 Thu 53 8187 12/31/2021 Fri 53 8188 01/01/2022 Sat 1 8189 01/02/2022 Sun 1 8190 01/03/2022 Mon 1 8191 01/04/2022 Tue 2 8192 01/05/2022 Wed 2 8193 01/06/2022 Thu 2 8194 01/07/2022 Fri 2 8195 01/08/2022 Sat 2 8196 01/09/2022 Sun 2 8197 01/10/2022 Mon 2 8198 01/11/2022 Tue 3 8199 01/12/2022 Wed 3 8200 01/13/2022 Thu 3 8201 01/14/2022 Fri 3
应用程序仍在使用中断周。但是,week() 函数中的 first_week_day 参数已设置为 1。这将一周的第一天设置为星期二。
week() 函数的图表,first_week_day 示例
应用程序正在使用默认 BrokenWeeks 系统变量,所以第一周从 1 月 1 日(星期六)开始。
week() 函数的 first_week_day 参数将第一个工作日设置为星期二。因此,第 53 周从 2021 年 12 月 28 日开始。
但是,由于该函数仍在使用中断周,第 1 周将仅为两天,因为 1 月 1 日之后的第一个星期二发生在 1 月 3 日。
示例 3 – unbroken_weeks 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。
在本例中,我们使用非中断周。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,6,0) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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
week() 函数的图表,图表对象示例
结果表 8183 12/27/2021 Mon 52 8184 12/28/2021 Tue 52 8185 12/29/2021 Wed 52 8186 12/30/2021 Thu 52 8187 12/31/2021 Fri 52 8188 01/01/2022 Sat 52 8189 01/02/2022 Sun 1 8190 01/03/2022 Mon 1 8191 01/04/2022 Tue 1 8192 01/05/2022 Wed 1 8193 01/06/2022 Thu 1 8194 01/07/2022 Fri 1 8195 01/08/2022 Sat 1 8196 01/09/2022 Sun 2 8197 01/10/2022 Mon 2 8198 01/11/2022 Tue 2 8199 01/12/2022 Wed 2 8200 01/13/2022 Thu 2 8201 01/14/2022 Fri 2
first_week_date 参数设置为 1,使星期二成为一周的第一天。broken_weeks 参数设置为 0,强制函数使用非中断周。最后,第三个参数将 reference_day 设置为 2。
first_week_date 参数设置为 6,使星期日成为一周的第一天。broken_weeks 参数设置为 0,强制函数使用非中断周。
week() 函数图,使用非中断周的示例
通过使用连续周,第一周不一定从 1 月 1 日开始;相反,它要求至少有四天。因此,在数据集中,第 52 周将于 2022 年 1 月 1 日星期六结束。然后,第 1 周从 FirstWeekDay 系统变量开始,即 1 月 2 日星期日。本周将在下一个星期六 1 月 8 日结束。
示例 4 – reference_day 加载脚本和结果 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
此外,必须满足以下条件:
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1,0,2) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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
结果表 8183 12/27/2021 Mon 52 8184 12/28/2021 Tue 1 8185 12/29/2021 Wed 1 8186 12/30/2021 Thu 1 8187 12/31/2021 Fri 1 8188 01/01/2022 Sat 1 8189 01/02/2022 Sun 1 8190 01/03/2022 Mon 1 8191 01/04/2022 Tue 2 8192 01/05/2022 Wed 2 8193 01/06/2022 Thu 2 8194 01/07/2022 Fri 2 8195 01/08/2022 Sat 2 8196 01/09/2022 Sun 2 8197 01/10/2022 Mon 2 8198 01/11/2022 Tue 3 8199 01/12/2022 Wed 3 8200 01/13/2022 Thu 3 8201 01/14/2022 Fri 3
first_week_date 参数设置为 1,使星期二成为一周的第一天。broken_weeks 参数设置为 0,强制函数使用非中断周。最后,第三个参数将 reference_day 参数设置为2。
week() 函数的图表,reference_day 示例
该函数使用连续的周数,并将 reference_day 值 2 用作参数,因此第 1 周只需要包括 1 月份的两天。由于第一个工作日是星期二,第一周从 2021 年 12 月 28 日开始,到 2022 年 1 月 3 日星期一结束。
示例 5 – 图表对象示例 加载脚本和图表表达式 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。返回周数的计算在图表对象中创建为度量。
加载脚本
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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
];
结果
执行以下操作:
加载数据并打开工作表。新建表格。
添加以下字段作为维度:
接下来,创建以下度量:
=week (date)
创建度量, week_day ,以显示每个交易日期的工作日值:
=weekday(date)
结果表 8183 12/27/2021 53 Mon 8184 12/28/2021 53 Tue 8185 12/29/2021 53 Wed 8186 12/30/2021 53 Thu 8187 12/31/2021 53 Fri 8188 01/01/2022 1 Sat 8189 01/02/2022 2 Sun 8190 01/03/2022 2 Mon 8191 01/04/2022 2 Tue 8192 01/05/2022 2 Wed 8193 01/06/2022 2 Thu 8194 01/07/2022 2 Fri 8195 01/08/2022 2 Sat 8196 01/09/2022 3 Sun 8197 01/10/2022 3 Mon 8198 01/11/2022 3 Tue 8199 01/12/2022 3 Wed 8200 01/13/2022 3 Thu 8201 01/14/2022 3 Fri
通过使用 week() 函数并将 date 字段作为函数的参数传递,在前置 Load 语句中创建了 week_number 字段。
没有其他参数传递到函数中,因此影响 week() 函数的以下默认变量有效:
week() 函数的图表,图表对象示例
因为应用程序正在使用默认 BrokenWeeks 系统变量,所以第一周从 1 月 1 日(星期六)开始。
由于默认的 FirstWeekDay 系统变量,周在星期天开始。1 月 1 日之后的第一个星期天发生在 1 月 2 日,也就是第 2 周开始的时候。
示例 6 – 场景 加载脚本和图表表达式 概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
该应用程序主要使用仪表板上的休息周。但是,最终用户想要一个图表对象,它使用连续的周来显示每周的总销售额。参考日应为 1 月 2 日,星期二开始。即使该维度在数据模型中不可用,也可以使用 week() 函数作为图表中的计算维度来实现这点。
加载脚本
SET BrokenWeeks=1;
SET ReferenceDay=0;
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
];
结果
执行以下操作:
加载数据并打开工作表。新建表格。
创建以下计算维度:
=week(date)
接下来,创建以下聚合度量:
=sum(amount)
将度量的数字格式 设置为金额 。
选择排序 菜单,并删除计算维度的自定义排序。
取消选择按数字排序 和按字母排序 选项。
结果表 52 $125.69 53 $146.42 1 $200.09 2 $347.57 3 $122.01