# 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-TW/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 | 透過指定 firstmonth 介於 1 和 12 之間 (如果省略，則為 1)，可將年開始向前移到任何月份的第一天。例如，若您想要處理 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-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)。

## 範例 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-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-function-yeartodate-examples-basic.png)

`year_to_date` 欄位在前置 LOAD 陳述式中的建立方式是使用 `yeartodate()` 函數，並傳遞 `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 |

透過使用 -2 作為 `yeartodate()` 函數中的 `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-TW/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 |

在此例中，因為 `firstmonth` 引數的值 7 用於 `yeartodate()` 函數，所以這將該年的第一天設為 7 月 1 日，而該年的最後一天則為 6 月 30 日。

`yeartodate()` 函數的圖表，firstmonth 範例

`yeartodate()` 函數的圖表，firstmonth 範例

`yeartodate()`yeartodate() 函數的圖表，firstmonth 範例 ![圖表顯示 yeartodate 函數會傳回 True 或 False 值的日期值。](https://help.qlik.com/zh-TW/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 |

在此例中，因為 todaydate 引數的值 03/01/2022 用於 yeartodate() 函數，所以這會將比較子日曆年區段的界限設為 2022 年 3 月 1 日。請務必提供 firstmonth 參數 (介於 1 和 2 之間)；否則，該函數會傳回 Null 值結果。

yeartodate() 函數的圖表，範例使用 todaydate 引數

yeartodate() 函數的圖表，範例使用 todaydate 引數

yeartodate()yeartodate() 函數的圖表，範例使用 todaydate 引數 ![圖表顯示 yeartodate 函數會傳回 True 或 False 值的日期值。](https://help.qlik.com/zh-TW/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 的布林值結果。

## 範例 – 圖表物件範例

[](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)

結果表格

| 日期 | =年初至今(日期) |
| --- | --- |
| 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 |

year\_to\_date 量值在圖表物件中的建立方式是使用 yeartodate() 函數並傳遞 date 欄位，作為函數的引數。

因為沒有其他參數傳遞至函數，所以 yeartodate() 函數最初會識別重新載入日期，目前日曆年 (開始於 1 月 1 日) 的界限因此會傳回 TRUE 的布林值結果。

yeartodate() 函數的圖表，圖表物件範例

yeartodate() 函數的圖表，圖表物件範例

yeartodate()yeartodate() 函數的圖表，圖表物件範例 ![圖表顯示 yeartodate 函數會傳回 True 或 False 值的日期值。](https://help.qlik.com/zh-TW/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() 圖表 ![KPI 視覺化呈現 2021 年的銷售資料，並使用 yeartodate 函數產生。](https://help.qlik.com/zh-TW/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 的布林值結果並加總金額。