# monthsname - 指令碼與圖表函數

此函數會傳回一個顯示值，代表期間月份 (根據 MonthNames 指令碼變數進行格式設定) 和年度。基礎數值相當於包含基本日期的月、雙月、季度、四月期或半年的第一毫秒的時間戳記。

語法：

MonthsName(n\_months, date[, period\_no[, first\_month\_of\_year]])

傳回的資料類型： 雙值

monthsname 函數的圖表

monthsname 函數的圖表

monthsname 函數的圖表 ![範例圖表顯示在給定特定輸入日期的情況下，透過 monthsname 函數傳回的月份範圍。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-general.png)

`monthsname()` 函數根據提供的 `n_months` 引數將該年分為幾個區段。然後這評估每個提供的 `date` 所屬的區段，並傳回該區段的開始和結束月份名稱以及該年。該函數也能夠從之前或之後的區段傳回這些邊界，以及重新定義哪個是該年的第一個月。

一年中的下列區段可作為 `n_month` 引數用於函數：

可能的 `n_month`n\_month 引數

| 期間 | 月數 |
| --- | --- |
| 月 | 1 |
| 兩個月 | 2 |
| 季 | 3 |
| 四個月 | 4 |
| 半年 | 6 |

引數

| 引數 | 描述 |
| --- | --- |
| n\_months | 定義期間的月數。整數或解析為整數的運算式，必須是下列其中一項：1 (相當於 inmonth() 函數)、2 (雙月)、3 (相當於 inquarter() 函數)、4 (四月期) 或 6 (半年)。 |
| date | 要評估的時間戳記。 |
| period\_no | 期間可以使用 period\_no 位移，是一個整數或解譯為整數的運算式，其中值 0 表示包含 base\_date 的期間。負值的 period\_no 表示之前的期間，正值表示之後的期間。 |
| first\_month\_of\_year | 如果要使用不起始於 1 月的 (會計) 年度，可在 first\_month\_of\_year 中指定介於 2 和 12 之間的值。 |

## 什麼情況下使用

若您想要向使用者提供透過所選期間比較彙總的功能，則 `monthsname()` 函數很實用。例如，您可以提供輸入變數，以讓使用者按月、季或半年查看產品的總銷售額。

這些維度的建立方式可以是新增函數作為主要行事曆表格中的欄位，以在載入指令碼中建立，或直接在圖表中建立維度作為計算維度。

函數範例

| 範例 | 結果 |
| --- | --- |
| `monthsname(4, '10/19/2013')` | 傳回「Sep-Dec 2013」。因為在此範例和其他範例中， SET Monthnames 陳述式設為 Jan;Feb;Mar，以此類推。 |
| `monthsname(4, '10/19/2013', -1)` | 傳回「May-Aug 2013」。 |
| ` monthsname(4, '10/19/2013', 0, 2)  ` | 傳回「Oct-Jan 2014」，因為該年指定以月份 2 開始。因此，四個月期間結束於下一年的第一個月。 |

## 區域設定

除非另有說明，否則此主題中的範例皆使用下列日期格式：MM/DD/YYYY。日期格式是在資料載入指令碼的 `SET DateFormat` 陳述式中指定。由於地區設定和其他因素，您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式，以滿足您的需求。或者，您可以在載入指令碼中變更格式，以符合這些範例。

應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典，資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。

## 範例 1 – 基本範例

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

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

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含：

* 包含一組 2022 年交易的資料集，這載入到稱為 `Transactions` 的表格中。

* 以 `DateFormat` 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。

* 建立欄位 `bi_monthly_range`，這將交易組成兩個月區段，並為每個交易傳回該區段的邊界名稱。

載入指令碼

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

Transactions:
    Load
        *,
        monthsname(2,date) as bi_monthly_range
        ;
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

結果

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

* `date`

* `bi_monthly_range`

結果表格

| 日期 | bi\_monthly\_range |
| --- | --- |
| 2/19/2022 | 2022 年 1 月至 2 月 |
| 3/7/2022 | 2022 年 3 月至 4 月 |
| 3/30/2022 | 2022 年 3 月至 4 月 |
| 4/5/2022 | 2022 年 3 月至 4 月 |
| 4/16/2022 | 2022 年 3 月至 4 月 |
| 5/1/2022 | 2022 年 5 月至 6 月 |
| 5/7/2022 | 2022 年 5 月至 6 月 |
| 5/22/2022 | 2022 年 5 月至 6 月 |
| 6/15/2022 | 2022 年 5 月至 6 月 |
| 6/26/2022 | 2022 年 5 月至 6 月 |
| 7/9/2022 | 2022 年 7 月至 8 月 |
| 7/22/2022 | 2022 年 7 月至 8 月 |
| 7/23/2022 | 2022 年 7 月至 8 月 |
| 7/27/2022 | 2022 年 7 月至 8 月 |
| 8/2/2022 | 2022 年 7 月至 8 月 |
| 8/8/2022 | 2022 年 7 月至 8 月 |
| 8/19/2022 | 2022 年 7 月至 8 月 |
| 9/26/2022 | 2022 年 9 月至 10 月 |
| 10/14/2022 | 2022 年 9 月至 10 月 |
| 10/29/2022 | 2022 年 9 月至 10 月 |

「`bi_monthly_range`」欄位使用 `monthsname()` 函數在前置 LOAD 陳述式中建立。提供的第一個引數為 2，將該年分為兩個月區段。第二個引數識別正在評估哪個欄位。

monthsname 函數的圖表，基本範例

monthsname 函數的圖表，基本範例

monthsname 函數的圖表，基本範例![圖表顯示使用 monthsname 函數決定交易發生月份範圍的結果。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-basic-example.png)

交易 8195 發生在 5 月 22 日。`monthsname()` 函數原本將該年分為兩個月區段。交易 8195 落在 5 月 1 日和 6 月 30 日之間的區段內。因此，該函數會以 `MonthNames` 系統變數格式傳回這些月份以及年份，即 2022 年 5 月至 6 月。

## 範例 2 – period\_no

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

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

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含：

* 與第一個範例相同的內嵌資料集和情境。

* 建立欄位 `prev_bi_monthly_range`，這將交易組成兩個月區段，並為每個交易傳回上一個區段的邊界名稱。

按需要在此新增其他文字，可附上清單等。

載入指令碼

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

Transactions:
    Load
        *,
        MonthsName(2,date,-1) as prev_bi_monthly_range
        ;
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

結果

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

* `date`

* `prev_bi_monthly_range`

結果表格

| 日期 | prev\_bi\_monthly\_range |
| --- | --- |
| 2/19/2022 | 2021 年 11 月至 12 月 |
| 3/7/2022 | 2022 年 1 月至 2 月 |
| 3/30/2022 | 2022 年 1 月至 2 月 |
| 4/5/2022 | 2022 年 1 月至 2 月 |
| 4/16/2022 | 2022 年 1 月至 2 月 |
| 5/1/2022 | 2022 年 3 月至 4 月 |
| 5/7/2022 | 2022 年 3 月至 4 月 |
| 5/22/2022 | 2022 年 3 月至 4 月 |
| 6/15/2022 | 2022 年 3 月至 4 月 |
| 6/26/2022 | 2022 年 3 月至 4 月 |
| 7/9/2022 | 2022 年 5 月至 6 月 |
| 7/22/2022 | 2022 年 5 月至 6 月 |
| 7/23/2022 | 2022 年 5 月至 6 月 |
| 7/27/2022 | 2022 年 5 月至 6 月 |
| 8/2/2022 | 2022 年 5 月至 6 月 |
| 8/8/2022 | 2022 年 5 月至 6 月 |
| 8/19/2022 | 2022 年 5 月至 6 月 |
| 9/26/2022 | 2022 年 7 月至 8 月 |
| 10/14/2022 | 2022 年 7 月至 8 月 |
| 10/29/2022 | 2022 年 7 月至 8 月 |

在此範例中，-1 作為 `monthsname()` 函數中的 `period_no` 引數使用。原本將年分為兩個月區段後，該函數就會針對交易發生時間傳回上一個區段邊界。

monthsname 函數的圖表，period\_no 範例

monthsname 函數的圖表，period\_no 範例

monthsname 函數的圖表，period\_no 範例![圖表顯示使用 monthsname 函數決定交易發生月份範圍的結果。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-example-period-no.png)

交易 8195 發生在 5 月 和 6 月 之間的區段內。因此，上一個兩個月區段為 3 月 1 日和 4 月 30 日之間，因此該函數會傳回 2022 年 3 月至 4 月。

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

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

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

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含：

* 與第一個範例相同的內嵌資料集和情境。

* 建立不同的欄位 `bi_monthly_range`，這將交易組成兩個月區段，並為每個交易傳回區段邊界。

不過，在此範例中，我們也需要將 4 月設定為會計年度的第一個月。

載入指令碼

```
SET DateFormat='MM/DD/YYYY';
						
Transactions:
    Load
        *,
        MonthsName(2,date,0,4) as bi_monthly_range
        ;
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

結果

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

* `date`

* `bi_monthly_range`

結果表格

| 日期 | bi\_monthly\_range |
| --- | --- |
| 2/19/2022 | 2021 年 2 月至 3 月 |
| 3/7/2022 | 2021 年 2 月至 3 月 |
| 3/30/2022 | 2021 年 2 月至 3 月 |
| 4/5/2022 | 2022 年 4 月至 5 月 |
| 4/16/2022 | 2022 年 4 月至 5 月 |
| 5/1/2022 | 2022 年 4 月至 5 月 |
| 5/7/2022 | 2022 年 4 月至 5 月 |
| 5/22/2022 | 2022 年 4 月至 5 月 |
| 6/15/2022 | 2022 年 6 月至 7 月 |
| 6/26/2022 | 2022 年 6 月至 7 月 |
| 7/9/2022 | 2022 年 6 月至 7 月 |
| 7/22/2022 | 2022 年 6 月至 7 月 |
| 7/23/2022 | 2022 年 6 月至 7 月 |
| 7/27/2022 | 2022 年 6 月至 7 月 |
| 8/2/2022 | 2022 年 8 月至 9 月 |
| 8/8/2022 | 2022 年 8 月至 9 月 |
| 8/19/2022 | 2022 年 8 月至 9 月 |
| 9/26/2022 | 2022 年 8 月至 9 月 |
| 10/14/2022 | 2022 年 10 月至 11 月 |
| 10/29/2022 | 2022 年 10 月至 11 月 |

若使用 4 作為 `monthsname()` 函數中的 `first_month_of_year` 引數，該函數會讓該年從 4 月 1 日開始，然後將該年分為兩個月區段：4 月至 5 月、6 月至 7 月、8 月至 9 月、10 月至 11 月、12 月至 1 月、2 月至 3 月。

結果的段落文字。

交易 8195 發生在 5 月 22 日並落在 4 月 1 日和 5 月 31 日之間的區段內。因此，該函數會傳回 2022 年 4 月至 5 月。

monthsname 函數的圖表，first\_month\_of\_year 範例

monthsname 函數的圖表，first\_month\_of\_year 範例

monthsname 函數的圖表，first\_month\_of\_year 範例![圖表顯示使用 monthsname 函數決定交易發生月份範圍的結果。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-example-first-month-of-year.png)

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

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

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

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含與第一個範例相同的內嵌資料集和情境。不過，在此範例中，不變的資料集會載入到應用程式中。會建立將交易組成兩個月區段並為每個交易傳回區段邊界的計算，作為應用程式圖表物件中的量值。

載入指令碼

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

Transactions:
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

結果

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

建立下列量值：

=monthsname(2,date)

結果表格

| 日期 | =monthsname(2,date) |
| --- | --- |
| 2/19/2022 | 2022 年 1 月至 2 月 |
| 3/7/2022 | 2022 年 3 月至 4 月 |
| 3/30/2022 | 2022 年 3 月至 4 月 |
| 4/5/2022 | 2022 年 3 月至 4 月 |
| 4/16/2022 | 2022 年 3 月至 4 月 |
| 5/1/2022 | 2022 年 5 月至 6 月 |
| 5/7/2022 | 2022 年 5 月至 6 月 |
| 5/22/2022 | 2022 年 5 月至 6 月 |
| 6/15/2022 | 2022 年 5 月至 6 月 |
| 6/26/2022 | 2022 年 5 月至 6 月 |
| 7/9/2022 | 2022 年 7 月至 8 月 |
| 7/22/2022 | 2022 年 7 月至 8 月 |
| 7/23/2022 | 2022 年 7 月至 8 月 |
| 7/27/2022 | 2022 年 7 月至 8 月 |
| 8/2/2022 | 2022 年 7 月至 8 月 |
| 8/8/2022 | 2022 年 7 月至 8 月 |
| 8/19/2022 | 2022 年 7 月至 8 月 |
| 9/26/2022 | 2022 年 9 月至 10 月 |
| 10/14/2022 | 2022 年 9 月至 10 月 |
| 10/29/2022 | 2022 年 9 月至 10 月 |

會使用 monthsname() 函數在圖表物件中建立 bi\_monthly\_range 欄位作為量值。提供的第一個引數為 2，將該年分為兩個月區段。第二個引數識別正在評估哪個欄位。

monthsname 函數的圖表，圖表物件範例

monthsname 函數的圖表，圖表物件範例

monthsname 函數的圖表，圖表物件範例![圖表顯示透過圖表物件使用 monthsname 函數的結果。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsname-example-chart-object.png)

交易 8195 發生在 5 月 22 日。monthsname() 函數原本將該年分為兩個月區段。交易 8195 落在 5 月 1 日和 6 月 30 日之間的區段內。因此，該函數會以 MonthNames 系統變數格式傳回這些月份以及年份，即 2022 年 5 月至 6 月。

## 範例 5 – 情境

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

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

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含：

* 包含 2022 年交易的資料集，這載入到稱為 Transactions 的表格中。

* 以 DateFormat 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。

最終使用者希望圖表物件按自己選擇的期間顯示總銷售額。即使此維度無法用於資料模型，這仍可以達成，方法是使用 monthsname() 函數作為透過變數輸入控制所動態修改的計算維度。

載入指令碼

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

Transactions:
Load
*
Inline
[
id,date,amount
8188,'1/7/2022',17.17
8189,'1/19/2022',37.23
8190,'2/28/2022',88.27
8191,'2/5/2022',57.42
8192,'3/16/2022',53.80
8193,'4/1/2022',82.06
8194,'5/7/2022',40.39
8195,'5/16/2022',87.21
8196,'6/15/2022',95.93
8197,'6/26/2022',45.89
8198,'7/9/2022',36.23
8199,'7/22/2022',25.66
8200,'7/23/2022',82.77
8201,'7/27/2022',69.98
8202,'8/2/2022',76.11
8203,'8/8/2022',25.12
8204,'8/19/2022',46.23
8205,'9/26/2022',84.21
8206,'10/14/2022',96.24
8207,'10/29/2022',67.67
];
```

結果

載入資料並開啟工作表。

在載入指令碼開頭，已建立將會與變數輸入控制繫結的變數 (vPeriod)。接下來，設定變數作為工作表中的自訂物件。

請執行下列動作：

1. 在資產面板中，按一下自訂物件。

2. 選取 Qlik 儀表板搭售，並建立變數輸入物件。

3. 輸入圖表物件的標題。

4. 在變數之下，選取 vPeriod 作為名稱並設定物件以顯示為下拉式清單。

5. 在值之下，設定物件以使用動態值。輸入下列內容：

   ='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'

接下來，建立結果表格。

請執行下列動作：

1. 建立新的表格並新增下列計算維度：

   =monthsname($(vPeriod),date)

2. 新增此量值以計算總銷售額：

   =sum(amount)

3. 將量值的數字格式設定為金錢。按一下the 完成編輯 icon。您現在可以調整變數物件中的時間區段，以修改顯示在表格中的資料。

這是結果表格在選取 tertial 選項時看起來的樣子：

結果表格

| monthsname($(vPeriod),date) | =sum(amount) |
| --- | --- |
| 2022 年 1 月至 4 月 | 253.89 |
| 2022 年 5 月至 8 月 | 713.58 |
| 2022 年 9 月至 12 月 | 248.12 |