makeweekdate - 脚本和图表函数在该页面上
此函数返回根据年、周数和星期几计算的日期。
语法:
MakeWeekDate( weekyear [, week [, weekday [, first_week_day [, broken_weeks [, reference_day]]]]] )
返回数据类型: 双
makeweekdate() 函数可作为脚本和图表函数使用。函数将根据传递到函数中的参数计算日期。
参数
weekyear
WeekYear() 函数为特定日期定义的年份,即周数所属的年份。
信息注释 在某些情况下,周年份可能与日历年不同,例如,如果第 1 周已经在上一年的 12 月开始。
week
Week() 函数为特定日期定义的周数。
如果未注明周数,则假定为 1。
weekday
WeekDay() 函数为相关日期定义的星期几。0 是一周中的第一天,6 是一周的最后一天。
如果未指定星期几,则假定为 0。
信息注释 尽管 0 总是表示一周的第一天,6 总是最后一天,但对应的工作日由 first_week_day 参数确定。如果忽略,使用 FirstWeekDay 变量的值。
如果使用中断周,以及不可能的参数组合,这可能会导致不属于所选年份的结果。
示例:
MakeWeekDate(2021,1,0,6,1)
返回 ‘Dec 27 2020’ ,因为这一天是指定周的第一天(星期日)。2021 年 1 月 1 日是星期五。
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 周的参考日。
有关系统变量的详细信息,请参见ReferenceDay
适用场景
makeweekdate() 函数通常用于脚本中的数据生成,以生成日期列表,或在输入数据中提供年、周和日时构造日期。
以下示例假设:
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
函数示例
makeweekdate(2014,6,6)
返回 02/09/2014
makeweekdate(2014,6,1)
返回 02/04/2014
makeweekdate(2014,6)
返回 02/03/2014 (假定普通日为 0)
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 包括日
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
在名为 Sales 的表中包含 2022 年每周销售总额的数据集。
跨三个字段提供的交易日期:year 、week 和 sales 。
前置加载,用于创建度量 end_of_week ,使用 makeweekdate() 函数以 MM/DD/YYYY 格式返回该周星期五的日期。
为了证明返回的日期是星期五,end_of_week 表达式也被包装在 weekday() 函数中以显示星期几。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week,4) as end_of_week,
weekday(makeweekdate(transaction_year, transaction_week,4)) as week_day
;
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
transaction_year
transaction_week
end_of_week
week_day
结果表
2022
01
01/07/2022
Fri
2022
02
01/14/2022
Fri
2022
03
01/21/2022
Fri
2022
04
01/28/2022
Fri
2022
05
02/04/2022
Fri
2022
06
02/11/2022
Fri
2022
07
02/18/2022
Fri
end_of_week 字段是在前面的 LOAD 语句中使用 makeweekdate() 函数创建的。transaction_year 、transaction_week 字段作为年和周参数通过函数传递。值 4 用于日参数。
然后,该函数将这些值组合并转换为日期字段,以 DateFormat 系统变量的格式返回结果。
makeweekdate() 函数及其参数也封装在一个 weekday() 函数中以返回 week_day 字段;如上表所示,week_day 字段显示这些日期确实发生在星期五。
示例 2 – 排除日
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
在名为 Sales 的表中包含 2022 年每周销售总额的数据集。
跨三个字段提供的交易日期:year 、week 和 sales 。
前置加载,用于使用 makeweekdate() 函数创建度量 first_day_of_week 。这将返回星期一的日期,格式为 MM/DD/YYYY。
为了证明返回的日期是星期一,first_day_of_week 表达式也被包装在 weekday() 函数中以显示星期几。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week) as first_day_of_week,
weekday(makeweekdate(transaction_year, transaction_week)) as week_day
;
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
transaction_year
transaction_week
first_day_of_week
week_day
结果表
2022
01
01/03/2022
Mon
2022
02
01/10/2022
Mon
2022
03
01/17/2022
Mon
2022
04
01/24/2022
Mon
2022
05
01/31/2022
Mon
2022
06
02/07/2022
Mon
2022
07
02/14/2022
Mon
first_day_of_week 字段是在前面的 LOAD 语句中使用 makeweekdate() 函数创建的。transaction_year 和 transaction_week 参数作为函数参数传递,day 参数为空。
然后,该函数将这些值组合并转换为日期字段,以 DateFormat 系统变量的格式返回结果。
makeweekdate() 函数及其参数也封装在 weekday() 函数中以返回 week_day 字段。从上表中可以看出,week_day 字段在所有情况下都返回星期一,因为该参数在 makeweekdate() 函数中为空,默认为 0 (一周的第一天),并且 FirstWeekDay 系统变量将一周的第 1 天设置为星期一。
示例 3 – 图表对象示例
加载脚本和图表表达式
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
在本例中,将使用图表对象创建与第一个示例中的 end_of_week 计算等效的度量。此度量值将使用 makeweekdate() 函数以 MM/DD/YYYY 格式返回该星期五的日期。
为了证明返回的日期是星期五,创建了第二个度量来返回星期几。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Master_Calendar:
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
结果
执行以下操作:
加载数据并打开工作表。创建新表并将这些字段添加为维度:
transaction_year
transaction_week
要执行与第一个示例中的 end_of_week 字段等效的计算,请创建以下度量:
=makeweekdate(transaction_year,transaction_week,4)
要计算每个事务的星期几,请创建以下度量:
=weekday(makeweekdate(transaction_year,transaction_week,4))
结果表
2022
01
01/07/2022
Fri
2022
02
01/14/2022
Fri
2022
03
01/21/2022
Fri
2022
04
01/28/2022
Fri
2022
05
02/04/2022
Fri
2022
06
02/11/2022
Fri
2022
07
02/18/2022
Fri
使用 makeweekdate() 函数在图表对象中创建与 end_of_week 的等效字段作为度量。transaction_year 和 transaction_week 字段作为年和周参数传递。值 4 用于日参数。
然后,该函数将这些值组合并转换为日期字段,以 DateFormat 系统变量的格式返回结果。
makeweekdate() 函数及其参数也封装在一个 weekday() 函数中,以返回与第一个示例中的 week_day 字段等效的计算。如上表所示,右侧最后一列显示这些日期确实发生在星期五。
示例 4 – 场景
加载脚本和图表表达式
概述
在本例中,创建一个包含 2022 年所有周五的日期列表。
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Calendar:
load
*,
weekday(date) as weekday
where year(date)=2022;
load
makeweekdate(2022,recno()-2,4) as date
AutoGenerate 60;
结果
结果表
01/07/2022
Fri
01/14/2022
Fri
01/21/2022
Fri
01/28/2022
Fri
02/04/2022
Fri
02/11/2022
Fri
02/18/2022
Fri
02/25/2022
Fri
03/04/2022
Fri
03/11/2022
Fri
03/18/2022
Fri
03/25/2022
Fri
04/01/2022
Fri
04/08/2022
Fri
04/15/2022
Fri
04/22/2022
Fri
04/29/2022
Fri
05/06/2022
Fri
05/13/2022
Fri
05/20/2022
Fri
05/27/2022
Fri
06/03/2022
Fri
06/10/2022
Fri
06/17/2022
Fri
+ 27 更多行
makeweekdate() 函数查找 2022 年的每个星期五。使用为 -2 的 week 参数可确保不会错过任何日期。最后,为了清晰起见,前置的加载创建了一个额外的 weekday 字段,以显示每个 date 值都是星期五。