# yearstart - 脚本和图表函数

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

语法：

YearStart(date[, period\_no[, first\_month\_of\_year]])

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

`yearstart()` 函数的图表，显示函数可以覆盖的时间范围。

`yearstart()` 函数的图表，显示函数可以覆盖的时间范围。

`yearstart()`yearstart() 函数的图表，显示函数可以覆盖的时间范围。 ![显示 yearstart() 函数的图表，该函数标识给定年份期间内的日期，并返回属于该给定年份的日期的年初时间戳。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearstart-diagram.png)

适用场景

当您希望计算使用目前已经过的年份分数时，`yearstart()` 函数将用作表达式的一部分。例如，如果您要计算年初至今累计的利息。

返回数据类型： 双

参数

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

以下月份可用于 `first_month_of_year argument`：

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 将以与您使用的浏览器相同的语言显示。

函数示例

| 示例 | 结果 |
| --- | --- |
| `yearstart('10/19/2001')` | 返回 01/01/2001 00:00:00。 |
| `yearstart('10/19/2001',-1)` | 返回 01/01/2000 00:00:00。 |
| `yearstart('10/19/2001',0,4)` | 返回 04/01/2001 00:00:00。 |

## 示例 1 – 基本示例

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

#### 加载脚本和结果

概览

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

加载脚本包含：

* 包含 2020 年和 2022 年之间的一组事务的数据集加载到名为 ‘`Transactions`’ 的表中。

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

* 前置 Load 语句包含以下内容：

  * 设置为 `year_start` 字段的 `yearstart()` 函数。

  * 设置为 `year_start_timestamp` 字段的 `Timestamp()` 函数

加载脚本

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

Transactions: 
    Load 
       *, 
       yearstart(date) as year_start, 
       timestamp(yearstart(date)) as year_start_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_start`
* `year_start_timestamp`

结果表

| id | date | year\_start | year\_start\_timestamp |
| --- | --- | --- | --- |
| 8188 | 01/13/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8189 | 02/26/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8190 | 03/27/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8191 | 04/16/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8192 | 05/21/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8193 | 08/14/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8194 | 10/07/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8195 | 12/05/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8196 | 01/22/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8197 | 02/03/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8198 | 03/17/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8199 | 04/23/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8200 | 05/04/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8201 | 06/30/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8202 | 07/26/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8203 | 12/27/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8204 | 06/06/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8205 | 07/18/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8206 | 11/14/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8207 | 12/12/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |

通过使用 `yearstart()` 函数并将日期字段作为函数的参数传递，在前置 Load 语句中创建了 ‘`year_start`’ 字段。

`yearstart()` 函数最初确定日期值属于哪一年，并返回该年第一毫秒的时间戳。

`yearstart()` 函数和交易 8199 的图表。

`yearstart()` 函数和交易 8199 的图表。

`yearstart()`yearstart() 函数和交易 8199 的图表。 ![该图表显示交易 8199 发生在 4 月 23 日，并且 yearstart() 函数标识该年的开始。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearstart-example1-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。`yearstart()` 函数返回该年的第一毫秒，即 1 月 1 日上午 12:00:00。

## 示例 2 – period\_no

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

#### 加载脚本和结果

概览

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

但是，在本例中，任务是创建一个字段 ‘`previous_year_start`’，该字段返回交易发生年份前一年的开始日期时间戳。

加载脚本

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

Transactions: 
    Load 
       *, 
       yearstart(date,-1) as previous_year_start, 
       timestamp(yearstart(date,-1)) as previous_year_start_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_start`
* `previous_ year_start_timestamp`

结果表

| id | date | previous\_year\_start | previous\_year\_start\_timestamp |
| --- | --- | --- | --- |
| 8188 | 01/13/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8189 | 02/26/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8190 | 03/27/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8191 | 04/16/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8192 | 05/21/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8193 | 08/14/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8194 | 10/07/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8195 | 12/05/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
| 8196 | 01/22/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8197 | 02/03/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8198 | 03/17/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8199 | 04/23/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8200 | 05/04/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8201 | 06/30/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8202 | 07/26/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8203 | 12/27/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8204 | 06/06/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8205 | 07/18/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8206 | 11/14/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8207 | 12/12/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |

在本例中，由于 `yearstart()` 函数中使用了 `-1` 的 `period_no` 作为偏移参数，因此函数首先标识交易发生的年。然后，它查找前一年，并确定该年的第一一毫秒。

`yearstart()` 函数的图表，其中 `period_no` 为 -1。

`yearstart()` 函数的图表，其中 `period_no` 为 -1。

`yearstart()`yearstart() 函数的图表，其中 `period_no`period\_no 为 -1。 ![图中显示了带有 period_no 的 yearstart() 函数，该函数的年范围返回一年。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearstart-example2-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。`yearstart()` 函数返回 ‘`previous_year_start`’ 字段上一年（2020 年 1 月 1 日午夜 12:00:00）的第一毫秒。

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

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

#### 加载脚本和结果

概览

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

然而，在本例中，公司政策是从 4 月 1 日开始的一年。

加载脚本

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

Transactions: 
    Load 
       *, 
       yearstart(date,0,4) as year_start, 
       timestamp(yearstart(date,0,4)) as year_start_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_start`
* `year_start_timestamp`

结果表

| id | date | year\_start | year\_start\_timestamp |
| --- | --- | --- | --- |
| 8188 | 01/13/2020 | 04/01/2019 | 4/1/2019 12:00:00 AM |
| 8189 | 02/26/2020 | 04/01/2019 | 4/1/2019 12:00:00 AM |
| 8190 | 03/27/2020 | 04/01/2019 | 4/1/2019 12:00:00 AM |
| 8191 | 04/16/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8192 | 05/21/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8193 | 08/14/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8194 | 10/07/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8195 | 12/05/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8196 | 01/22/2021 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8197 | 02/03/2021 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8198 | 03/17/2021 | 04/01/2020 | 4/1/2020 12:00:00 AM |
| 8199 | 04/23/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
| 8200 | 05/04/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
| 8201 | 06/30/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
| 8202 | 07/26/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
| 8203 | 12/27/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
| 8204 | 06/06/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 8205 | 07/18/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 8206 | 11/14/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 8207 | 12/12/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |

在本例中，由于 `yearstart()` 函数中使用了 `4` 的 `first_month_of_year` 参数，因此它将一年中的第一天设置为 4 月 1 日，将一年的最后一天设置为 3 月 31 日。

`yearstart()` 函数的图表，4 月设定为第一个月。

`yearstart()` 函数的图表，4 月设定为第一个月。

`yearstart()`yearstart() 函数的图表，4 月设定为第一个月。 ![显示 yearstart() 函数的图表，其中一年的第一个月设置为四月。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearstart-example3-diagram.png)

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

## 示例 4 – 图表对象

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/yearstart.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`

要计算交易发生的年份，请创建以下度量：

* `=yearstart(date)`
* `=timestamp(yearstart(date))`

结果表

| id | date | =yearstart(date) | =timestamp(yearstart(date)) |
| --- | --- | --- | --- |
| 8188 | 06/06/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8189 | 07/18/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8190 | 11/14/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8191 | 12/12/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 8192 | 01/22/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8193 | 02/03/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8194 | 03/17/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8195 | 04/23/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8196 | 05/04/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8197 | 06/30/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8198 | 07/26/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8199 | 12/27/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
| 8200 | 01/13/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8201 | 02/26/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8202 | 03/27/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8203 | 04/16/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8204 | 05/21/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8205 | 08/14/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8206 | 10/07/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
| 8207 | 12/05/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |

通过使用 `yearstart()`函数并将日期字段作为函数的参数传递，在图表对象中创建了 ‘`start_of_year`’ 度量。

`yearstart()` 函数最初确定日期值属于哪一年，并返回该年第一毫秒的时间戳。

`yearstart()` 函数和交易 8199 的图表。

`yearstart()` 函数和交易 8199 的图表。

`yearstart()`yearstart() 函数和交易 8199 的图表。 ![显示 yearstart() 函数的图表标识了交易 8199 发生的年份以及该年开始的时间戳。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearstart-example4-diagram.png)

交易 8199 发生在 2021 年 4 月 23 日。`yearstart()` 函数返回该年的第一毫秒，即 1 月 1 日上午 12:00:00。

## 示例 5 – 场景

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

#### 加载脚本和结果

概览

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

加载脚本包含：

* 数据集加载到名为 ‘Loans’ 的表中。表格包含以下字段：

  * 贷款 ID。

  * 年初余额。

  * 每笔贷款每年收取的简单利率。

最终用户希望有一个图表对象，该对象按贷款 ID 显示年初至今每笔贷款的应计利息。

加载脚本

```
Loans: 
Load 
* 
Inline  
[ 
loan_id,start_balance,rate 
8188,$10000.00,0.024 
8189,$15000.00,0.057 
8190,$17500.00,0.024 
8191,$21000.00,0.034 
8192,$90000.00,0.084 
]; 
```

结果

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

* loan\_id

* start\_balance

要计算累计利息，请创建以下度量：

=start\_balance\*(rate\*(today(1)-yearstart(today(1)))/365)

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

结果表

| loan\_id | start\_balance | =start\_balance\*(rate\*(today(1)-yearstart(today(1)))/365) |
| --- | --- | --- |
| 8188 | $10000.00 | $39.73 |
| 8189 | $15000.00 | $339.66 |
| 8190 | $17500.00 | $166.85 |
| 8191 | $21000.00 | $283.64 |
| 8192 | $90000.00 | $3003.29 |

yearstart() 函数使用今天的日期作为唯一参数，返回当前年份的开始日期。通过从当前日期中减去该结果，表达式将返回今年迄今为止经过的天数。

然后将该值乘以利率并除以 365，以返回该期间的实际利率。然后将该期间的实际利率乘以贷款的起始余额，以返回今年迄今为止的应计利息。