inmonth - 脚本和图表函数
此函数用于返回 True,如果 timestamp 位于包含 base_date 的月份以内。
语法:
InMonth (timestamp, base_date, period_no)
换言之,inmonth() 函数确定一组日期是否属于该月,并基于标识该月的 base_date 返回一个布尔值。
适用场景
inmonth() 函数返回布尔值结果。通常,这种类型的函数将用作 if expression 中的条件。这将返回一个聚合或计算,具体取决于某个日期是否发生在该月,包括所讨论的日期。
例如,inmonth() 函数可用于识别特定月份内制造的所有设备。
返回数据类型: 布尔值
在 Qlik Sense 中,布尔 true 值由 -1 表示,false 值由 0 表示。
参数 | 描述 |
---|---|
时间戳 | 想要用来与 base_date 进行比较的日期。 |
base_date | 日期用于计算月份的值。需要注意的是,base_date 可以是一个月内的任何一天。 |
period_no | 该月份可通过 period_no 偏移。period_no 为整数,其中值 0 表示该月份包含 base_date。period_no 为负数表示前几月,为正数则表示随后的几月。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 | 结果 |
---|---|
inmonth ('25/01/2013', '01/01/2013', 0) | 返回 True |
inmonth('25/01/2013', '23/04/2013', 0) | 返回 False |
inmonth ('25/01/2013', '01/01/2013', -1) | 返回 False |
inmonth ('25/12/2012', '17/01/2013', -1) | 返回 True |
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2022 年上半年一组交易的数据集。
-
带有附加变量 ‘in_month’ 的前一次加载,该变量确定交易是否发生在 4 月份。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inmonth(date,'04/01/2022', 0) as in_month
;
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/14/2022',17.17
8190,'1/20/2022',88.27
8191,'1/22/2022',57.42
8192,'2/1/2022',53.80
8193,'2/2/2022',82.06
8194,'2/20/2022',40.39
8195,'4/11/2022',87.21
8196,'4/13/2022',95.93
8197,'4/15/2022',45.89
8198,'4/25/2022',36.23
8199,'5/20/2022',25.66
8200,'5/22/2022',82.77
8201,'6/19/2022',69.98
8202,'6/22/2022',76.11
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
in_month
日期 | in_month |
---|---|
1/10/2022 | 0 |
1/14/2022 | 0 |
1/20/2022 | 0 |
1/22/2022 | 0 |
2/1/2022 | 0 |
2/2/2022 | 0 |
2/20/2022 | 0 |
4/11/2022 | -1 |
4/13/2022 | -1 |
4/15/2022 | -1 |
4/25/2022 | -1 |
5/20/2022 | 0 |
5/22/2022 | 0 |
6/19/2022 | 0 |
6/22/2022 | 0 |
‘in_month’ 字段的创建方式是在前面的 LOAD 语句中使用 inmonth() 函数并传递日期字段,其为 4 月 1 日的硬编码日期,作为我们的 base_date,并传递为 0 的 period_no,作为函数的参数。
base_date 标识将返回布尔结果为 TRUE 的月份。因此,4 月份发生的所有交易都返回 TRUE,这在结果表中得到验证。
示例 2 – period_no
概述
使用与第一个示例相同的数据集和场景。
但是,在本例中,您将创建一个字段 ‘2_months_prior’,用于确定交易是否发生在 4 月前两个月。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inmonth(date,'04/01/2022', -2) as [2_months_prior]
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/14/2022',17.17
8190,'1/20/2022',88.27
8191,'1/22/2022',57.42
8192,'2/1/2022',53.80
8193,'2/2/2022',82.06
8194,'2/20/2022',40.39
8195,'4/11/2022',87.21
8196,'4/13/2022',95.93
8197,'4/15/2022',45.89
8198,'4/25/2022',36.23
8199,'5/20/2022',25.66
8200,'5/22/2022',82.77
8201,'6/19/2022',69.98
8202,'6/22/2022',76.11
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
2_months_prior
日期 | 2_months_prior |
---|---|
1/10/2022 | 0 |
1/14/2022 | 0 |
1/20/2022 | 0 |
1/22/2022 | 0 |
2/1/2022 | -1 |
2/2/2022 | -1 |
2/20/2022 | -1 |
4/11/2022 | 0 |
4/13/2022 | 0 |
4/15/2022 | 0 |
4/25/2022 | 0 |
5/20/2022 | 0 |
5/22/2022 | 0 |
6/19/2022 | 0 |
6/22/2022 | 0 |
在 inmonth() 函数中使用 -2 作为 period_no 参数将 base_date 参数定义的月份移到之前两个月。在本例中,它将定义的月份从 4 月更改为 2 月。
因此,二月份发生的任何交易都将返回布尔结果 TRUE。
示例 3 – 图表对象
概述
使用与前一个示例相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。确定交易是否发生在 4 月的计算是作为应用程序的图表对象中的度量值创建的。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/14/2022',17.17
8190,'1/20/2022',88.27
8191,'1/22/2022',57.42
8192,'2/1/2022',53.80
8193,'2/2/2022',82.06
8194,'2/20/2022',40.39
8195,'4/11/2022',87.21
8196,'4/13/2022',95.93
8197,'4/15/2022',45.89
8198,'4/25/2022',36.23
8199,'5/20/2022',25.66
8200,'5/22/2022',82.77
8201,'6/19/2022',69.98
8202,'6/22/2022',76.11
];
图表对象
加载数据并打开工作表。创建新表并将该字段添加为维度:
date
要计算交易是否在 4 月发生,请创建以下度量:
=inmonth(date,'04/01/2022', 0)
结果
日期 | =inmonth(date,'04/01/2022', 0) |
---|---|
1/10/2022 | 0 |
1/14/2022 | 0 |
1/20/2022 | 0 |
1/22/2022 | 0 |
2/1/2022 | 0 |
2/2/2022 | 0 |
2/20/2022 | 0 |
4/11/2022 | -1 |
4/13/2022 | -1 |
4/15/2022 | -1 |
4/25/2022 | -1 |
5/20/2022 | 0 |
5/22/2022 | 0 |
6/19/2022 | 0 |
6/22/2022 | 0 |
示例 4 – 场景
概述
在本例中,将数据集加载到名为 ‘Products’ 的表中。表格包含以下字段:
-
产品 ID
-
制造日期
-
成本价
由于设备错误,2022 年 7 月制造的产品存在缺陷。该问题于 2022 年 7 月 27 日得到解决。
最终用户需要一个图表,按月显示制造为“有缺陷”(布尔值为 TRUE)或“无缺陷”(布尔值为 FALSE)的产品的状态,以及当月制造的产品的成本。
加载脚本
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
8188,'1/19/2022',37.23
8189,'1/7/2022',17.17
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
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
=monthname(manufacture_date)
创建以下度量:
-
=sum(cost_price)
-
=if(only(inmonth(manufacture_date,makedate(2022,07,01),0)),'Defective','Faultless')
-
将度量的数字格式设置为金额。
-
在外观下,关闭总计。
monthname(manufacture_date) | =if(only(inmonth(manufacture_date,makedate(2022,07,01),0)),'Defective','Faultless') | sum(cost_price) |
---|---|---|
Jan 2022 | Faultless | $54.40 |
Feb 2022 | Faultless | $145.69 |
Mar 2022 | Faultless | $53.80 |
Apr 2022 | Faultless | $82.06 |
May 2022 | Faultless | $127.60 |
Jun 2022 | Faultless | $141.82 |
Jul 2022 | Defective | $214.64 |
Aug 2022 | Faultless | $147.46 |
Sep 2022 | Faultless | $84.21 |
Oct 2022 | Faultless | $163.91 |
inmonth() 函数在评估每个产品的制造日期时返回布尔值。对于 2022 年 7 月生产的任何产品,inmonth() 函数返回布尔值 True,并将产品标记为 ‘Defective’。对于任何返回 False 值的产品,由于不是在 7 月制造的,它将产品标记为 ‘Faultless’。