daystart - 脚本和图表函数
此函数用于返回与 time 参数中包含的一天的最后毫秒时间戳对应的值。默认的输出格式为在脚本中所设置的 TimestampFormat。
语法:
DayStart(time[, [period_no[, day_start]])
返回数据类型: 双
参数 | 说明 |
---|---|
time | 要求值的时间戳。 |
period_no | period_no 为整数,或解算为整数的表达式,其中值 0 表示该天包含 time。period_no 为负数表示前几天,正数表示随后的几天。 |
day_start | 要指定不想从某一日的午夜开始工作,可在 day_start 中指定一个偏移作为某日内时间的小数。例如,0.125 表示上午 3 点。 换句话说,要创建偏移,请将开始时间除以 24 小时。例如,对于 7:00 AM 开始的一天,使用分数 7/24。 |
适用场景
当用户希望计算使用到目前为止已过的一天的部分时,daystart() 函数通常用作表达式的一部分。例如,它可以用于计算员工迄今为止挣得的总工资。
以下示例使用时间戳格式 'M/D/YYYY h:mm:ss[.fff] TT'。时间戳格式已经在数据加载脚本顶部的 SET TimeStamp 语句中指定。可以根据要求更改示例中的格式。
示例 | 结果 |
---|---|
daystart('01/25/2013 4:45:00 PM') | 返回 1/25/2013 12:00:00 AM。 |
daystart('1/25/2013 4:45:00 PM', -1) | 返回 1/24/2013 12:00:00 AM。 |
daystart('1/25/2013 16:45:00',0,0.5 ) | 返回 1/25/2013 12:00:00 PM。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 简单示例
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含日期列表的简单数据集,该数据集加载到名为 Calendar 的表中。
-
使用默认 TimeStampFormat 系统变量 (M/D/YYYY h:mm:ss[.fff] TT。
-
使用 daystart() 功能创建另一个名为 SOD_timestamp 的字段的前置 Load。
除了日期之外,没有为函数提供其他参数。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Calendar:
Load
date,
daystart(date) as SOD_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
-
SOD_timestamp
日期 | SOD_timestamp |
---|---|
03/11/2022 1:47:15 AM | 3/11/2022 12:00:00 AM |
03/12/2022 4:34:58 AM | 3/12/2022 12:00:00 AM |
03/13/2022 5:15:55 AM | 3/13/2022 12:00:00 AM |
03/14/2022 9:25:14 AM | 3/14/2022 12:00:00 AM |
03/15/2022 10:06:54 AM | 3/15/2022 12:00:00 AM |
03/16/2022 10:44:42 AM | 3/16/2022 12:00:00 AM |
03/17/2022 11:33:30 AM | 3/17/2022 12:00:00 AM |
03/18/2022 12:58:14 PM | 3/18/2022 12:00:00 AM |
03/19/2022 4:23:12 PM |
3/19/2022 12:00:00 AM |
03/20/2022 6:42:15 PM | 3/20/2022 12:00:00 AM |
03/21/2022 7:41:16 PM | 3/21/2022 12:00:00 AM |
如上表所示,为数据集中的每个日期生成了一天结束时间戳。时间戳采用系统变量 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 的格式。
示例 2 – period_no
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含停车罚款的数据集,将其加载到名为 Fines 的表中。数据集包括以下字段:
-
id
-
due_date
-
number_plate
-
amount
-
-
使用 daystart() 函数并提供所有以下三个参数的前置 Load: time、period_no 和 day_start。前置 Load 创建了以下两个新的日期字段:
-
early_repayment_period 日期字段,从付款到期前七天开始。
-
late_penalty_period 日期字段,从付款到期后 14 天开始。
-
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Fines:
Load
*,
daystart(due_date,-7) as early_repayment_period,
daystart(due_date,14) as late_penalty_period
;
Load
*
Inline
[
id, due_date, number_plate,amount
1,02/11/2022, 573RJG,50.00
2,03/25/2022, SC41854,50.00
3,04/14/2022, 8EHZ378,50.00
4,06/28/2022, 8HSS198,50.00
5,08/15/2022, 1221665,50.00
6,11/16/2022, EAK473,50.00
7,01/17/2023, KD6822,50.00
8,03/22/2023, 1GGLB,50.00
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
due_date
-
early_repayment_period
-
late_penalty_period
due_date | early_repayment_period | late_penalty_period |
---|---|---|
02/11/2022 9:25:14 AM | 2/4/2022 12:00:00 AM | 2/25/2022 12:00:00 AM |
03/25/2022 10:06:54 AM | 3/18/2022 12:00:00 AM | 4/8/2022 12:00:00 AM |
04/14/2022 10:44:42 AM | 4/7/2022 12:00:00 AM | 4/28/2022 12:00:00 AM |
06/28/2022 11:33:30 AM | 6/21/2022 12:00:00 AM | 7/12/2022 12:00:00 AM |
08/15/2022 12:58:14 PM | 8/8/2022 12:00:00 AM | 8/29/2022 12:00:00 AM |
11/16/2022 4:23:12 PM | 11/9/2022 12:00:00 AM | 11/30/2022 12:00:00 AM |
01/17/2023 6:42:15 PM | 1/10/2023 12:00:00 AM | 1/31/2023 12:00:00 AM |
03/22/2023 7:41:16 PM | 3/15/2023 12:00:00 AM | 4/5/2023 12:00:00 AM |
新字段的值位于 TimestampFormat M/DD/YYYY tt 中。因为使用了函数 daystart(),所以时间戳值都是一天中的第一毫秒。
由于 daystart() 函数中传递的第二个参数为负数,因此提前还款期值为到期日前七天。
由于 daystart() 函数中传递的第二个参数为正,逾期还款期值为到期日后 14 天。
示例 3 – day_start
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与上一个示例相同的数据集和场景。
-
与前一示例相同的前置 Load。
在本例中,我们将工作日设置为每天早上 7:00 开始和结束。
加载脚本
SET DateFormat='MM/DD/YYYY';
Fines:
Load
*,
daystart(due_date,-7,7/24) as early_repayment_period,
daystart(due_date,14, 7/24) as late_penalty_period
;
Load
*
Inline
[
id, due_date, number_plate,amount
1,02/11/2022, 573RJG,50.00
2,03/25/2022, SC41854,50.00
3,04/14/2022, 8EHZ378,50.00
4,06/28/2022, 8HSS198,50.00
5,08/15/2022, 1221665,50.00
6,11/16/2022, EAK473,50.00
7,01/17/2023, KD6822,50.00
8,03/22/2023, 1GGLB,50.00
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
due_date
-
early_repayment_period
-
late_penalty_period
due_date | early_repayment_period | late_penalty_period |
---|---|---|
02/11/2022 | 2/3/2022 7:00:00 AM | 2/24/2022 7:00:00 AM |
03/25/2022 | 3/17/2022 7:00:00 AM | 4/7/2022 7:00:00 AM |
04/14/2022 | 4/6/2022 7:00:00 AM | 4/27/2022 7:00:00 AM |
06/28/2022 | 6/20/2022 7:00:00 AM | 7/11/2022 7:00:00 AM |
08/15/2022 | 8/7/2022 7:00:00 AM | 8/28/2022 7:00:00 AM |
11/16/2022 | 11/8/2022 7:00:00 AM | 11/29/2022 7:00:00 AM |
01/17/2023 | 1/9/2023 7:00:00 AM | 1/30/2023 7:00:00 AM |
03/22/2023 | 3/14/2023 7:00:00 AM | 4/4/2023 7:00:00 AM |
现在日期的时间戳为上午 7:00,因为传递给 daystart() 函数的 day_start 参数值为 7/24。这将一天的开始时间设置为早上 7 点。
因为 due_date 字段没有时间戳,所以它被视为 12:00 AM,这仍然是前一天的一部分,因为这些天的开始和结束时间都是早上 7:00。因此,2 月 11 日到期的罚款的提前还款期从 2 月 3 日早上 7:00 开始。
示例 4 – 图表对象示例
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
该示例使用与上一个示例相同的数据集和场景。
但是,只有原始 Fines 表加载到应用程序中,在图表对象中计算两个额外的截止日期值。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Fines:
Load
*
Inline
[
id, due_date, numer_plate,amount
1,02/11/2022 9:25:14 AM, 573RJG,50.00
2,03/25/2022 10:06:54 AM, SC41854,50.00
3,04/14/2022 10:44:42 AM, 8EHZ378,50.00
4,06/28/2022 11:33:30 AM, 8HSS198,50.00
5,08/15/2022 12:58:14 PM, 1221665,50.00
6,11/16/2022 4:23:12 PM, EAK473,50.00
7,01/17/2023 6:42:15 PM, KD6822,50.00
8,03/22/2023 7:41:16 PM, 1GGLB,50.00
];
结果
执行以下操作:
-
加载数据并打开工作表。创建新表并将该字段添加为维度: due_date。
-
要创建 early_repayment_period 字段,请创建以下度量。
=daystart(due_date,-7,7/24)
-
要创建 late_penalty_period 字段,请创建以下度量:
=daystart(due_date,14,7/24)
due_date | =daystart(due_date,-7,7/24) | =daystart(due_date,14,7/24) |
---|---|---|
02/11/2022 9:25:14 AM | 2/4/2022 7:00:00 AM | 2/25/2022 7:00:00 AM |
03/25/2022 10:06:54 AM | 3/18/2022 7:00:00 AM | 4/8/2022 7:00:00 AM |
04/14/2022 10:44:42 AM | 4/7/2022 7:00:00 AM | 4/28/2022 7:00:00 AM |
06/28/2022 11:33:30 AM | 6/21/2022 7:00:00 AM | 7/12/2022 7:00:00 AM |
08/15/2022 12:58:14 PM | 8/8/2022 7:00:00 AM | 8/29/2022 7:00:00 AM |
11/16/2022 4:23:12 PM | 11/9/2022 7:00:00 AM | 11/30/2022 7:00:00 AM |
01/17/2023 6:42:15 PM | 1/10/2023 7:00:00 AM | 1/31/2023 7:00:00 AM |
03/22/2023 7:41:16 PM | 3/15/2023 7:00:00 AM | 4/5/2023 7:00:00 AM |
新字段的值位于 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因为使用了函数 daystart(),所以时间戳值对应于一天中的第一毫秒。
由于 daystart() 函数中传递的第二个参数为负数,因此提前还款期值为到期日前七天。
由于 daystart() 函数中传递的第二个参数为正,逾期还款期值为到期日后 14 天。
日期的时间戳为上午 7:00,因为传递给 day_start 函数的 daystart() 第三参数值为 7/24。