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 Cloud 用户界面中显示的语言无关。Qlik Cloud 将以与您使用的浏览器相同的语言显示。
如果你是应用程序创建者,你可以为自己创建的应用程序设置默认区域。有关更多信息,请参阅设置 Qlik Cloud 分析 中创建应用程序和脚本所用的首选区域设置。
示例 | 结果 |
---|---|
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 号)的一个月内未生产,它将产品标记为“无故障”。