makeweekdate - 脚本和图表函数
此函数用于返回根据年份 YYYY、星期 WW 和星期几 D 计算的日期。
语法:
MakeWeekDate(YYYY [ , WW [ , D ] ])
返回数据类型: 双
makeweekdate() 函数可作为脚本和图表函数使用。函数将根据传递到函数中的参数计算日期。如果省略星期日参数,函数将返回该周的星期一的日期。
makeweekdate() 函数不考虑 BrokenWeek、ReferenceDay 或 FirstWeekDay 系统变量。第 1 周从一月的第一个星期一开始。例如,在 2022 年,第一周从 1 月 3 日开始。
参数 | 说明 |
---|---|
YYYY | 作为整数的年份。 |
WW |
作为整数的周。 周可以是正数或负数,并且可以大于 52 以返回不同年份的日期。 |
D |
作为整数的星期几。 如果未指定星期几,则假定为 0(星期一)。一周的剩余天数分配如下:周一为 0,周二为 1,周三为 2,周四为3,周五为 4,周六为 5,周日为 6。 |
适用场景
makeweekdate() 函数通常用于脚本中的数据生成,以生成日期列表,或在输入数据中提供年、周和日时构造日期。
Example | 结果 |
---|---|
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';
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
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=6;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week) as first_day_of_week,
day(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
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 字段显示这些日期确实发生在星期一(即使 FirstWeekDay 变量将星期日设置为一周的第一天),因为 makeweekdate() 函数中的 day 参数为空。
示例 3 – 图表对象示例
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
在名为 Sales 的表中包含 2022 年每周销售总额的数据集。
-
跨三个字段提供的交易日期:year、week 和 sales。
在本例中,将使用图表对象创建与第一个示例中的 end_of_week 计算等效的度量。此度量值将使用 makeweekdate() 函数以 MM/DD/YYYY 格式返回该星期五的日期。
为了证明返回的日期是星期五,创建了第二个度量来返回星期几。
加载脚本
SET DateFormat=’MM/DD/YYYY';
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))
transaction_year | transaction_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';
Calendar:
load
*,
weekday(date) as weekday
where year(date)=2022;
load
makeweekdate(2022,recno()-2,4) as date
AutoGenerate 60;
结果
日期 | weekday |
---|---|
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 值都是星期五。