全部展开/折叠  
                     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 日的交易。