dayend - 脚本和图表函数
此函数用于返回与 time 中包含的一天的最后毫秒的时间戳对应的值。默认的输出格式为在脚本中所设置的 TimestampFormat。
语法:
DayEnd(time[, [period_no[, day_start]])
适用场景
当用户希望计算使用当天尚未发生的分数时, dayend() 函数通常用作表达式的一部分。例如,计算当天仍将发生的总费用。
返回数据类型: 双
参数 | 说明 |
---|---|
time | 要求值的时间戳。 |
period_no | period_no 为整数,或解算为整数的表达式,其中值 0 表示该天包含 time。period_no 为负数表示前几天,正数表示随后的几天。 |
day_start | 要指定不想从某一日的午夜开始工作,可在 day_start 中指定一个偏移作为某日内时间的小数。例如,0.125 表示上午 3 点。 换句话说,要创建偏移,请将开始时间除以 24 小时。例如,对于 7:00 AM 开始的一天,使用分数 7/24。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 | 结果 |
---|---|
dayend('01/25/2013 16:45:00') | Returns 01/25/2013 23:59:59. PM |
dayend('01/25/2013 16:45:00', -1) | Returns 01/24/2013 23:59:59. PM |
dayend('01/25/2013 16:45:00', 0, 0.5) | Returns 01/26/2013 11:59:59. PM |
示例 1 - 基本脚本
概述
打开 数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含日期列表的数据集,加载到名为 "Calendar" 的表中。
-
默认 DateFormat 系统变量 (MM/DD/YYYY)。
-
使用 dayend() 功能创建另一个名为 EOD_timestamp 的字段的在前加载。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Calendar:
Load
date,
dayend(date) as EOD_timestamp
;
Load
date
Inline
[
date
03/11/2022 1:47:15 AM
03/12/2022 4:34:58 AM
03/13/2022 5:15:55 AM
03/14/2022 9:25:14 AM
03/15/2022 10:06:54 AM
03/16/2022 10:44:42 AM
03/17/2022 11:33:30 AM
03/18/2022 12:58:14 PM
03/19/2022 4:23:12 PM
03/20/2022 6:42:15 PM
03/21/2022 7:41:16 PM
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
EOD_timestamp
日期 | EOD_timestamp |
---|---|
03/11/2022 1:47:15 AM | 3/11/2022 11:59:59 PM |
03/12/2022 4:34:58 AM | 3/12/2022 11:59:59 PM |
03/13/2022 5:15:55 AM | 3/13/2022 11:59:59 PM |
03/14/2022 9:25:14 AM | 3/14/2022 11:59:59 PM |
03/15/2022 10:06:54 AM | 3/15/2022 11:59:59 PM |
03/16/2022 10:44:42 AM | 3/16/2022 11:59:59 PM |
03/17/2022 11:33:30 AM | 3/17/2022 11:59:59 PM |
03/18/2022 12:58:14 PM | 3/18/2022 11:59:59 PM |
03/19/2022 4:23:12 PM | 3/19/2022 11:59:59 PM |
03/20/2022 6:42:15 PM | 3/20/2022 11:59:59 PM |
03/21/2022 7:41:16 PM | 3/21/2022 11:59:59 PM |
如上表所示,为数据集中的每个日期生成了一天结束时间戳。时间戳采用系统变量 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 的格式。
示例 2 – period_no
概述
打开 数据加载编辑器,并将下面的加载脚本添加到新选项卡。
您将把包含服务预订的数据集加载到名为“Services”的表中。
数据集包括以下字段:
-
service_id
-
service_date
-
amount
您将在表中创建两个新字段:
-
deposit_due_date:应收到存款的日期。这是 service_date 前三天的一天结束时间。
-
final_payment_due_date:应收到最终付款的日期。这是 service_date 后七天的一天结束时间。
上述两个字段是在前面的加载中使用 dayend() 函数创建的,它们提供前两个参数,time 以及 period_no。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
*,
dayend(service_date,-3) as deposit_due_date,
dayend(service_date,7) as final_payment_due_date
;
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
service_date
-
deposit_due_date
-
final_payment_due_date
service_date | deposit_due_date | final_payment_due_date |
---|---|---|
03/11/2022 9:25:14 AM | 3/8/2022 11:59:59 PM | 3/18/2022 11:59:59 PM |
03/12/2022 10:06:54 AM | 3/9/2022 11:59:59 PM | 3/19/2022 11:59:59 PM |
03/13/2022 10:44:42 AM | 3/10/2022 11:59:59 PM | 3/20/2022 11:59:59 PM |
03/14/2022 11:33:30 AM | 3/11/2022 11:59:59 PM | 3/21/2022 11:59:59 PM |
03/15/2022 12:58:14 PM | 3/12/2022 11:59:59 PM | 3/22/2022 11:59:59 PM |
03/16/2022 4:23:12 PM | 3/13/2022 11:59:59 PM | 3/23/2022 11:59:59 PM |
03/17/2022 6:42:15 PM | 3/14/2022 11:59:59 PM | 3/24/2022 11:59:59 PM |
03/18/2022 7:41:16 PM | 3/15/2022 11:59:59 PM | 3/25/2022 11:59:59 PM |
03/19/2022 8:14:15 PM | 3/16/2022 11:59:59 PM | 3/26/2022 11:59:59 PM |
03/20/2022 9:23:51 PM | 3/17/2022 11:59:59 PM | 3/27/2022 11:59:59 PM |
03/21/2022 10:04:41 PM | 3/18/2022 11:59:59 PM | 3/28/2022 11:59:59 PM |
新字段的值位于 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因为使用了函数 dayend(),所以时间戳值都是一天中的最后一毫秒。
由于 dayend() 函数中传递的第二个参数为负数,存款到期日值比服务日期早三天。
由于 dayend() 函数中传递的第二个参数为正数,最终付款到期日值为服务日期后七天。
示例 3 – day_start script
概述
打开 数据加载编辑器,并将下面的加载脚本添加到新选项卡。
本示例中使用的数据集和场景与前一示例中的相同。
与上一个示例一样,您将创建两个新字段:
-
deposit_due_date:应收到存款的日期。这是 service_date 前三天的一天结束时间。
-
final_payment_due_date:应收到最终付款的日期。这是 service_date 后七天的一天结束时间。
但是,您的公司希望在工作日从下午 5 点开始到第二天下午 5 点结束的政策下运营。然后,您的公司可以监控在这些工作时间内发生的交易。
为了满足这些要求,在前面的加载中使用 dayend() 函数创建了上述两个字段,并使用所有三个参数 time、period_no 和 day_start。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
*,
dayend(service_date,-3,17/24) as deposit_due_date,
dayend(service_date,7,17/24) as final_payment_due_date
;
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
service_date
-
deposit_due_date
-
final_payment_due_date
service_date | deposit_due_date | final_payment_due_date |
---|---|---|
03/11/2022 9:25:14 AM | 3/8/2022 4:59:59 PM | 3/18/2022 4:59:59 PM |
03/12/2022 10:06:54 AM | 3/9/2022 4:59:59 PM | 3/19/2022 4:59:59 PM |
03/13/2022 10:44:42 AM | 3/10/2022 4:59:59 PM | 3/20/2022 4:59:59 PM |
03/14/2022 11:33:30 AM | 3/11/2022 4:59:59 PM | 3/21/2022 4:59:59 PM |
03/15/2022 12:58:14 PM | 3/12/2022 4:59:59 PM | 3/22/2022 4:59:59 PM |
03/16/2022 4:23:12 PM | 3/13/2022 4:59:59 PM | 3/23/2022 4:59:59 PM |
03/17/2022 6:42:15 PM | 3/14/2022 4:59:59 PM | 3/24/2022 4:59:59 PM |
03/18/2022 7:41:16 PM | 3/15/2022 4:59:59 PM | 3/25/2022 4:59:59 PM |
03/19/2022 8:14:15 PM | 3/16/2022 4:59:59 PM | 3/26/2022 4:59:59 PM |
03/20/2022 9:23:51 PM | 3/17/2022 4:59:59 PM | 3/27/2022 4:59:59 PM |
03/21/2022 10:04:41 PM | 3/18/2022 4:59:59 PM | 3/28/2022 4:59:59 PM |
虽然日期与示例 2 中的日期保持相同,但由于传递给 dayend() 函数的第三个参数 day_start 的值为 17/24,因此日期现在具有下午 5 点之前最后一毫秒的时间戳。
示例 4 – 图表示例
概述
打开 数据加载编辑器,并将下面的加载脚本添加到新选项卡。
本示例中使用的数据集和场景与前两个示例中的相同。公司希望在工作日从下午 5 点开始到第二天下午 5 点结束的政策下运营。
与上一个示例一样,您将创建两个新字段:
-
deposit_due_date:应收到存款的日期。这是 service_date 前三天的一天结束时间。
-
final_payment_due_date:应收到最终付款的日期。这是 service_date 后七天的一天结束时间。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
service_date。
要创建 deposit_due_date 字段,请创建此度量:
=dayend(service_date,-3,17/24).
然后,要创建 final_payment_due_date 字段,请创建此度量:
=dayend(service_date,7,17/24).
service_date | =dayend(service_date,-3,17/24) | =dayend(service_date,7,17/24 |
---|---|---|
03/11/2022 | 3/8/2022 16:59:59 PM | 3/18/2022 16:59:59 PM |
03/12/2022 | 3/9/2022 16:59:59 PM | 3/19/2022 16:59:59 PM |
03/13/2022 | 3/10/2022 16:59:59 PM | 3/20/2022 16:59:59 PM |
03/14/2022 | 3/11/2022 16:59:59 PM | 3/21/2022 16:59:59 PM |
03/15/2022 | 3/12/2022 16:59:59 PM | 3/22/2022 16:59:59 PM |
03/16/2022 | 3/13/2022 16:59:59 PM | 3/23/2022 16:59:59 PM |
03/17/2022 | 3/14/2022 16:59:59 PM | 3/24/2022 16:59:59 PM |
03/18/2022 | 3/15/2022 16:59:59 PM | 3/25/2022 16:59:59 PM |
03/19/2022 | 3/16/2022 16:59:59 PM | 3/26/2022 16:59:59 PM |
03/20/2022 | 3/17/2022 16:59:59 PM | 3/27/2022 16:59:59 PM |
03/21/2022 | 3/18/2022 16:59:59 PM | 3/28/2022 16:59:59 PM |
新字段的值位于 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因为使用了函数 dayend(),所以时间戳值都是一天中的最后一毫秒。
由于 dayend() 函数中传递的第二个参数为负数,付款到期日值比服务日期早三天。
由于 dayend() 函数中传递的第二个参数为正数,最终付款到期日值为服务日期后七天。
但由于传递给 dayend() 函数的第三个参数 day_start 的值为 17/24,因此日期现在具有下午 5 点之前最后一毫秒的时间戳。