inyeartodate - 脚本和图表函数
此函数用于返回 True,如果 timestamp 位于包含 base_date 为止以及包括 base_date 最后毫秒的年份部分以内。
语法:
InYearToDate (timestamp, base_date, period_no[, first_month_of_year])
返回数据类型: 布尔值
在 Qlik Sense 中,布尔 true 值由 -1 表示,false 值由 0 表示。
inyeartodate() 函数将使用 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 之间的值。 |
适用场景
inyeartodate() 函数返回布尔结果。通常,这种类型的函数将用作 if 表达式中的条件。这将返回一个聚合或计算,这取决于评估日期是否发生在该日期之前的年份。
例如,inyeartodate() 函数可用于识别截至特定日期的一个年内制造的所有设备。
以下示例使用日期格式 MM/DD/YYYY。日期格式已经在数据加载脚本顶部的 SET DateFormat 语句中指定。可以根据要求更改示例中的格式。
示例 | 结果 |
---|---|
inyeartodate ('01/25/2013', '02/01/2013', 0) | 返回 TRUE。 |
inyeartodate ('01/25/2012', '01/01/2013', 0) | 返回 FALSE。 |
inyeartodate ('01/25/2012', '02/01/2013', -1) | 返回 TRUE。 |
inyeartodate ('11/25/2012', '01/31/2013', 0, 4) | 返回 TRUE。 timestamp 的值在第四个月中开始的财政年内,并在 base_date 的值之前。 |
inyeartodate ('3/31/2013', '01/31/2013', 0, 4 ) | 返回 FALSE。 与前面的示例相比, timestamp 的值仍在财政年内,但它在 base_date 的值之后,因此它属于一年的某一部分以外。 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2020 年至 2022 年间交易集的数据集,该数据集加载到名为 Transactions 的表中。
-
日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
-
创建一个字段 in_year_to_date,用于确定截至 2021 年 7 月 26 日的年内发生了哪些交易。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inyeartodate(date,'07/26/2021', 0) as in_year_to_date
;
Load
*
Inline
[
id,date,amount
8188,'01/13/2020',37.23
8189,'02/26/2020',17.17
8190,'03/27/2020',88.27
8191,'04/16/2020',57.42
8192,'05/21/2020',53.80
8193,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/05/2020',87.21
8196,'01/22/2021',95.93
8197,'02/03/2021',45.89
8198,'03/17/2021',36.23
8199,'04/23/2021',25.66
8200,'05/04/2021',82.77
8201,'06/30/2021',69.98
8202,'07/26/2021',76.11
8203,'07/27/2021',25.12
8204,'06/06/2022',46.23
8205,'07/18/2022',84.21
8206,'11/14/2022',96.24
8207,'12/12/2022',67.67
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
in_year_to_date
日期 | in_year_to_date |
---|---|
01/13/2020 | 0 |
02/26/2020 | 0 |
03/27/2020 | 0 |
04/16/2020 | 0 |
05/21/2020 | 0 |
06/14/2020 | 0 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | -1 |
02/03/2021 | -1 |
03/17/2021 | -1 |
04/23/2021 | -1 |
05/04/2021 | -1 |
06/30/2021 | -1 |
07/26/2021 | -1 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
in_year_to_date 字段是在前面的 LOAD 语句中使用 inyeartodate() 函数创建的。提供的第一个参数标识正在评估的字段。
第二个参数是 2021年 7 月 26 日的硬编码日期,这是标识年份段结束边界的 base_date。为 0 的 period_no 是最后一个参数,这意味着该函数不比较分段年之前或之后的年。
1 月 1 日至 7 月 26 日之间发生的任何交易都将返回布尔值结果 TRUE。2021 之前和 2021 年 7 月 26 日之后的交易日期返回 FALSE。
示例 2 – period_no
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建一个字段 previous_year_to_date,确定在 2021 年 7 月 26 日结束的年段之前的整个年发生了哪些交易。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inyeartodate(date,'07/26/2021', -1) as previous_year_to_date
;
Load
*
Inline
[
id,date,amount
8188,'01/13/2020',37.23
8189,'02/26/2020',17.17
8190,'03/27/2020',88.27
8191,'04/16/2020',57.42
8192,'05/21/2020',53.80
8193,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/05/2020',87.21
8196,'01/22/2021',95.93
8197,'02/03/2021',45.89
8198,'03/17/2021',36.23
8199,'04/23/2021',25.66
8200,'05/04/2021',82.77
8201,'06/30/2021',69.98
8202,'07/26/2021',76.11
8203,'07/27/2021',25.12
8204,'06/06/2022',46.23
8205,'07/18/2022',84.21
8206,'11/14/2022',96.24
8207,'12/12/2022',67.67
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
previous_year_to_date
日期 | previous_year_to_date |
---|---|
01/13/2020 | -1 |
02/26/2020 | -1 |
03/27/2020 | -1 |
04/16/2020 | -1 |
05/21/2020 | -1 |
06/14/2020 | -1 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | 0 |
02/03/2021 | 0 |
03/17/2021 | 0 |
04/23/2021 | 0 |
05/04/2021 | 0 |
06/30/2021 | 0 |
07/26/2021 | 0 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
值为 -1 的 period_no 指示 inyeartodate () 函数将输入季度段与前一年进行比较。输入日期为 2021年 7 月 26 日,2021 年 1 月 1 日至 2021年 7 月 26 日段最初被确定为年初至今。然后 period_no 将该段提前整年偏移,导致日期边界变为 2020 年 1 月 1 日至 7 月 26 日。
因此,2020 年 1 月 1 日至 7 月 26 日之间发生的任何交易都将返回布尔值结果 TRUE。
示例 3 – first_month_of_year
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
与第一个示例相同的数据集和场景。
-
创建一个字段 in_year_to_date,用于确定截至 2021 年 7 月 26 日的同一年内发生了哪些交易。
在本例中,我们将 3 月设置为会计年度的第一个月。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inyeartodate(date,'07/26/2021', 0,3) as in_year_to_date
;
Load
*
Inline
[
id,date,amount
8188,'01/13/2020',37.23
8189,'02/26/2020',17.17
8190,'03/27/2020',88.27
8191,'04/16/2020',57.42
8192,'05/21/2020',53.80
8193,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/05/2020',87.21
8196,'01/22/2021',95.93
8197,'02/03/2021',45.89
8198,'03/17/2021',36.23
8199,'04/23/2021',25.66
8200,'05/04/2021',82.77
8201,'06/30/2021',69.98
8202,'07/26/2021',76.11
8203,'07/27/2021',25.12
8204,'06/06/2022',46.23
8205,'07/18/2022',84.21
8206,'11/14/2022',96.24
8207,'12/12/2022',67.67
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
date
-
in_year_to_date
日期 | in_year_to_date |
---|---|
01/13/2020 | 0 |
02/26/2020 | 0 |
03/27/2020 | 0 |
04/16/2020 | 0 |
05/21/2020 | 0 |
06/14/2020 | 0 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | 0 |
02/03/2021 | 0 |
03/17/2021 | -1 |
04/23/2021 | -1 |
05/04/2021 | -1 |
06/30/2021 | -1 |
07/26/2021 | -1 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
通过在 inyeartodate() 函数中使用 3 作为 first_month_of_year 参数,函数从 3 月 1 日开始年份。然后,2021 年 7 月 26 日的 base_date 设置该年份段的结束日期。
因此,在 2021 年 3 月 1 日和 7 月 26 日之间发生的任何交易将返回布尔结果 TRUE,而日期在这些边界之外的交易将返回值 FALSE。
示例 4 – 图表对象
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含与第一个示例相同的数据集和场景。然而,在本例中,未更改的数据集被加载到应用程序中。确定截至 2021 年 7 月 26 日在同一年发生的交易的计算是作为应用程序中图表对象中的度量值创建的。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,'01/13/2020',37.23
8189,'02/26/2020',17.17
8190,'03/27/2020',88.27
8191,'04/16/2020',57.42
8192,'05/21/2020',53.80
8193,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/05/2020',87.21
8196,'01/22/2021',95.93
8197,'02/03/2021',45.89
8198,'03/17/2021',36.23
8199,'04/23/2021',25.66
8200,'05/04/2021',82.77
8201,'06/30/2021',69.98
8202,'07/26/2021',76.11
8203,'07/27/2021',25.12
8204,'06/06/2022',46.23
8205,'07/18/2022',84.21
8206,'11/14/2022',96.24
8207,'12/12/2022',67.67
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:date。
创建以下度量:
=inyeartodate(date,'07/26/2021', 0)
日期 | =inyeartodate(date,'07/26/2021', 0) |
---|---|
01/13/2020 | 0 |
02/26/2020 | 0 |
03/27/2020 | 0 |
04/16/2020 | 0 |
05/21/2020 | 0 |
06/14/2020 | 0 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | -1 |
02/03/2021 | -1 |
03/17/2021 | -1 |
04/23/2021 | -1 |
05/04/2021 | -1 |
06/30/2021 | -1 |
07/26/2021 | -1 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
通过使用 inyeartodate() 函数在图表对象中创建 in_year_to_date 度量。提供的第一个参数标识正在评估的字段。第二个参数是 2021年 7 月 26 日的硬编码日期,这是标识比较年份段结束边界的 base_date。为 0 的 period_no 是最后一个参数,这意味着该函数不比较分段年之前或之后的年。
2021 年 1 月 1 日至 7 月 26 日之间发生的任何交易都将返回布尔值结果 TRUE。2021 之前和 2021 年 7 月 26 日之后的交易日期返回 FALSE。
示例 5 – 场景
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
加载到名为 Products 的表中的数据集。
-
有关产品 ID、产品类型、制造日期和成本价格的信息。
最终用户想要一个图表对象,按产品类型显示截至 2021 年 7 月 26 日制造的产品的成本。
加载脚本
Products:
Load
*
Inline
[
product_id,product_type,manufacture_date,cost_price
8188,product A,'01/13/2020',37.23
8189,product B,'02/26/2020',17.17
8190,product B,'03/27/2020',88.27
8191,product C,'04/16/2020',57.42
8192,product D,'05/21/2020',53.80
8193,product D,'08/14/2020',82.06
8194,product C,'10/07/2020',40.39
8195,product B,'12/05/2020',87.21
8196,product A,'01/22/2021',95.93
8197,product B,'02/03/2021',45.89
8198,product C,'03/17/2021',36.23
8199,product C,'04/23/2021',25.66
8200,product B,'05/04/2021',82.77
8201,product D,'06/30/2021',69.98
8202,product D,'07/26/2021',76.11
8203,product D,'12/27/2021',25.12
8204,product C,'06/06/2022',46.23
8205,product C,'07/18/2022',84.21
8206,product A,'11/14/2022',96.24
8207,product B,'12/12/2022',67.67
];
结果
加载数据并打开工作表。创建新表并将该字段添加为维度:product_type。
创建一个度量值,计算 2021 年 7 月 27 日之前制造的每种产品的总和:
=sum(if(inyeartodate(manufacture_date,makedate(2021,07,26),0),cost_price,0))
将度量的数字格式设置为金额。
product_type | =sum(if(inyeartodate(manufacture_date,makedate(2021,07,26),0),cost_price,0)) |
---|---|
product A | $95.93 |
product B | $128.66 |
product C | $61.89 |
product D | $146.09 |
inyeartodate() 函数在评估每个产品的制造日期时返回布尔值。对于 2021 年 7 月 27 日前生产的任何产品,inyeartodate() 函数返回布尔值 TRUE,并对 cost_price 求和。
产品 D 是 2021年 7 月 26 日之后生产的唯一产品。带有 product_ID 8203 的条目于 12 月 27 日制造,成本为 25.12 美元。因此,该成本不包括在图表对象中产品 D 的总成本中。