weekname - 脚本和图表函数
此函数用于返回一个值,显示带有与包含 date 的周的第一天的第一毫秒时间戳对应的基本数值对应的年份和周数。
语法:
WeekName(date[, period_no[,first_week_day]])
weekname() 函数确定日期属于哪一周,并返回该周的周数和年份。一周的第一天由 FirstWeekDay系统变量确定。但是,您可以使用 weekname() 函数中的 first_week_day 参数更改将哪个月设置为第一个月。
默认情况下,Qlik Sense应用程序使用断周(由 BrokenWeeks 系统变量定义),因此周数计数从 1 月 1 日开始,并在 FirstWeekDay 系统变量前一天结束,而不管发生了多少天。
但是,如果您的应用程序使用的是连续的周,则第 1 周可以从上一年开始,也可以从 1 月的前几天开始。这取决于如何使用 ReferenceDay 和 FirstWeekDay 系统变量。
适用场景
当您希望按周比较聚合时,weekname() 函数非常有用。
例如,如果您想查看每周产品的总销售额。要保持与应用程序中 BrokenWeeks 环境变量的一致性,请使用 weekname() 而不是 lunarweekname()。如果应用程序使用不间断的周,则第 1 周可能包含上一年 12 月的日期,也可能不包括本年 1 月的日期。如果应用程序使用的是中断周,则第 1 周可能少于 7 天。
返回数据类型: 双
参数 | 说明 |
---|---|
date | 要评估的日期或时间戳。 |
period_no | shift 为整数,其中值 0 表示该星期包含 date。shift 为负数,表示前几星期,正数表示随后的几星期。 |
first_week_day |
指定一周的开始日期。如果忽略,使用 FirstWeekDay 变量的值。 可能的值 first_week_day 为:周一为 0,周二为 1,周三为 2,周四为3,周五为 4,周六为 5,周日为 6。 有关系统变量的详细信息,请参见FirstWeekDay。 |
可以使用以下值在 first_week_day 参数中设置一周开始的日期:
日 | 值 |
---|---|
星期一 | 0 |
星期二 | 1 |
星期三 | 2 |
星期四 | 3 |
星期五 | 4 |
星期六 | 5 |
星期日 | 6 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
Example | 结果 |
---|---|
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 系统变量。
-
包含以下内容的前一加载:
-
设置为字段 ‘week_number’ 的函数 weekday(),返回交易发生时的年份和周数。
-
设置为名为 ‘week_day’ 的字段的 weekname() 函数,用于显示每个交易日期的工作日值。
-
加载脚本
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 日开始。
第 1 周开始于 1 月 1 日,即星期六,因此在此日期发生的交易返回值 2022/01(年和周数)。
由于应用程序使用的是不连续的星期,第一个工作日是星期日,因此从 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 作为偏移参数,因此函数首先标识交易发生的周。然后,它查找前一周,并确定该周的第一毫秒。
交易 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() 函数中使用了 1 的 first_week_date 参数,所以它使用星期二作为一周的第一天。因此,该函数确定 2021 年第 53 周从 12 月 28 日星期二开始;而且,由于应用程序使用了中断周,第一周从 2022 年 1 月 1 日开始,到 2022 年 2 月 3 日星期一的最后一毫秒结束。
交易 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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
id
-
date
-
=week_day (date)
要计算交易发生的周的开始时间,请创建以下度量:
=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 日开始。
由于应用程序使用的是不连续的星期,第一个工作日是星期日,因此从 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 日的交易。