# yearend 脚本和图表功能

此函数用于返回与包含 date 的年份的最后一天的最后毫秒时间戳对应的值。默认的输出格式为在脚本中所设置的 DateFormat。

语法：

YearEnd( date[, period\_no[, first\_month\_of\_year = 1]])

换句话说，`yearend()` 函数确定日期属于哪一年。然后以日期格式返回该年最后一毫秒的时间戳。默认情况下，一年的第一个月是一月。但是，您可以使用 `yearend()` 函数中的 `first_month_of_year` 参数更改将哪个月设置为第一个月。

信息注释 `  yearend() ` 函数不考虑 `FirstMonthOfYear` 系统变量。这一年从 1 月 1 日开始，除非用 `first_month_of_year` 参数来改变它。

`yearend()` 函数的图表。

`yearend()` 函数的图表。

`yearend()`yearend() 函数的图表。 ![显示 yearend() 函数如何识别日期和发生它的年份的末尾的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearend-diagram.png)

适合使用 yearend 的情况

当您希望计算使用尚未发生的年份分数时，`yearend()` 函数将用作表达式的一部分。例如，您想计算一年中尚未发生的利息总额。

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| date | 要评估的日期或时间戳。 |
| period\_no | period\_no 为整数，其中值 0 表示该年份包含 date。period\_no 为负数表示前几年，为正数表示随后几年。 |
| first\_month\_of\_year | 如果您不想从一月开始处理（财政）年，可在 first\_month\_of\_year 中指定一个介于 2 和 12 之间的值。 |

可以使用以下值在 `first_month_of_year` 参数中设置一年中的第一个月：

first\_month\_of\_year 值

| 月 | 值 |
| --- | --- |
| 二月 | 2 |
| 三月 | 3 |
| 四月 | 4 |
| 五月 | 5 |
| 六月 | 6 |
| 七月 | 7 |
| 八月 | 8 |
| 九月 | 9 |
| 十月 | 10 |
| 十一月 | 11 |
| 十二月 | 12 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：MM/DD/YYYY。日期格式已经在数据加载脚本中的 `SET DateFormat` 语句中指定。由于区域设置和其他因素，系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者，您可以更改加载脚本中的格式以匹配这些示例。有关更多信息，请参阅[修改应用程序和脚本的区域设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)。

应用程序中的默认区域设置基于用户配置文件。这些区域格式设置与 Qlik Cloud 用户界面中显示的语言无关。Qlik Cloud 将以与您使用的浏览器相同的语言显示。

如果你是应用程序创建者，你可以为自己创建的应用程序设置默认区域。有关更多信息，请参阅[设置 Qlik Cloud Analytics 中创建应用程序和脚本所用的首选区域设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)。

函数示例

| 示例 | 结果 |
| --- | --- |
| ` yearend('10/19/2001')  ` | 返回 12/31/2001 23:59:59。 |
| ` yearend('10/19/2001', -1)  ` | 返回 12/31/2000 23:59:59。 |
| ` yearend('10/19/2001', 0, 4)  ` | 返回 03/31/2002 23:59:59。 |

## 示例 1 – 没有其他参数

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/yearend.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 包含 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 的 `yearend()` 函数的图表。

选择了交易 8199 的 `yearend()` 函数的图表。

选择了交易 8199 的 `yearend()`yearend() 函数的图表。 ![该图显示交易 8199 发生在 2021 的 4 月 23 日，然后 yearend() 函数返回该年的最后一毫秒。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearend-example1-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。`yearend()` 函数返回该年的最后一毫秒，即 12 月 31 日晚上 11:59:59。

## 示例 2 – period\_no

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/yearend.htm)

#### 加载脚本和结果

概述

使用与第一个 相同的数据集和场景。

但是，在本例中，任务是创建一个字段 ‘`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 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8189 | 02/26/2020 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8190 | 03/27/2020 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8191 | 04/16/2020 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8192 | 05/21/2020 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8193 | 08/14/2020 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8194 | 10/07/2020 | 2019 年 12 月 31 日 | 12/31/2019 11:59:59 PM |
| 8195 | 12/05/2020 | 2019 年 12 月 31 日 | 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` 作为偏移参数，因此函数首先标识交易发生的年。然后，它查找前一年，并确定该年的最后一毫秒。

`yearend()` 函数的图表，其中 period\_no 为 -1.

`yearend()` 函数的图表，其中 period\_no 为 -1.

`yearend()`yearend() 函数的图表，其中 period\_no 为 -1. ![该图显示了为负 1 的 period_no 如何使 yearend() 函数识别上一年的最后一毫秒。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearend-example2-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。`yearend()` 函数返回 ‘`previous_year_end`’ 字段上一年（2020 年 12 月 31 日晚上 11:59:59）的最后一毫秒。

## 示例 3 – first\_month\_of\_year

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/yearend.htm)

#### 加载脚本和结果

概述

使用与第一个 相同的数据集和场景。

然而，在本例中，公司政策是从 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 日。

`yearend()` 函数的图表，4 月为一年中的第一个月。

`yearend()` 函数的图表，4 月为一年中的第一个月。

`yearend()`yearend() 函数的图表，4 月为一年中的第一个月。 ![图表显示了当 first_month_of_year 设置为 4 时 yearend() 函数的工作方式的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearend-example3-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。由于 `yearend()` 函数将年初设置为 4 月 1 日，因此返回 March 31, 2022 作为交易的 ‘`year_end`’ 值。

## 示例 4 – 图表对象

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/yearend.htm)

#### 加载脚本和图表表达式

概述

使用与第一个 相同的数据集和场景。

然而，在本例中，未更改的数据集被加载到应用程序中。返回交易发生年份的结束日期时间戳的计算是作为应用程序的图表对象中的度量创建的。

加载脚本

```
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 发生在 4 月的 `yearend()` 函数的图表。

显示交易 8199 发生在 4 月的 `yearend()` 函数的图表。

显示交易 8199 发生在 4 月的 `yearend()`yearend() 函数的图表。 ![显示 yearend() 函数标识并返回时间戳的时间范围的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearend-example4-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。`yearend()` 函数返回该年的最后一毫秒，即 12 月 31 日晚上 11:59:59。

## 示例 5 – 场景

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/yearend.htm)

#### 加载脚本和图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 数据集加载到名为 ‘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() 函数返回当前年份的结束日期。然后，通过从年终日期中减去今天的日期，表达式返回一年中剩余的天数。

然后将该值乘以每个员工的平均每日费用索赔，以计算每个员工在剩余年份预计提出的索赔的估计值。