weekend - 脚本和图表函数在该页面上
此函数返回一个值,该值对应于包含 date 的日历周的最后一天的最后一毫秒的时间戳。默认的输出格式为在脚本中所设置的 DateFormat 。
语法:
WeekEnd( timestamp [, period_no [, first_week_day ]] )
返回数据类型: 双
weekend() 函数确定日期属于哪个周。然后以日期格式返回该周最后一毫秒的时间戳。一周的第一天由 FirstWeekDay 环境变量确定。但是,这可以被 weekend() 函数中的 first_week_day 参数取代。
参数
timestamp
要评估的日期或时间戳。
period_no
shift 为整数,其中值 0 表示该星期包含 date 。shift 为负数,表示前几星期,正数表示随后的几星期。
first_week_day
指定一周的开始日期。如果忽略,使用 FirstWeekDay 变量的值。
first_week_day 可能的值为:周一为 0,周二为 1,周三为 2,周四为3,周五为 4,周六为 5,星期日为 6。
有关系统变量的详细信息,请参见FirstWeekDay
适用场景
当用户希望计算使用指定日期的一周剩余天数时,weekend() 函数通常用作表达式的一部分。例如,如果用户想计算一周内尚未产生的总利息,则可以使用该方法。
以下示例假设:
SET FirstWeekDay=0;
weekend('01/10/2013')
返回 01/12/2013 23:59:59 。
weekend('01/10/2013', -1)
返回 01/05/2013 23:59:59. 。
weekend('01/10/2013', 0, 1)
返回 01/14/2013 23:59:59 。
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例:
如果您想要周和周数的 ISO 设置,请确保脚本中包含以下内容:
Set DateFormat ='YYYY-MM-DD';
Set FirstWeekDay =0; // Monday as first week day
Set BrokenWeeks =0; //(use unbroken weeks)
Set ReferenceDay =4; // Jan 4th is always in week 1
如果需要 US 设置,请确保脚本中包含以下内容:
Set DateFormat ='M/D/YYYY';
Set FirstWeekDay =6; // Sunday as first week day
Set BrokenWeeks =1; //(use broken weeks)
Set ReferenceDay =1; // Jan 1st is always in week 1
以上示例从 weekend() 函数中得出以下结果:
Weekend 函数示例
日期
ISO 周末
US 周末
2020 年 12 月 26 日星期六
2020-12-27
12/26/2020
2020 年 12 月 27 日星期日
2020-12-27
1/2/2021
2020 年 12 月 28 日星期一
2021-01-03
1/2/2021
2020 年 12 月 29 日星期二
2021-01-03
1/2/2021
2020 年 12 月 30 日星期三
2021-01-03
1/2/2021
2020 年 12 月 31 日星期四
2021-01-03
1/2/2021
2021 年 1 月 1 日星期五
2021-01-03
1/2/2021
2021 年 1 月 2 日周六
2021-01-03
1/2/2021
2021 年 1 月 3 日星期日
2021-01-03
1/9/2021
2021 年 1 月 4 日星期一
2021-01-10
1/9/2021
2021 年 1 月 5 日星期二
2021-01-10
1/9/2021
信息注释 ISO 列中的周末为星期日,US 列中的周末为周六。
示例 1 – 基本示例
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
包含 2022 年交易集的数据集,该数据集加载到名为 Transactions 的表中。
日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
创建字段 end_of_week ,返回交易发生的周结束的时间戳。
加载脚本
SET FirstWeekDay=6;
Transactions:
Load
*,
weekend(date) as end_of_week,
timestamp(weekend(date)) as end_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
date
end_of_week
end_of_week_timestamp
结果表
1/7/2022
01/08/2022
1/8/2022 11:59:59 PM
1/19/2022
01/22/2022
1/22/2022 11:59:59 PM
2/5/2022
02/05/2022
2/5/2022 11:59:59 PM
2/28/2022
03/05/2022
3/5/2022 11:59:59 PM
3/16/2022
03/19/2022
3/19/2022 11:59:59 PM
4/1/2022
04/02/2022
4/2/2022 11:59:59 PM
5/7/2022
05/07/2022
5/7/2022 11:59:59 PM
5/16/2022
05/21/2022
5/21/2022 11:59:59 PM
6/15/2022
06/18/2022
6/18/2022 11:59:59 PM
6/26/2022
07/02/2022
7/2/2022 11:59:59 PM
7/9/2022
07/09/2022
7/9/2022 11:59:59 PM
7/22/2022
07/23/2022
7/23/2022 11:59:59 PM
7/23/2022
07/23/2022
7/23/2022 11:59:59 PM
7/27/2022
07/30/2022
7/30/2022 11:59:59 PM
8/2/2022
08/06/2022
8/6/2022 11:59:59 PM
8/8/2022
08/13/2022
8/13/2022 11:59:59 PM
8/19/2022
08/20/2022
8/20/2022 11:59:59 PM
9/26/2022
10/01/2022
10/1/2022 11:59:59 PM
10/14/2022
10/15/2022
10/15/2022 11:59:59 PM
10/29/2022
10/29/2022
10/29/2022 11:59:59 PM
通过使用 weekend() 函数并将日期字段作为函数的参数传递,在前面的 LOAD 语句中创建了 end_of_week 字段。
weekend() 函数标识日期值属于哪一周,并返回该周最后一毫秒的时间戳。
weekend() 函数的图表,基本示例
交易 8191 发生在 2 月 5 日。FirstWeekDay 系统变量将一周的第一天设置为星期日。weekend() 函数确定 2 月 5 日之后的第一个星期六,即本周的最后一个星期六是2月5号。因此,该事务的 end_of_week 值将返回当天的最后一毫秒,即二月 5 日午夜 11:59:59。
示例 2 – period_no
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekend(date,-1) as previous_week_end,
timestamp(weekend(date,-1)) as previous_week_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
1/7/2022
01/01/2022
1/1/2022 11:59:59 PM
1/19/2022
01/15/2022
1/15/2022 11:59:59 PM
2/5/2022
01/29/2022
1/29/2022 11:59:59 PM
2/28/2022
02/26/2022
2/26/2022 11:59:59 PM
3/16/2022
03/12/2022
3/12/2022 11:59:59 PM
4/1/2022
03/26/2022
3/26/2022 11:59:59 PM
5/7/2022
04/30/2022
4/30/2022 11:59:59 PM
5/16/2022
05/14/2022
5/14/2022 11:59:59 PM
6/15/2022
06/11/2022
6/11/2022 11:59:59 PM
6/26/2022
06/25/2022
6/25/2022 11:59:59 PM
7/9/2022
07/02/2022
7/2/2022 11:59:59 PM
7/22/2022
07/16/2022
7/16/2022 11:59:59 PM
7/23/2022
07/16/2022
7/16/2022 11:59:59 PM
7/27/2022
07/23/2022
7/23/2022 11:59:59 PM
8/2/2022
07/30/2022
7/30/2022 11:59:59 PM
8/8/2022
08/06/2022
8/6/2022 11:59:59 PM
8/19/2022
08/13/2022
8/13/2022 11:59:59 PM
9/26/2022
09/24/2022
9/24/2022 11:59:59 PM
10/14/2022
10/08/2022
10/8/2022 11:59:59 PM
10/29/2022
10/22/2022
10/22/2022 11:59:59 PM
在本例中,由于 weekend() 函数中使用了为 -1 的 period_no 作为偏移量参数,因此该函数首先标识交易发生的周。然后,它查找前一周,并确定该周的最后一毫秒。
weekend() 函数的图表,period_no 示例
交易 8196 发生在 6 月 15 日。weekend() 函数确定周从 6 月 12 日开始。因此,前一周于 6 月 11 日午夜 11:59:59 结束;这是为 previous_week_end 字段返回的值。
示例 3 – first_week_day
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。但是,在本例中,我们需要将星期二设置为工作周的第一天。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekend(date,0,1) as end_of_week,
timestamp(weekend(date,0,1)) as end_of_week_timestamp,
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
date
end_of_week
end_of_week_timestamp
结果表
1/7/2022
01/10/2022
1/10/2022 11:59:59 PM
1/19/2022
01/24/2022
1/24/2022 11:59:59 PM
2/5/2022
02/07/2022
2/7/2022 11:59:59 PM
2/28/2022
02/28/2022
2/28/2022 11:59:59 PM
3/16/2022
03/21/2022
3/21/2022 11:59:59 PM
4/1/2022
04/04/2022
4/4/2022 11:59:59 PM
5/7/2022
05/09/2022
5/9/2022 11:59:59 PM
5/16/2022
05/16/2022
5/16/2022 11:59:59 PM
6/15/2022
06/20/2022
6/20/2022 11:59:59 PM
6/26/2022
06/27/2022
6/27/2022 11:59:59 PM
7/9/2022
07/11/2022
7/11/2022 11:59:59 PM
7/22/2022
07/25/2022
7/25/2022 11:59:59 PM
7/23/2022
07/25/2022
7/25/2022 11:59:59 PM
7/27/2022
08/01/2022
8/1/2022 11:59:59 PM
8/2/2022
08/08/2022
8/8/2022 11:59:59 PM
8/8/2022
08/08/2022
8/8/2022 11:59:59 PM
8/19/2022
08/22/2022
8/22/2022 11:59:59 PM
9/26/2022
09/26/2022
9/26/2022 11:59:59 PM
10/14/2022
10/17/2022
10/17/2022 11:59:59 PM
10/29/2022
10/31/2022
10/31/2022 11:59:59 PM
在本例中,因为 weekend() 函数中使用了为 1 的 first_week_date 参数,所以它将一周的第一天设置为星期二。
weekend() 函数的图表,first_week_day 示例
交易 8191 发生在 2 月 5 日。weekend() 函数确定该日期之后的第一个星期一,即本周的结束时间和返回值,是 2 月 6 日午夜 11:59:59。
示例 4 – 图表对象
加载脚本和图表表达式
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在本例中,未更改的数据集被加载到应用程序中。返回交易发生时周末的时间戳的计算作为应用程序的图表对象中的度量创建。
加载脚本
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度: date 。
要计算交易发生的一周的开始时间,请添加以下度量:
结果表
1/7/2022
01/08/2022
1/8/2022 11:59:59 PM
1/19/2022
01/22/2022
1/22/2022 11:59:59 PM
2/5/2022
02/05/2022
2/5/2022 11:59:59 PM
2/28/2022
03/05/2022
3/5/2022 11:59:59 PM
3/16/2022
03/19/2022
3/19/2022 11:59:59 PM
4/1/2022
04/02/2022
4/2/2022 11:59:59 PM
5/7/2022
05/07/2022
5/7/2022 11:59:59 PM
5/16/2022
05/21/2022
5/21/2022 11:59:59 PM
6/15/2022
06/18/2022
6/18/2022 11:59:59 PM
6/26/2022
07/02/2022
7/2/2022 11:59:59 PM
7/9/2022
07/09/2022
7/9/2022 11:59:59 PM
7/22/2022
07/23/2022
7/23/2022 11:59:59 PM
7/23/2022
07/23/2022
7/23/2022 11:59:59 PM
7/27/2022
07/30/2022
7/30/2022 11:59:59 PM
8/2/2022
08/06/2022
8/6/2022 11:59:59 PM
8/8/2022
08/13/2022
8/13/2022 11:59:59 PM
8/19/2022
08/20/2022
8/20/2022 11:59:59 PM
9/26/2022
10/01/2022
10/1/2022 11:59:59 PM
10/14/2022
10/15/2022
10/15/2022 11:59:59 PM
10/29/2022
10/29/2022
10/29/2022 11:59:59 PM
通过使用 weekend() 函数并将日期字段作为函数的参数传递,在图表对象中创建了 end_of_week 度量。weekend() 函数标识日期值属于哪个周,并返回该周最后一毫秒的时间戳。
weekend() 函数的图表,图表对象示例
交易 8191 发生在 2 月 5 日。FirstWeekDay 系统变量将一周的第一天设置为星期日。weekend() 函数确定 2 月 5 日之后的第一个星期六,即本周的最后一个星期六是2月5号。因此,该事务的 end_of_week 值将返回当天的最后一毫秒,即二月 5 日午夜 11:59:59。
示例 5 – 场景
加载脚本和图表表达式
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
最终用户需要一个图表对象,该图表对象按员工 ID 和员工姓名显示周剩余时间内仍要发生的估计费用索赔。
加载脚本
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
结果
执行以下操作:
加载数据并打开工作表。创建新表并将这些字段添加为维度:
employee_id
employee_name
接下来,创建一个度量来计算累计利息:
=(weekend(today(1))-today(1))*avg_daily_claim
将度量的数字格式 设置为金额 。
结果表
182
Mark
$90.00
183
Deryck
$75.00
184
Dexter
$75.00
185
Sydney
$162.00
186
Agatha
$108.00
weekend() 函数使用今天的日期作为唯一参数,返回当前周的结束日期。然后,通过从周结束日期中减去今天的日期,表达式返回本周剩余的天数。
然后将该值乘以每个员工的平均每日费用索赔,以计算每个员工在剩余周预计提出的索赔的估计值。