# weekyear 指令碼與圖表函數

此函數會根據環境變數傳回週數所屬於的年份。週數的範圍介於 1 和約 52 之間。

語法：

weekyear(timestamp [, first\_week\_day [, broken\_weeks [, reference\_day]]])

傳回的資料類型： 整數

引數

| 引數 | 描述 |
| --- | --- |
| timestamp | 要評估的時間戳記。 |
| first\_week\_day | 指定一週開始的日子。如果忽略，將使用變數 FirstWeekDay 的值。<br><br>first\_week\_day 可能的值是對星期一使用 0、對星期二使用 1，對星期三使用 2，對星期四使用 3，對星期五使用 4，對星期六使用 5，並對星期日使用 6。<br><br>如需系統變數的更多資訊，請參閱 [FirstWeekDay](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm)。 |
| broken\_weeks | 如果您未指定 broken\_weeks，則變數 BrokenWeeks 的值將用於定義週是否中斷。<br><br>如需系統變數的更多資訊，請參閱 [BrokenWeeks](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/BrokenWeeks.htm) |
| reference\_day | 如果您不指定 reference\_day，變數 ReferenceDay 的值將用於定義要設定一月份的哪一天為參照日以定義第 1 週。依照預設，Qlik Sense 函數使用 4 作為參照日。這表示第 1 週必須包含 1 月 4 日，或者換言之，第 1 週必須始終至少在 1 月擁有 4 日。<br><br>如需系統變數的更多資訊，請參閱 [ReferenceDay](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/ReferenceDay.htm) |

`weekyear()` 函數判定日期落在一年中的哪一週。然後這會傳回與該週數對應的年份。

若 `BrokenWeeks` 設定為 `0` (false)，`weekyear()` 將會傳回與 `year()` 相同的內容。

`weekyear()` 函數範圍的圖表

`weekyear()` 函數範圍的圖表

`weekyear()`weekyear() 函數範圍的圖表 ![顯示 weekyear() 函數評估的時間範圍的圖表。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekyear-diagram1.png)

但是，若 `BrokenWeeks` 系統變數設為使用未中斷的週，第 1 週只能根據 `ReferenceDay` 系統變數中指定的值，包含 1 月中的特定天數。

例如，若使用 `ReferenceDay` 的值 `4`，第 1 週只能至少包括 1 月中的四天。第 1 週有可能包括前一年 12 月的日期，或是一年最後一週的數字有可能包括下一年 1 月的日期。在此類情況下，`weekyear()` 函數會傳回 `year()` 函數的不同值。

使用未中斷的週時，`weekyear()` 函數範圍的圖表

使用未中斷的週時，`weekyear()` 函數範圍的圖表

使用未中斷的週時，`weekyear()`weekyear() 函數範圍的圖表 ![顯示 weekyear() 函數如何處理未中斷的週的圖表。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekyear-diagram2.png)

何時使用 weekyear

若您想要按年份比較彙總，則 `weekyear()` 函數很實用。例如，若您想要按年份查看產品的總銷售額。若使用者想要在 應用程式 中保留與 `BrokenWeeks` 系統變數的一致性，即會選擇 `weekyear()` 函數，而不是 `year()`。

## 區域設定

除非另有說明，否則此主題中的範例皆使用下列日期格式：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)。

函數範例

| 範例 | 結果 |
| --- | --- |
| `weekyear('12/30/1996',0,0,4)` | 傳回 1997，因為 1997 年第 1 週開始於 12/30/1996 |
| `weekyear('01/02/1997',0,0,4)` | 傳回 1997 |
| `weekyear('12/28/1997',0,0,4)` | 傳回 1997 |
| `weekyear('12/30/1997',0,0,4)` | 傳回 1998，因為 1998 年第 1 週開始於 12/29/1997 |
| `weekyear('01/02/1999',0,0,4)` | 傳回 1998，因為 1998 年第 53 週結束於 01/03/1999 |

相關主題

| 主題 | 互動 |
| --- | --- |
| [week 指令碼與圖表函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/week.htm) | 傳回根據 ISO 8601 代表週數的整數 |
| [year 指令碼與圖表函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/year.htm) | 當運算式根據標準數字解譯的方式可解譯為日期時，傳回代表年份的整數。 |

## 範例 1 - 中斷的週

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一組 2020 年最後一週和 2021 年第一週交易的資料集，這載入到稱為「`Transactions`」的表格中。

* 設為 1 的 `BrokenWeeks` 變數。

* 前置載入包含下列內容：

  * 設為欄位「`week_year`」的 `weekyear()` 函數，傳回交易發生的年份。

  * 設為欄位「`week`」的 `week()` 函數，顯示每個交易日期的週數。

載入指令碼

```
SET BrokenWeeks=1; 
						
Transactions: 
	Load 
       *, 
       week(date) as week, 
       weekyear(date) as week_year 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8176,12/28/2020,19.42 
8177,12/29/2020,23.80 
8178,12/30/2020,82.06 
8179,12/31/2020,40.56 
8180,01/01/2021,37.23 
8181,01/02/2021,17.17 
8182,01/03/2021,88.27 
8183,01/04/2021,57.42
8184,01/05/2021,67.42 
8185,01/06/2021,23.80 
8186,01/07/2021,82.06 
]; 
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `id`
* `date`
* `week`
* `week_year`

結果表格

| id | 日期 | 週 | weekyear |
| --- | --- | --- | --- |
| 8176 | 12/28/2020 | 53 | 2020 |
| 8177 | 12/29/2020 | 53 | 2020 |
| 8178 | 12/30/2020 | 53 | 2020 |
| 8179 | 12/31/2020 | 53 | 2020 |
| 8180 | 01/01/2021 | 1 | 2021 |
| 8181 | 01/02/2021 | 1 | 2021 |
| 8182 | 01/03/2021 | 2 | 2021 |
| 8183 | 01/04/2021 | 2 | 2021 |
| 8184 | 01/05/2021 | 2 | 2021 |
| 8185 | 01/06/2021 | 2 | 2021 |
| 8186 | 01/07/2021 | 2 | 2021 |

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

`BrokenWeeks` 系統變數設為 `1`，表示應用程式使用中斷的週。第 1 週開始於 1 月 1 日。

使用中斷的週時，`weekyear()` 函數範圍的圖表

使用中斷的週時，`weekyear()` 函數範圍的圖表

使用中斷的週時，`weekyear()`weekyear() 函數範圍的圖表 ![顯示 weekyear() 函數識別交易 8181 發生在第 1 週並傳回 2021 年該週年份的圖表。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekyear-examples1_and3-diagram.png)

交易 8181 發生在 1 月 2 日，亦即第 1 週的一部分。因此，這會傳回「`week_year`」欄位在 2021 年的值。

## 範例 2 - 未中斷的週

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一組 2020 年最後一週和 2021 年第一週交易的資料集，這載入到稱為「`Transactions`」的表格中。

* 設定為「`0`」的 `BrokenWeeks` 變數。

* 前置載入包含下列內容：

  * 設為「`week_year`」的 `weekyear()` 函數，傳回交易發生的年份。

  * 設為欄位「`week`」的 `week()` 函數，顯示每個交易日期的週數。

但是在此範例中，公司政策會使用未中斷的週。

載入指令碼

```
SET BrokenWeeks=0; 
						
Transactions: 
	Load 
       *, 
       week(date) as week, 
       weekyear(date) as week_year 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8176,12/28/2020,19.42 
8177,12/29/2020,23.80 
8178,12/30/2020,82.06 
8179,12/31/2020,40.56 
8180,01/01/2021,37.23 
8181,01/02/2021,17.17 
8182,01/03/2021,88.27 
8183,01/04/2021,57.42
8184,01/05/2021,67.42 
8185,01/06/2021,23.80 
8186,01/07/2021,82.06 
]; 
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `id`
* `date`
* `week`
* `week_year`

結果表格

| id | 日期 | 週 | weekyear |
| --- | --- | --- | --- |
| 8176 | 12/28/2020 | 53 | 2020 |
| 8177 | 12/29/2020 | 53 | 2020 |
| 8178 | 12/30/2020 | 53 | 2020 |
| 8179 | 12/31/2020 | 53 | 2020 |
| 8180 | 01/01/2021 | 53 | 2020 |
| 8181 | 01/02/2021 | 53 | 2020 |
| 8182 | 01/03/2021 | 1 | 2021 |
| 8183 | 01/04/2021 | 1 | 2021 |
| 8184 | 01/05/2021 | 1 | 2021 |
| 8185 | 01/06/2021 | 1 | 2021 |
| 8186 | 01/07/2021 | 1 | 2021 |

`BrokenWeeks` 系統變數設為 `0`，表示應用程式使用未中斷的週。因此，第 1 週不需要開始於 1 月 1 日。

2020 年第 53 週延續至 2021 年 1 月 2 日結束，而 2020 年第 1 週開始於 2021 年 1 月 3 日星期日。

使用未中斷的週時，`weekyear()` 函數範圍的圖表

使用未中斷的週時，`weekyear()` 函數範圍的圖表

使用未中斷的週時，`weekyear()`weekyear() 函數範圍的圖表 ![顯示 weekyear() 函數如何處理未中斷的週，且第 53 週有 2020 年和 2021 年日期的圖表。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekyear-example2-diagram.png)

交易 8181 發生在 1 月 2 日，亦即第 1 週的一部分。因此，這會傳回「`week_year`」欄位在 2021 年的值。

## 範例 3 – 圖表物件範例

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

#### 載入指令碼和圖表運算式

概述

使用與第一個範例相同的資料集和情境。

不過，在此範例中，資料集保持不變並且會載入到應用程式中。會建立傳回交易發生年份週數的計算，作為應用程式圖表中的量值。

載入指令碼

```
SET BrokenWeeks=1; 
						
Transactions: 
Load 
* 
Inline  
[ 
id,date,amount 
8176,12/28/2020,19.42 
8177,12/29/2020,23.80 
8178,12/30/2020,82.06 
8179,12/31/2020,40.56 
8180,01/01/2021,37.23 
8181,01/02/2021,17.17 
8182,01/03/2021,88.27 
8183,01/04/2021,57.42
8184,01/05/2021,67.42 
8185,01/06/2021,23.80 
8186,01/07/2021,82.06 
]; 
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* `id`
* `date`

若要計算交易發生的週，建立下列量值：

* `=week(date)`

若要根據週數計算交易發生的年份，建立下列量值：

* `=weekyear(date)`

結果表格

| id | 日期 | 週 | weekyear |
| --- | --- | --- | --- |
| 8176 | 12/28/2020 | 53 | 2020 |
| 8177 | 12/29/2020 | 53 | 2020 |
| 8178 | 12/30/2020 | 53 | 2020 |
| 8179 | 12/31/2020 | 53 | 2020 |
| 8180 | 01/01/2021 | 1 | 2021 |
| 8181 | 01/02/2021 | 1 | 2021 |
| 8182 | 01/03/2021 | 2 | 2021 |
| 8183 | 01/04/2021 | 2 | 2021 |
| 8184 | 01/05/2021 | 2 | 2021 |
| 8185 | 01/06/2021 | 2 | 2021 |
| 8186 | 01/07/2021 | 2 | 2021 |

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

`BrokenWeeks` 系統變數設為 `1`，表示應用程式使用中斷的週，且第 1 週開始於 1 月 1 日。

使用中斷的週時，`weekyear()` 函數範圍的圖表

使用中斷的週時，`weekyear()` 函數範圍的圖表

使用中斷的週時，`weekyear()`weekyear() 函數範圍的圖表 ![顯示 weekyear() 函數識別交易 8181 發生在第 1 週並傳回 2021 年該週年份的圖表。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekyear-examples1_and3-diagram.png)

交易 8181 發生在 1 月 2 日，亦即第 1 週的一部分。因此，這會傳回「`week_year`」欄位在 2021 年的值。

## 範例 4 – 情境

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一組 2020 年最後一週和 2021 年第一週交易的資料集，這載入到稱為「`Transactions`」的表格中。

* 設定為「`0`」的 `BrokenWeeks` 變數。這表示應用程式會使用未中斷的週。

* 設定為「`2`」的 `ReferenceDay` 變數。這表示該年開始於 1 月 2 日，並至少包含 1 月中的兩天。

* 設定為「`1`」的 `FirstWeekDay` 變數。這表示每週第一天是星期二。

公司政策會使用中斷的週。最終使用者希望圖表按年份呈現總銷售額。應用程式使用未中斷的週，且第 1 週至少包含 1 月中的兩天。

載入指令碼

```
SET BrokenWeeks=0; 
SET ReferenceDay=2; 
SET FirstWeekDay=1; 
 
Transactions: 
Load 
* 
Inline  
[ 
id,date,amount 
8176,12/28/2020,19.42 
8177,12/29/2020,23.80 
8178,12/30/2020,82.06 
8179,12/31/2020,40.56 
8180,01/01/2021,37.23 
8181,01/02/2021,17.17 
8182,01/03/2021,88.27 
8183,01/04/2021,57.42 
8184,01/05/2021,67.42 
8185,01/06/2021,23.80 
8186,01/07/2021,82.06 
]; 
```

結果

載入資料並開啟工作表。建立新的表格。

若要根據週數計算交易發生的年份，建立下列量值：

* `=weekyear(date)`

若要計算總銷售額，建立下列量值：

* `sum(amount)`

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

結果表格

| weekyear(date) | =sum(amount) |
| --- | --- |
| 2020 | 19.42 |
| 2021 | 373.37 |