# yeartodate 脚本和图表功能

此函数用于判断输入时间戳是否在最后加载脚本的日期的年份以内，并返回 True（如果在）或返回 False（如果不在）。最后加载脚本的日期的年份根据 UTC 时间计算。

语法：

YearToDate(timestamp[ , yearoffset [ , firstmonth [ , todaydate] ] ])

返回数据类型： 布尔值

信息注释

在 Qlik Sense 中，布尔 true 值由 -1 表示，false 值由 0 表示。

`yeartodate()` 函数的示例图表

`yeartodate()` 函数的示例图表

`yeartodate()`yeartodate() 函数的示例图表 ![显示 yeartodate 函数将返回 True 或 False 值的日期值的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-overview.png)

如果未使用可选参数，年初至今指日历年中 1 月 1 日以后任何一天，包括最近一次脚本执行日期。

换言之，当在没有其他参数的情况下触发 `yeartodate()` 函数时，该函数用于评估时间戳，并根据该日期是否发生在日历年内（包括重新加载发生的日期）返回布尔结果。

但是，也可以使用 `firstmonth` 参数取代年份的开始日期，以及使用 `yearoffset` 参数与前几年或后几年进行比较。

最后，在历史数据集的实例中，`yeartodate()` 函数提供了一个要设置 `todaydate` 的参数，该参数会将时间戳与 `todaydate` 参数中提供的日期（包括该日期）之前的日历年进行比较。

参数

| 参数 | 描述 |
| --- | --- |
| timestamp | 评估的时间戳，如 '10/12/2012'.。 |
| yearoffset | 通过指定 yearoffset，yeartodate 对于其他年份的同一时期返回 True。yearoffset 为负表示上一年，偏移量为正表示下一年。通过指定 yearoffset = -1 获得至今的最近一年。如果忽略，则假设为 0。 |
| firstmonth | 通过在 1 和 12 之间（如果省略，则为 1）指定 firstmonth，年初可移动到任何一个月的第一天。例如，如果您想要从 5 月 1 日开始的财政年工作，请指定 firstmonth = 5。值 1 表示从 1 月 1 日开始的财政年度，值 12 表示从 12 月 1 日起的财政年度。 |
| todaydate | 通过指定一个 todaydate（如果忽略执行上次脚本时间戳），这可作为该时期的上限移动该日。 |

## 适合使用 yeartodate 的情况

`yeartodate()` 函数返回布尔结果。通常，这种类型的函数将用作 if 表达式中的条件。这将返回一个聚合或计算，取决于评估日期是否发生在应用程序的最后一个重新加载日期之前（包括该日期）。

例如，YearToDate() 函数可用于标识当前年份迄今为止制造的所有设备。

下例假设上次重新加载时间 = 11/18/2011。

函数示例

| 示例 | 结果 |
| --- | --- |
| `yeartodate( '11/18/2010')` | 返回 False |
| `yeartodate( '02/01/2011')` | 返回 True |
| `yeartodate( '11/18/2011')` | 返回 True |
| `yeartodate( '11/19/2011')` | 返回 False |
| `yeartodate( '11/19/2011', 0, 1, '12/31/2011')` | 返回 True |
| `yeartodate( '11/18/2010', -1)` | 返回 True |
| `yeartodate( '11/18/2011', -1)` | 返回 False |
| `yeartodate( '04/30/2011', 0, 5)` | 返回 False |
| `yeartodate( '05/01/2011', 0, 5)` | 返回 True |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：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)。

## 示例 1 – 基本示例

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 包含 2020 年至 2022 年间交易集的数据集，该数据集加载到名为 `Transactions` 的表中。

* 日期字段已以 `DateFormat` 系统变量 (MM/DD/YYYY) 格式提供。

* 创建一个字段 `year_to_date`，用于确定截至上次重新加载日期的日历年中发生了哪些交易。

在撰写本文时，日期为 2022 年 4 月 26 日。

加载脚本

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        yeartodate(date) as year_to_date
        ;
Load
*
Inline 
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `date`

* `year_to_date`

结果表

| 日期 | 年初至今 |
| --- | --- |
| 01/10/2020 | 0 |
| 02/28/2020 | 0 |
| 04/09/2020 | 0 |
| 04/16/2020 | 0 |
| 05/21/2020 | 0 |
| 08/14/2020 | 0 |
| 10/07/2020 | 0 |
| 12/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 |
| 12/27/2021 | 0 |
| 02/02/2022 | -1 |
| 02/26/2022 | -1 |
| 03/07/2022 | -1 |
| 03/11/2022 | -1 |

`yeartodate()` 函数的图表，基本示例

`yeartodate()` 函数的图表，基本示例

`yeartodate()`yeartodate() 函数的图表，基本示例 ![显示 yeartodate 函数将返回 True 或 False 值的日期值的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-examples-basic.png)

通过使用 yeartodate() 函数并将 `date` 字段作为函数的参数传递，在前置 Load 语句中创建了 `year_to_date` 字段。``

由于没有进一步的参数被传递到函数中，因此 `yeartodate()` 函数最初会标识重新加载日期，从而标识当前日历年（从 1 月 1 日开始）的边界，并返回 `TRUE` 的布尔值结果。

因此，在 1 月 1 日至 4 月 26 日（重新加载日期）之间发生的任何交易都将返回 `TRUE` 的布尔值结果。2022 开始之前发生的任何交易都将返回 `FALSE` 的布尔值结果。

## 示例 2 – yearoffset

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 创建一个字段 `two_years_prior`，用于确定哪些交易在日历年之前整整两年发生。

加载脚本

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        yeartodate(date,-2) as two_years_prior
        ;
Load
*
Inline 
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `date`

* `two_years_prior`

结果表

| 日期 | 两年前 |
| --- | --- |
| 01/10/2020 | -1 |
| 02/28/2020 | -1 |
| 04/09/2020 | -1 |
| 04/16/2020 | -1 |
| 05/21/2020 | 0 |
| 08/14/2020 | 0 |
| 10/07/2020 | 0 |
| 12/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 |
| 12/27/2021 | 0 |
| 02/02/2022 | 0 |
| 02/26/2022 | 0 |
| 03/07/2022 | 0 |
| 03/11/2022 | 0 |

通过在 `yeartodate()` 函数中将 -2 用作 `yearoffset` 参数，该函数将比较器日历年份段的边界移动了整两年。最初，年份段等于 2022 年 1 月 1 日至 4 月 26 日。然后，`yearoffset` 参数将这一段偏移到两年前。日期边界将在 2020 年 1 月 1 日至 4 月 26 日之间。

`yeartodate()` 函数的图表，yearoffset 示例

`yeartodate()` 函数的图表，yearoffset 示例

`yeartodate()`yeartodate() 函数的图表，yearoffset 示例 ![显示 yeartodate 函数将返回 True 或 False 值的日期值的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-examples-yearoffset.png)

因此，2020 年 1 月 1 日至 4 月 26 日之间发生的任何交易都将返回布尔值结果 `TRUE`。在此段之前或之后出现的任何交易都将返回 `FALSE`。

## 示例 3 – firstmonth

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 创建一个字段 `year_to_date`，用于确定截至上次重新加载日期的日历年中发生了哪些交易。

在本例中，我们将会计年度的开始日期设置为 7 月 1 日。

加载脚本

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        yeartodate(date,0,7) as year_to_date
        ;
Load
*
Inline 
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `date`

* `year_to_date`

结果表

| 日期 | 年初至今 |
| --- | --- |
| 01/10/2020 | 0 |
| 02/28/2020 | 0 |
| 04/09/2020 | 0 |
| 04/16/2020 | 0 |
| 05/21/2020 | 0 |
| 08/14/2020 | 0 |
| 10/07/2020 | 0 |
| 12/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 | -1 |
| 12/27/2021 | -1 |
| 02/02/2022 | -1 |
| 02/26/2022 | -1 |
| 03/07/2022 | -1 |
| 03/11/2022 | -1 |

在本例中，由于 `yeartodate()` 函数中使用了为 7 的 `firstmonth` 参数，因此它将一年中的第一天设置为 7 月 1 日，将一年的最后一天设置为 6 月 30 日。

`yeartodate()` 函数的图表，firstmonth 示例

`yeartodate()` 函数的图表，firstmonth 示例

`yeartodate()`yeartodate() 函数的图表，firstmonth 示例 ![显示 yeartodate 函数将返回 True 或 False 值的日期值的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-examples-firstmonth.png)

因此，在 2021 年 7 月 1 日至 2022 年 4 月 26 日（重新加载日期）之间发生的任何交易都将返回 `TRUE` 的布尔值结果。2021年 7 月 1 日之前发生的任何交易都将返回 `FALSE` 的布尔值结果。

## 示例 4 – todaydate

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 创建一个字段 year\_to\_date，用于确定截至上次重新加载日期的日历年中发生了哪些交易。

然而，在本例中，我们需要确定截至 2022 年 3 月 1 日（含）的日历年内发生的所有交易。

加载脚本

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        yeartodate(date, 0, 1, '03/01/2022') as year_to_date
;
Load
*
Inline 
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* date

* year\_to\_date

结果表

| 日期 | 年初至今 |
| --- | --- |
| 01/10/2020 | 0 |
| 02/28/2020 | 0 |
| 04/09/2020 | 0 |
| 04/16/2020 | 0 |
| 05/21/2020 | 0 |
| 08/14/2020 | 0 |
| 10/07/2020 | 0 |
| 12/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 |
| 12/27/2021 | 0 |
| 02/02/2022 | -1 |
| 02/26/2022 | -1 |
| 03/07/2022 | 0 |
| 03/11/2022 | 0 |

在这种情况下，由于 yeartodate() 函数中使用了为 03/01/2022 的 todaydate 参数，它将比较日历年段的结束边界设置为 2022 年 3 月 1 日。提供 firstmonth 参数（介于 1 和 12 之间）至关重要；否则函数将返回空结果。

yeartodate() 函数的图表，使用 todaydate 参数的示例

yeartodate() 函数的图表，使用 todaydate 参数的示例

yeartodate()yeartodate() 函数的图表，使用 todaydate 参数的示例 ![显示 yeartodate 函数将返回 True 或 False 值的日期值的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-examples-todaydate.png)

因此，对于在 2022 年 1 月 1 日和 2022 年 3 月 1 日之间发生的任何交易， todaydate 参数都将返回 TRUE 的布尔值结果。2022 年 1 月 1 日之前或 2022 年 3 月 1 日之后发生的任何交易都将返回 FALSE 的布尔值结果。

## 示例 5 – 图表对象示例

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

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

概述

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

加载脚本包含与第一个示例相同的数据集和场景。

然而，在本例中，未更改的数据集被加载到应用程序中。确定截至上次重新加载日期的日历年中发生的交易的计算将在应用程序的图表对象中创建为度量。

加载脚本

```
Transactions:
Load
*
Inline 
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度： date。

添加以下度量：

=yeartodate(date)

结果表

| 日期 | =yeartodate(date) |
| --- | --- |
| 01/10/2020 | 0 |
| 02/28/2020 | 0 |
| 04/09/2020 | 0 |
| 04/16/2020 | 0 |
| 05/21/2020 | 0 |
| 08/14/2020 | 0 |
| 10/07/2020 | 0 |
| 12/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 |
| 12/27/2021 | 0 |
| 02/02/2022 | -1 |
| 02/26/2022 | -1 |
| 03/07/2022 | -1 |
| 03/11/2022 | -1 |

通过使用 yeartodate() 函数并将 date 字段作为函数的参数传递，在图表对象中创建 year\_to\_date 度量。

由于没有进一步的参数被传递到函数中，因此 yeartodate() 函数最初会标识重新加载日期，从而标识当前日历年（从 1 月 1 日开始）的边界，并返回 TRUE 的布尔值结果。

yeartodate() 函数的图表，使用图表对象的示例

yeartodate() 函数的图表，使用图表对象的示例

yeartodate()yeartodate() 函数的图表，使用图表对象的示例 ![显示 yeartodate 函数将返回 True 或 False 值的日期值的图表。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-examples-chart-object.png)

在 1 月 1 日至 4 月 26 日（重新加载日期）之间发生的任何交易都将返回 TRUE 的布尔值结果。2022 开始之前发生的任何交易都将返回 FALSE 的布尔值结果。

## 示例 6 – 场景

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

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

概述

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

加载脚本包含：

* 包含 2020 年至 2022 年间交易集的数据集，该数据集加载到名为 Transactions 的表中。

* 日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。

最终用户需要一个 KPI 对象，该对象将 2021 等效期间的总销售额表示为截至上次重新加载时的当前年份。

在撰写本文时，日期为 2022 年 6 月 16 日。

加载脚本

```
SET DateFormat='MM/DD/YYYY';

Transactions:
Load
*
Inline 
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
```

结果

执行以下操作：

1. 创建 KPI 对象。

2. 创建以下聚合度量以计算总销售额：

   =sum(if(yeartodate(date,-1),amount,0))

3. 将度量的数字格式设置为金额。

2021 年的 KPI yeartodate() 图表

2021 年的 KPI yeartodate() 图表

2021 年的 KPI yeartodate()yeartodate() 图表 ![使用 yeartodate 函数生成的 2021 年销售数据的 KPI 可视化。](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-scenario-kpi.png)

yeartodate() 函数在计算每个事务 ID 的日期时返回布尔值。由于重新加载发生在 2022 年 6 月 16 日，yeartodate 函数将该年期间分段成介于 01/01/2022 和 06/16/2022。但是，由于函数中使用的 period\_no 值为 -1，因此这些边界将移到上一年。因此，对于 01/01/2021 和 06/16/2021 之间发生的任何交易，yeartodate() 函数返回布尔值 TRUE 并对金额求和。