inmonthtodate - 脚本和图表函数
用于返回 True,如果 date 位于包含 basedate 为止以及包括 basedate 最后毫秒的月份部分以内。
语法:
InMonthToDate (timestamp, base_date, period_no)
返回数据类型: 布尔值
inmonthtodate() 函数将所选月份标识为段。开始边界是月初。结束边界可以设置为当月的较晚日期。然后,它确定一组日期是否属于此段,返回 TRUE 或 FALSE 布尔值。
参数 | 描述 |
---|---|
timestamp | 想要用来与 base_date 进行比较的日期。 |
base_date | 日期用于计算月份的值。 |
period_no |
该月份可通过 period_no 偏移。period_no 为整数,其中值 0 表示该月份包含 base_date。period_no 为负数表示前几月,为正数则表示随后的几月。 |
适用场景
inmonthtodate() 函数返回布尔值结果。通常,这种类型的函数用作 if expression 中的条件。inmonthtodate() 函数返回一个聚合或计算,该聚合或计算取决于某个日期是否发生在相关日期之前的月份中。
例如,inmonthtodate() 函数可用于识别截至特定日期的一个月份内制造的所有设备。
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
Example | 结果 |
---|---|
inmonthtodate ('01/25/2013', '25/01/2013', 0) | 返回 True |
inmonthtodate ('01/25/2013', '24/01/2013', 0) | 返回 False |
inmonthtodate ('01/25/2013', '28/02/2013', -1) | 返回 True |
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2022 年交易集的数据集,该数据集加载到名为 Transactions 的表中。
-
以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供的日期字段。
-
前面的 LOAD 语句包含:
-
设置为 ‘in_month_to_date’ 字段的 inmonthtodate() 函数。这决定了哪些交易发生在 2022 年 7 月 1 日至 26 日之间。
-
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inmonthtodate(date,'07/26/2022', 0) as in_month_to_date
;
Load
*
Inline
[
id,date,amount
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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
in_month_to_date
日期 | in_month_to_date |
---|---|
1/7/2022 | 0 |
1/19/2022 | 0 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | 0 |
4/1/2022 | 0 |
5/7/2022 | 0 |
5/16/2022 | 0 |
6/15/2022 | 0 |
6/26/2022 | 0 |
7/9/2022 | -1 |
7/22/2022 | -1 |
7/23/2022 | -1 |
7/27/2022 | 0 |
8/2/2022 | 0 |
8/8/2022 | 0 |
8/19/2022 | 0 |
9/26/2022 | 0 |
10/14/2022 | 0 |
10/29/2022 | 0 |
in_month_to_date 字段是在前面的 LOAD 语句中使用 inmonthtodate() 函数创建的。
第一个参数标识正在评估的字段。第二个参数是硬编码日期,7 月 26 日,其为 base_date。该 base_date 参数标识分段的月份和该分段的结束边界。
为 0 的 period_no 是最后一个参数,这意味着该函数不比较分段月份之前或之后的月份。
因此,7 月 1 日至 26 日之间发生的任何交易都会返回布尔结果 TRUE。7 月 26 日之后 7 月发生的任何交易都会返回布尔值 FALSE 结果,这与一年中其他月份的任何交易一样。
示例 2 – period_no
概述
使用与第一个 相同的数据集和场景。
在本例中,任务是创建一个字段 ‘six_months_prior’,用于确定在 7 月 1 日和 7 月 26 日之前整整六个月内发生了哪些交易。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inmonthtodate(date,'07/26/2022', -6) as six_months_prior
;
Load
*
Inline
[
id,date,amount
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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
six_months_prior
日期 | six_months_prior |
---|---|
1/7/2022 | -1 |
1/19/2022 | -1 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | 0 |
4/1/2022 | 0 |
5/7/2022 | 0 |
5/16/2022 | 0 |
6/15/2022 | 0 |
6/26/2022 | 0 |
7/9/2022 | 0 |
7/22/2022 | 0 |
7/23/2022 | 0 |
7/27/2022 | 0 |
8/2/2022 | 0 |
8/8/2022 | 0 |
8/19/2022 | 0 |
9/26/2022 | 0 |
10/14/2022 | 0 |
10/29/2022 | 0 |
通过在 inmonthtodate() 函数中使用 -6 作为 period_no 参数,比较器月份段的边界移动了六个月。最初,月份段相当于 7 月 1 日至 7 月 26 日。然后,period_no 将此部分抵消六个月的负值,日期边界将在 1 月 1 日至 1 月 26 日之间移动。
因此,在 1 月 1 日到 1 月 26 日之间发生的任何事务都将返回布尔结果 TRUE。
示例 3 – 图表示例
概述
使用与第一个 相同的数据集和场景。
在本例中,数据集保持不变并加载到应用程序中。任务是创建一个计算,以确定交易是否发生在 7 月 1 日至 7 月 26 日之间,作为应用程序图表中的衡量标准。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
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
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:
date
要计算交易是否发生在 7 月 1 日至 26 日之间,请创建以下度量:
=inmonthtodate(date,'07/26/2022', 0)
日期 | =inmonthtodate(date,'07/26/2022', 0) |
---|---|
1/7/2022 | 0 |
1/19/2022 | 0 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | 0 |
4/1/2022 | 0 |
5/7/2022 | 0 |
5/16/2022 | 0 |
6/15/2022 | 0 |
6/26/2022 | 0 |
7/9/2022 | -1 |
7/22/2022 | -1 |
7/23/2022 | -1 |
7/27/2022 | 0 |
8/2/2022 | 0 |
8/8/2022 | 0 |
8/19/2022 | 0 |
9/26/2022 | 0 |
10/14/2022 | 0 |
10/29/2022 | 0 |
使用 inmonthtodate() 函数在图表中创建 ‘in_month_to_date’ 字段度量。
第一个参数标识正在评估的字段。第二个参数是硬编码日期,7 月 26 日,其为 base_date。该 base_date 参数标识分段的月份和该分段的结束边界。 为 0 的 period_no 为最终参数。这意味着该函数不会比较分段月份之前或之后的月份。
因此,7 月 1 日至 26 日之间发生的任何交易都会返回布尔结果 TRUE。7 月 26 日之后 7 月发生的任何交易都会返回布尔值 FALSE 结果,这与一年中其他月份的任何交易一样。
示例 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)
-
=if(Inmonthtodate(manufacture_date,makedate(2022,07,26),0),'Defective','Faultless')
要计算产品的总成本,请创建此度量:
=sum(cost_price)
将度量的数字格式设置为金额。
monthname(manufacture_date) | if(Inmonthtodate(manufacture_date,makedate(2022,07,26),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 | $144.66 |
Jul 2022 | Faultless | $69.98 |
Aug 2022 | Faultless | $147.46 |
Sep 2022 | Faultless | $84.21 |
Oct 2022 | Faultless | $163.91 |
inmonthtodate() 函数在评估每个产品的制造日期时返回布尔值。
对于返回布尔值 TRUE 的日期,产品标记为“缺陷”。对于返回 FALSE 值的任何产品,因此在 7 月 26 日之前(包括 7 月 26 号)的一个月内未生产,它将产品标记为“无故障”。