inday - 脚本和图表函数在该页面上
此函数用于返回 True ,如果 timestamp 位于包含 base_timestamp 的一天以内。
语法:
InDay ( timestamp, base_timestamp, period_no[, day_start] )
inday 函数的图表
inday() 函数使用base_timestamp 参数来标识时间戳属于哪一天。一天的开始时间默认为午夜;但是可以使用 inday() 函数的 day_start 参数更改一天的开始时间。一旦定义了这一天,当将规定的时间戳值与当天进行比较时,该函数将返回布尔结果。
适用场景
inday() 函数返回布尔结果。通常,这种类型的函数将用作 if expression 中的条件。这将返回一个聚合或计算,具体取决于评估的日期是否发生在相关时间戳的当天。
例如,inday() 函数可用于识别给定日期内制造的所有设备。
返回数据类型: 布尔值
在 Qlik Sense 中,布尔 true 值由 -1 表示,false 值由 0 表示。
参数
timestamp
想要用来与 base_timestamp 进行比较的日期和时间。
base_timestamp
日期和时间用于计算时间戳的值。
period_no
该天可通过 period_no 偏移。period_no 为整数,其中值 0 表示该天包含 base_timestamp 。period_no 为负数表示前几天,正数表示随后的几天。
day_start
如果不想从每一日的午夜开始处理,可指定一个偏移作为某日内时间的小数 day_start 。例如,0.125 表示上午 3 点。
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
函数示例
示例
结果
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0)
返回 True
inday ('01/12/2006 12:23:00 PM', '01/13/2006 12:00:00 AM', 0)
返回 False
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1)
返回 False
(inday '01/11/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1)
返回 True
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0, 0.5)
返回 False
inday ('01/12/2006 11:23:00 AM', '01/12/2006 12:00:00 AM', 0, 0.5)
返回 True
示例 1 – LOAD 语句(脚本)
加载脚本和结果
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
按时间戳包含交易的数据集,加载到名为 Transactions 的表格中。
以 TimeStamp 系统变量 (M/D/YYYY h:mm:ss[.fff] TT) 格式提供的日期字段。
包含设置为 in_day 字段的 inday() 函数的前置加载。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', 0) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
日期
in_day
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
0
01/04/2022 6:49:38 PM
0
01/04/2022 10:58:34 PM
0
01/05/2022 5:40:49 AM
-1
01/05/2022 11:29:38 AM
-1
01/05/2022 7:04:57 PM
-1
01/06/2022 8:49:09 AM
0
in_day 字段是在前面的 LOAD 语句中使用 inday() 函数创建的,并将日期字段、1 月 5 日的硬编码时间戳和为 0 的 period_no 作为函数的参数传递。
示例 2 – period_no
加载脚本和结果
概述
加载脚本使用与第一个示例中相同的数据集和场景。
然而,在本例中,任务是计算交易日期是否发生在 1 月 5 日前两天。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', -2) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
日期
in_day
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
-1
01/04/2022 6:49:38 PM
0
01/04/2022 10:58:34 PM
0
01/05/2022 5:40:49 AM
0
01/05/2022 11:29:38 AM
0
01/05/2022 7:04:57 PM
0
01/06/2022 8:49:09 AM
0
在本例中,由于 inday() 函数中使用了为 -2 的 period_no 作为偏移参数,因此函数确定每个交易日期是否发生在 1 月 3 日。这可以在输出表中进行验证,其中一个交易返回的布尔结果为 TRUE。
示例 3 – day_start
加载脚本和结果
概述
加载脚本使用与之前示例中相同的数据集和场景。
然而,在本例中,公司的政策是工作日从早上 7 点开始,到早上 7 点结束。
加载脚本
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', 0, 7/24) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
结果表
日期
in_day
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
0
01/04/2022 6:49:38 PM
-1
01/04/2022 10:58:34 PM
-1
01/05/2022 5:40:49 AM
-1
01/05/2022 11:29:38 AM
0
01/05/2022 7:04:57 PM
0
01/06/2022 8:49:09 AM
0
由于 inday() 函数中使用了 7/24 的 start_day 参数,即上午 7 点,因此函数确定每个交易日期是否发生在 1 月 4 日上午 7 点和 1 月 5 日早上 7 点之前。
这可以在输出表中进行验证,其中 1 月 4 日早上 7 点之后发生的交易返回布尔值结果 TRUE,而 1 月 5 日早上 7 点之后发生的事务返回布尔值结果 FALSE。
示例 4–图表对象(图表)
加载脚本和图表表达式
概述
加载脚本使用与之前示例中相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。您将通过在图表对象中创建度量来计算以确定交易是否在 1 月 5 日发生。
加载脚本
Transactions:
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
要计算交易是否在 1 月 5 日发生,请创建以下度量:
=inday(date,'01/05/2022 12:00:00 AM',0)
结果表
日期
inday(date,'01/05/2022 12:00:00 AM',0)
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
0
01/04/2022 6:49:38 PM
0
01/04/2022 10:58:34 PM
0
01/05/2022 5:40:49 AM
-1
01/05/2022 11:29:38 AM
-1
01/05/2022 7:04:57 PM
-1
01/06/2022 8:49:09 AM
0
示例 5 – 场景
加载脚本和结果
概述
在本例中,已确定由于设备错误,1 月 5 日制造的产品存在缺陷。最终用户想要一个图表对象,该对象按日期显示制造的“有缺陷”或“无缺陷”产品的状态以及 1 月 5 日制造的产品的成本。
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
加载到名为“Products”的表中的数据集。
表格包含以下字段:
加载脚本
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
=dayname(manufacture_date)
创建以下度量:
=if(only(InDay(manufacture_date,makedate(2022,01,05),0)),'Defective','Faultless')
=sum(cost_price)
将度量的数字格式 设置为金额 。
在外观 下,关闭总计 。
结果表
dayname(manufacture_date)
=if(only(InDay(manufacture_date,makedate(2022,01,05),0)),'Defective','Faultless')
=sum(cost_price)
01/01/2022
Faultless
44.67
01/02/2022
Faultless
36.34
01/03/2022
Faultless
51.75
01/04/2022
Faultless
89.69
01/05/2022
Defective
170.78
01/06/2022
Faultless
74.23
inday() 函数在评估每个产品的制造日期时返回布尔值。对于1月5日生产的任何产品,inday() 函数返回布尔值 TRUE,并将产品标记为 ‘Defective’。对于任何返回 FALSE 值的产品,由于不是在当天制造的,它将产品标记为 ‘Faultless’。