yearend - 脚本和图表函数
此函数用于返回与包含 date 的年份的最后一天的最后毫秒时间戳对应的值。默认的输出格式为在脚本中所设置的 DateFormat。
语法:
YearEnd( date[, period_no[, first_month_of_year = 1]])
换句话说,yearend() 函数确定日期属于哪一年。然后以日期格式返回该年最后一毫秒的时间戳。默认情况下,一年的第一个月是一月。但是,您可以使用 yearend() 函数中的 first_month_of_year 参数更改将哪个月设置为第一个月。
适用场景
当您希望计算使用尚未发生的年份分数时,yearend() 函数将用作表达式的一部分。例如,您想计算一年中尚未发生的利息总额。
返回数据类型: 双
参数 | 说明 |
---|---|
date | 要评估的日期或时间戳。 |
period_no | period_no 为整数,其中值 0 表示该年份包含 date。period_no 为负数表示前几年,为正数表示随后几年。 |
first_month_of_year | 如果您不想从一月开始处理(财政)年,可在 first_month_of_year 中指定一个介于 2 和 12 之间的值。 |
可以使用以下值在 first_month_of_year 参数中设置一年中的第一个月:
月 | 值 |
---|---|
二月 | 2 |
三月 | 3 |
四月 | 4 |
五月 | 5 |
六月 | 6 |
七月 | 7 |
八月 | 8 |
九月 | 9 |
十月 | 10 |
十一月 | 11 |
十二月 | 12 |
区域设置
除非另有规定,本主题中的示例使用以下日期格式:MM/DD/YYYY。日期格式已经在数据加载脚本中的 SET DateFormat 语句中指定。由于区域设置和其他因素,系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者,您可以更改加载脚本中的格式以匹配这些示例。
应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典,则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。
示例 | 结果 |
---|---|
yearend('10/19/2001') | Returns 12/31/2001 23:59:59. |
yearend('10/19/2001', -1) | Returns 12/31/2000 23:59:59. |
yearend('10/19/2001', 0, 4) | Returns 03/31/2002 23:59:59. |
示例 1 – 没有其他参数
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
包含 2020 年和 2022 年之间的一组事务的数据集加载到名为 ‘Transactions’ 的表中。
-
日期字段以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。
-
前置 Load 语句包含以下内容:
-
设置为 year_end 字段的 yearend() 函数。
-
设置为 year_end_timestamp 字段的 Timestamp() 函数。
-
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearend(date) as year_end,
timestamp(yearend(date)) as year_end_timestamp
;
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,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/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,12/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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
id
-
date
-
year_end
-
year_end_timestamp
id | 日期 | year_end | year_end_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8189 | 02/26/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8190 | 03/27/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8191 | 04/16/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8192 | 05/21/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8193 | 08/14/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8194 | 10/07/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8195 | 12/05/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8196 | 01/22/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8197 | 02/03/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8198 | 03/17/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8199 | 04/23/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8200 | 05/04/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8201 | 06/30/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8202 | 07/26/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8203 | 12/27/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8204 | 06/06/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8205 | 07/18/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8206 | 11/14/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8207 | 12/12/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
通过使用 yearend() 函数并将日期字段作为函数的参数传递,在前置 Load 语句中创建了 ‘year_end’ 字段。
yearend() 函数最初确定日期值属于哪一年,并返回该年最后一毫秒的时间戳。
交易 8199 发生在 2021 年 4 月 23 日。yearend() 函数返回该年的最后一毫秒,即 12 月 31 日晚上 11:59:59。
示例 2 – period_no
概述
使用与第一个 相同的数据集和场景。
但是,在本例中,任务是创建一个字段 ‘previous_year_end’,该字段返回交易发生年份前一年的结束日期时间戳。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearend(date,-1) as previous_year_end,
timestamp(yearend(date,-1)) as previous_year_end_timestamp
;
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,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/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,12/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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
id
-
date
-
previous_year_end
-
previous_ year_end_timestamp
id | 日期 | previous_year_end | previous_year_end_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8189 | 02/26/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8190 | 03/27/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8191 | 04/16/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8192 | 05/21/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8193 | 08/14/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8194 | 10/07/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8195 | 12/05/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8196 | 01/22/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8197 | 02/03/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8198 | 03/17/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8199 | 04/23/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8200 | 05/04/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8201 | 06/30/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8202 | 07/26/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8203 | 12/27/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8204 | 06/06/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8205 | 07/18/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8206 | 11/14/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8207 | 12/12/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
由于 yearend() 函数中使用了 -1 的 period_no 作为偏移参数,因此函数首先标识交易发生的年。然后,它查找前一年,并确定该年的最后一毫秒。
交易 8199 发生在 2021 年 4 月 23 日。yearend() 函数返回 ‘previous_year_end’ 字段上一年(2020 年 12 月 31 日晚上 11:59:59)的最后一毫秒。
示例 3 – first_month_of_year
概述
使用与第一个 相同的数据集和场景。
然而,在本例中,公司政策是从 4 月 1 日开始的一年。
加载脚本
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearend(date,0,4) as year_end,
timestamp(yearend(date,0,4)) as year_end_timestamp
;
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,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/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,12/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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
id
-
date
-
year_end
-
year_end_timestamp
id | 日期 | year_end | year_end_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 03/31/2020 | 3/31/2020 11:59:59 PM |
8189 | 02/26/2020 | 03/31/2020 | 3/31/2020 11:59:59 PM |
8190 | 03/27/2020 | 03/31/2020 | 3/31/2020 11:59:59 PM |
8191 | 04/16/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8192 | 05/21/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8193 | 08/14/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8194 | 10/07/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8195 | 12/05/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8196 | 01/22/2021 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8197 | 02/03/2021 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8198 | 03/17/2021 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8199 | 04/23/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8200 | 05/04/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8201 | 06/30/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8202 | 07/26/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8203 | 12/27/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8204 | 06/06/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
8205 | 07/18/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
8206 | 11/14/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
8207 | 12/12/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
由于 yearend() 函数中使用了 4 的 first_month_of_year 参数,因此它将一年中的第一天设置为 4 月 1 日,将一年的最后一天设置为 3 月 31 日。
交易 8199 发生在 2021 年 4 月 23 日。由于 yearend() 函数将年初设置为 4 月 1 日,因此返回 March 31, 2022 作为交易的 ‘year_end’ 值。
示例 4 – 图表对象
概述
使用与第一个 相同的数据集和场景。
然而,在本例中,未更改的数据集被加载到应用程序中。返回交易发生年份的结束日期时间戳的计算是作为应用程序的图表对象中的度量创建的。
加载脚本
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,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/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,12/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
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
id
-
date
要计算交易发生的年份,请创建以下度量:
-
=yearend(date)
-
=timestamp(yearend(date))
id | 日期 | =yearend(date) | =timestamp(yearend(date)) |
---|---|---|---|
8188 | 01/13/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8189 | 02/26/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8190 | 03/27/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8191 | 04/16/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8192 | 05/21/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8193 | 08/14/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8194 | 10/07/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8195 | 12/05/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8196 | 01/22/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8197 | 02/03/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8198 | 03/17/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8199 | 04/23/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8200 | 05/04/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8201 | 06/30/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8202 | 07/26/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8203 | 12/27/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8204 | 06/06/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8205 | 07/18/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8206 | 11/14/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8207 | 12/12/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
通过使用 yearend()函数并将日期字段作为函数的参数传递,在图表对象中创建了 ‘end_of_year’ 度量。
yearend() 函数最初确定日期值属于哪一年,并返回该年最后一毫秒的时间戳。
交易 8199 发生在 2021 年 4 月 23 日。yearend() 函数返回该年的最后一毫秒,即 12 月 31 日晚上 11:59:59。
示例 5 – 场景
概述
打开数据加载编辑器,并将下面的加载脚本添加到新选项卡。
加载脚本包含:
-
数据集加载到名为 ‘Employee_Expenses’ 的表中。表格包含以下字段:
-
员工 ID
-
员工名称
-
每位员工的平均每日费用报销
-
最终用户需要一个图表对象,该对象按员工 ID 和员工姓名显示该年剩余时间仍将发生的估计费用索赔。财政年度从一月份开始。
加载脚本
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
结果
加载数据并打开工作表。创建新表并将这些字段添加为维度:
-
employee_id
-
employee_name
要计算预计费用索赔,请创建以下度量:
=(yearend(today(1))-today(1))*avg_daily_claim
将度量的数字格式设置为金额。
EmployeeID | employee_name | =(yearend(today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $3240.00 |
183 | Deryck | $2700.00 |
184 | Dexter | $2700.00 |
185 | Sydney | $5832.00 |
186 | Agatha | $3888.00 |
通过使用今天的日期作为其唯一参数,yearend() 函数返回当前年份的结束日期。然后,通过从年终日期中减去今天的日期,表达式返回一年中剩余的天数。
然后将该值乘以每个员工的平均每日费用索赔,以计算每个员工在剩余年份预计提出的索赔的估计值。