# yearend 指令碼與圖表函數

此函數傳回的值相當於包含 date 的年份最後一天、最後一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat。

語法：

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

換言之，`yearend()` 函數判定日期落在哪一年。然後這會以日期格式傳回該年最後一毫秒的時間戳記。依照預設，該年的第一個月是 1 月。不過，您可以使用 `yearend()` 函數中的 `first_month_of_year` 引數變更要將哪個月設為第一個月。

資訊備註 `  yearend() ` 函數不考慮 `FirstMonthOfYear` 系統變數。該年從 1 月 1 日開始，除非使用 `first_month_of_year` 引數變更。

`yearend()` 函數的圖表。

`yearend()` 函數的圖表。

`yearend()`yearend() 函數的圖表。 ![圖表顯示 yearend() 函數識別日期和發生年份的結束時間。](https://help.qlik.com/zh-TW/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 | 如果要使用不起始於 1 月的 (會計) 年度，可在 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-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)。

應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。

若您是應用程式建立者，可以為您建立的應用程式設定預設地區。如需詳細資訊，請參閱[Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定](https://help.qlik.com/zh-TW/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 |

「`year_end`」欄位在前置 LOAD 陳述式中的建立方式是使用 `  yearend() ` 函數並傳遞日期欄位，作為函數的引數。

`yearend()` 函數最初識別日期值落在哪一年，並傳回該年最後一毫秒的時間戳記。

選取交易 8199 的 `yearend()` 函數圖表。

選取交易 8199 的 `yearend()` 函數圖表。

選取交易 8199 的 `yearend()`yearend() 函數圖表。 ![圖表顯示交易 8199 發生在 2021 年 4 月 23 日，而 yearend() 函數則會傳回該年的最後一毫秒。](https://help.qlik.com/zh-TW/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 | 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 |

因為 `period_no` 的值 `-1` 已作為 `yearend()` 函數中的偏移引數使用，所以該函數首先會識別交易發生的年份。然後這會查看前一年並識別該年的最後一毫秒。

具有 period\_no 值 -1 的 `yearend()` 函數圖表。

具有 period\_no 值 -1 的 `yearend()` 函數圖表。

具有 period\_no 值 -1 的 `yearend()`yearend() 函數圖表。 ![圖表顯示負值 period_no 如何讓 yearend() 函數識別前一年的最後一毫秒。](https://help.qlik.com/zh-TW/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 |

因為 `4` 的 `first_month_of_year` 引數用於 `yearend()` 函數，所以這將該年的第一天設定為 4 月 1 日，而該年的最後一天則為 3 月 31 日。

以 4 月作為該年第一個月的 `yearend()` 函數圖表。

以 4 月作為該年第一個月的 `yearend()` 函數圖表。

以 4 月作為該年第一個月的 `yearend()`yearend() 函數圖表。 ![圖表顯示當 first_month_of_year 設定為「四」時，yearend() 函數如何運作。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-yearend-example3-diagram.png)

交易 8199 發生在 2021 年 4 月 23 日。因為 `yearend()` 函數將該年的開始設定為 4 月 1 日，這會傳回 2022 年 3 月 31 日，作為交易的「`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 |

「`end_of_year`」量值在圖表物件中的建立方式是使用 `yearend()` 函數並傳遞日期欄位，作為函數的引數。

`yearend()` 函數最初識別日期值落在哪一年，傳回該年最後一毫秒的時間戳記。

`yearend()` 函數圖表顯示交易 8199 發生在 4 月。

`yearend()` 函數圖表顯示交易 8199 發生在 4 月。

`yearend()`yearend() 函數圖表顯示交易 8199 發生在 4 月。 ![圖表顯示 yearend() 函數識別並傳回時間戳記的時間範圍。](https://help.qlik.com/zh-TW/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 和員工名稱顯示該年剩餘期間仍會產生的預估開支報銷。會計年度於 1 月開始。

載入指令碼

```
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

將量值的數字格式設定為金錢。

結果表格

| employee\_id | 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() 函數會傳回目前年份的結束日期。然後，以該年結束日期減去今日日期，運算式就會傳回該年剩餘天數。

然後按員工讓此值乘以平均每日開支報銷，以計算每個員工在該年剩餘期間預期會有的預估報銷值。