inquartertodate - 脚本和图表函数
此函数用于返回 True,如果 timestamp 位于包含 base_date 为止以及包括 base_date 最后毫秒的季度部分以内。
语法:
InQuarterToDate (timestamp, base_date, period_no [, first_month_of_year])
返回数据类型: 布尔值
在 Qlik Sense 中,布尔 true 值由 -1 表示,false 值由 0 表示。
inquartertodate() 函数将一年分为四个相等的季度,即 1 月 1 日至 12 月 31 日(或用户定义的年初及其相应的结束日期)。使用 base_date,该函数将对特定的季度进行分段,同时 base_date 识别该季度分段的哪个季度和允许的最大日期。最后,当将规定的日期值与该段进行比较时,该函数返回布尔值结果。
参数 | 说明 |
---|---|
timestamp | 想要用来与 base_date 进行比较的日期。 |
base_date | 日期用于计算季度的值。 |
period_no |
该季度可通过 period_no 偏移。period_no 为整数,其中值 0 表示该季度包含 base_date。period_no 为负数表示前几季,为正数则表示随后的几季。 |
first_month_of_year | 如果您不想从一月开始处理(财政)年,可在 first_month_of_year 中指定一个介于 2 和 12 之间的值。 |
适用场景
inquartertodate() 函数返回布尔结果。通常,这种类型的函数将用作 if 表达式中的条件。inquartertodate() 函数将用于返回一个聚合或计算,这取决于评估日期是否发生在该日期之前的季度。
例如,inquartertodate() 函数可用于识别截至特定日期的一个季度内制造的所有设备。
示例 | 结果 |
---|---|
inquartertodate('01/25/2013', '03/25/2013', 0) | 返回 TRUE,由于 timestamp 的值,01/25/2013,其在 01/01/2013 至 03/25/2013 的三个月内 ,其中有 base_date 的值 , 03/25/2013。 |
inquartertodate('04/26/2013', '03/25/2013', 0) | 返回 FALSE,因为 04/26/2013 在与前一示例相同的时间段之外。 |
inquartertodate('02/25/2013', '06/09/2013', -1) | 返回 TRUE,因为 period_no 的值 -1 将搜索期间切换回三个月长度(一年的一个季度)的期间。这让搜索期间为 01/01/2013 至 03/09/2013. |
inquartertodate('03/25/2006', '04/15/2006', 0, 2) | 返回 TRUE,因为 first_month_of_year 的值设置为 2,这让搜索期间为 02/01/2006 至 04/15/2006 而非 04/01/2006 至 04/15/2006。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2022 年交易集的数据集,该数据集加载到名为 Transactions 的表中。
-
日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
-
创建一个字段 in_quarter_to_date,用于确定截至 2022 年 5 月 15 日的季度内发生了哪些交易。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inquartertodate(date,'05/15/2022', 0) as in_quarter_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_quarter_to_date
日期 | in_quarter_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 | -1 |
5/7/2022 | -1 |
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 |
in_quarter_to_date 字段是在前置 Load 语句中使用 inquartertodate() 函数创建的。提供的第一个参数标识正在评估的字段。第二个参数是 5 月 15 日的硬编码日期,它是标识要分段的季度的 base_date 并定义该分段的结束边界。为 0 的 period_no 是最后一个参数,这意味着该函数不比较分段季度之前或之后的季度。
4 月 1 日至 5 月 15 日之间发生的任何交易都将返回布尔结果 TRUE。5 月 16 日及之后的交易日期将返回 FALSE,4 月 1 日之前的任何交易也将返回。
示例 2 – period_no
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建一个字段 previous_qtr_to_date,确定在 2022 年 5 月 15 日结束的季度段之前的整个季度发生了哪些交易。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inquartertodate(date,'05/15/2022', -1) as previous_qtr_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
-
previous_qtr_to_date
日期 | previous_qtr_to_date |
---|---|
1/7/2022 | -1 |
1/19/2022 | -1 |
2/5/2022 | -1 |
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 |
值为 -1 的 period_no 指示 inquartertodate () 函数将输入季度段与前一季度进行比较。5 月 15 日属于一年的第二季度,因此该部分最初等于 4 月 1 日至 5 月 15 之间。然后 period_no 将该段提前三个月偏移,导致日期边界变为 1 月 1 日至 2 月 15 日。
因此,1 月 1 日至 2 月 15 日之间发生的任何交易都将返回布尔值结果 TRUE。
示例 3 – first_month_of_year
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建一个字段 in_quarter_to_date,用于确定截至 2022 年 5 月 15 日的相同季度内发生了哪些交易。
在本例中,我们将 3 月设置为会计年度的第一个月。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inquartertodate(date,'05/15/2022', 0,3) as in_quarter_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_quarter_to_date
日期 | in_quarter_to_date |
---|---|
1/7/2022 | 0 |
1/19/2022 | 0 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | -1 |
4/1/2022 | -1 |
5/7/2022 | -1 |
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 |
通过在 inquartertodate() 函数中使用 3 作为 first_month_of_year 参数,函数从 3 月 1 日开始一年,然后将一年分成四个季度。因此,四分之一部分为:
-
三月至五月
-
六月至八月
-
九月至十一月
-
十二月至二月
然后,为 5 月 15 日的 base_date 通过将其结束边界设置为 5 月 15 号,细分 3 月至 5 月季度。
因此,在 3 月 1 日和 5 月 15 日之间发生的任何交易将返回布尔结果 TRUE,而日期在这些边界之外的交易将返回值 FALSE。
示例 4 – 图表对象
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在本例中,未更改的数据集被加载到应用程序中。确定与 5 月 15 日在同一季度发生的交易的计算将作为图表对象中的度量创建。
加载脚本
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。
创建以下度量:
=inquartertodate(date,'05/15/2022', 0)
日期 | =inquartertodate(date,'05/15/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 | -1 |
5/7/2022 | -1 |
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 |
通过使用 inquartertodate() 函数在图表对象中创建 in_quarter_to_date 度量。第一个参数是要计算的日期字段。第二个参数是 5 月 15 日的硬编码日期,它是标识要分段的季度的 base_date 并定义该分段的结束边界。为 0 的 period_no 是最后一个参数,这意味着该函数不比较分段季度之前或之后的季度。
4 月 1 日至 5 月 15 日之间发生的任何交易都将返回布尔结果 TRUE。5 月 16 日及之后的交易日期将返回 FALSE,4 月 1 日之前的任何交易也将返回。
示例 5 – 场景
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
加载到名为 Products 的表中的数据集。
-
有关产品 ID、制造日期和成本价格的信息。
2022 年 5 月 15 日,在制造过程中发现并解决了一个设备错误。在该季度生产的产品将有缺陷。最终用户需要一个图表对象,该对象按季度名称显示产品是否“有缺陷”或“无缺陷”的状态,以及该季度迄今为止生产的产品的成本。
加载脚本
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
];
结果
执行以下操作:
-
加载数据并打开工作表。新建表格。创建维度以显示季度名称:
=quartername(manufacture_date)
-
接下来,创建一个维度,以确定哪些产品有缺陷,哪些无缺陷:
=if(inquartertodate(manufacture_date,makedate(2022,05,15),0),'Defective','Faultless')
-
创建一个度量来求对产品的 cost_price 求和:
=sum(cost_price)
-
将度量的数字格式设置为金额。
quartername(manufacture_date) | if(inquartertodate(manufacture_date,makedate(2022,05,15),0),'Defective','Faultless') | Sum(cost_price) |
---|---|---|
Jan-Mar 2022 | Faultless | $253.89 |
Apr-Jun 2022 | Faultless | $229.03 |
Apr-Jun 2022 | Defective | $122.45 |
Jul-Sep 2022 | Faultless | $446.31 |
Oct-Dec 2022 | Faultless | $163.91 |
inquartertodate() 函数在评估每个产品的制造日期时返回布尔值。对于返回布尔值 TRUE 的产品,它将产品标记为 ‘Defective’。对于返回值为 FALSE 的任何产品,因此在截至 5 月 15 日(含)的季度内未生产,其将产品标记为 ‘Faultless’。