# monthsstart - 指令碼與圖表函數

此函數傳回的值相當於包含基本日期的月、雙月、季度、四月期或半年的第一毫秒的時間戳記。還可以尋找前一個或後一個時間期間的時間戳記。預設格式是指令碼中設定的 DateFormat。

語法：

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

傳回的資料類型： 雙值

`monthsstart()` 函數的圖表

`monthsstart()` 函數的圖表

`monthsstart()`monthsstart() 函數的圖表 ![範例圖表顯示函數的每個元素如何共同運作，以傳回時間戳記結果。](https://help.qlik.com/zh-TW/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsstart-general.png)

`monthsstart()` 函數根據提供的 `n_months` 引數將該年分為幾個區段。然後這會評估提供的每個日期落在哪些區段，並以日期格式傳回該區段的第一毫秒。該函數也能夠從之前或之後的區段傳回開始時間戳記，以及重新定義哪個是該年的第一個月。

一年中的下列區段可作為 `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 之間的值。 |

## 使用情境

`monthsstart()` 函數通常在使用者想要計算以使用一個期間中尚未發生的部分時，作為運算式的一部分使用。例如，這可以用來提供輸入變數，以讓使用計算該月、該季或半年期間目前已累積的總利息。

函數範例

| 範例 | 結果 |
| --- | --- |
| `monthsstart(4, '10/19/2013')` | 傳回 09/01/2013。 |
| `monthsstart(4, '10/19/2013, -1)` | 傳回 05/01/2013。 |
| `monthsstart(4, '10/19/2013', 0, 2<br>)` | 傳回 10/01/2013，因為年開始變成月份 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/monthsstart.htm)

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

概述

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

載入指令碼包含：

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

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

* 建立欄位 `bi_monthly_start`，這將交易組成兩個月區段，並為每個交易傳回該區段的開始時間戳記。

載入指令碼

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

Transactions:
    Load
        *,
        monthsstart(2,date) as bi_monthly_start,
        timestamp(monthsstart(2,date)) as bi_monthly_start_timestamp
        ;
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_start`

* `bi_monthly_start_timestamp`

結果表格

| 日期 | bi\_monthly\_start | bi\_monthly\_start\_timestamp |
| --- | --- | --- |
| 2/19/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 3/7/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 3/30/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 4/5/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 4/16/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 5/1/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 5/22/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 6/15/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 6/26/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 7/9/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 7/22/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 7/23/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 7/27/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 8/2/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 8/8/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 8/19/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 9/26/2022 | 09/01/2022 | 9/1/2022 12:00:00 AM |
| 10/14/2022 | 09/01/2022 | 9/1/2022 12:00:00 AM |
| 10/29/2022 | 09/01/2022 | 9/1/2022 12:00:00 AM |

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

`monthsstart()` 函數的圖表，無其他引數的範例

`monthsstart()` 函數的圖表，無其他引數的範例

`monthsstart()`monthsstart() 函數的圖表，無其他引數的範例![圖表顯示使用 monthsstart 函數決定交易發生該年區段的結果。](https://help.qlik.com/zh-TW/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsstart-example-no-add-arg.png)

交易 8195 發生在 5 月 22 日。`monthsstart()` 函數原本將該年分為兩個月區段。交易 8195 落在 5 月 1 日和 6 月 30 日之間的區段內。因此，該函數傳回此區段的第一毫秒 2022 年 5 月 1 日 12:00:00 AM。

## 範例 2 – period\_no

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

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

概述

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

載入指令碼包含：

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

* 建立欄位「`prev_bi_monthly_start`」，這傳回交易發生之前的兩個月區段的第一毫秒。

載入指令碼

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

Transactions:
    Load
        *,
        monthsstart(2,date,-1) as prev_bi_monthly_start,
	    timestamp(monthsstart(2,date,-1)) as prev_bi_monthly_start_timestamp
	    ;
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_start`

* `prev_bi_monthly_start_timestamp`

結果表格

| 日期 | prev\_bi\_monthly\_start | prev\_bi\_monthly\_start\_timestamp |
| --- | --- | --- |
| 2/19/2022 | 11/01/2021 | 11/1/2021 12:00:00 AM |
| 3/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 3/30/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 4/5/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 4/16/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
| 5/1/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 5/7/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 5/22/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 6/15/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 6/26/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 7/9/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 7/22/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 7/23/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 7/27/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 8/2/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 8/8/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 8/19/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 9/26/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 10/14/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 10/29/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |

透過使用 -1 作為 `monthsstart()` 函數中的 `period_no` 引數，原本將年分為兩個月區段後，該函數就會針對交易發生時間傳回上一個兩個月區段的第一毫秒。

`monthsstart()` 函數的圖表，period\_no 範例

`monthsstart()` 函數的圖表，period\_no 範例

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

交易 8195 發生在 5 月 和 6 月 之間的區段內。因此，上一個兩個月區段介於 3 月 1 日和 4 月 30 日之間，所以該函數會傳回此區段的第一毫秒 2022 年 3 月 1 日 12:00:00 AM。

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

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

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

概述

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

載入指令碼包含：

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

* 建立欄位 `bi_monthly_start`，這將交易組成兩個月區段，並為每個交易傳回該設定的開始時間戳記。

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

載入指令碼

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

Transactions:
    Load
        *,
        monthsstart(2,date,0,4) as bi_monthly_start,
        timestamp(monthsstart(2,date,0,4)) as bi_monthly_start_timestamp
        ;
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
];
```

結果

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

* `date`

* `bi_monthly_start`

* `bi_monthly_start_timestamp`

結果表格

| 日期 | bi\_monthly\_start | bi\_monthly\_start\_timestamp |
| --- | --- | --- |
| 2/19/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
| 3/7/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
| 3/30/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
| 4/5/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 4/16/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 5/1/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 5/7/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 5/22/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
| 6/15/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM |
| 6/26/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM |
| 7/9/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM |
| 7/22/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM |
| 7/23/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM |
| 7/27/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM |
| 8/2/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 8/8/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 8/19/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 9/26/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
| 10/29/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |

若使用 4 作為 `monthsstart()` 函數中的 `first_month_of_year` 引數，該函數會讓該年從 4 月 1 日開始，然後將該年分為兩個月區段：Apr-May,Jun-Jul,Aug-Sep,Oct-Nov,Dec-Jan,Feb-Mar。

`monthsstart()` 函數的圖表，first\_month\_of\_year 範例

`monthsstart()` 函數的圖表，first\_month\_of\_year 範例

`monthsstart()`monthsstart() 函數的圖表，first\_month\_of\_year 範例![圖表顯示使用 monthsstart 函數決定交易發生該年區段的結果。](https://help.qlik.com/zh-TW/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsstart-example-first-mth-yr.png)

交易 8195 發生在 5 月 22 日並落在 4 月 1 日和 5 月 31 日之間的區段內。因此，該函數傳回此區段的第一毫秒 2022 年 4 月 1 日 12:00:00 AM。

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

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

建立下列量值：

=monthsstart(2,date)

=timestamp(monthsstart(2,date))

這些計算將擷取每個交易發生之兩個月區段的開始時間戳記。

結果表格

| 日期 | =monthsstart(2,date) | =timestamp(monthsstart(2,date)) |
| --- | --- | --- |
| 9/26/2022 | 09/01/2022 | 9/1/2022 12:00:00 AM |
| 10/14/2022 | 09/01/2022 | 9/1/2022 12:00:00 AM |
| 10/29/2022 | 09/01/2022 | 9/1/2022 12:00:00 AM |
| 7/9/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 7/22/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 7/23/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 7/27/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 8/2/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 8/8/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 8/19/2022 | 07/01/2022 | 7/1/2022 12:00:00 AM |
| 5/1/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 5/22/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 6/15/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 6/26/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
| 3/7/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 3/30/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 4/5/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 4/16/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM |
| 2/19/2022 | 01/01/2022 | 1/1/2021 12:00:00 AM |

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

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

monthsstart()monthsstart() 函數的圖表，圖表物件範例![圖表顯示使用 monthsstart 函數決定交易發生該年區段的結果。](https://help.qlik.com/zh-TW/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthsstart-example-chart-object.png)

交易 8195 發生在 5 月 22 日。monthsstart() 函數原本將該年分為兩個月區段。交易 8195 落在 5 月 1 日和 6 月 30 日之間的區段內。因此，該函數傳回此區段的第一毫秒 05/01/2022 12:00:00 AM。

## 範例 5 – 情境

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

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

概述

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

載入指令碼包含：

* 資料集包含一系列貸款餘額，其位於稱為 Loans 的表格。

* 資料包含貸款 ID、月份開始餘額以及每年對每項貸款收取的單利率。

最終使用者希望圖表物件按貸款 ID 顯示所選期間每筆貸款已累積的目前利息。會計年度於 1 月開始。

載入指令碼

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

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

結果

載入資料並開啟工作表。

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

請執行下列動作：

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

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

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

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

5. 在值之下，設定物件以使用動態值。輸入下列內容：  
   ='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'

接下來，建立結果表格。

請執行下列動作：

1. 建立新的表格。新增下列欄位作為維度。

   * employee\_id

   * employee\_name

2. 建立量值以計算累積的利息：

   =start\_balance\*(rate\*(today(1)-monthsstart($(vPeriod),today(1)))/365)

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

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

結果表格

| loan\_id | start\_balance | =start\_balance\*(rate\*(today(1)-monthsstart($(vPeriod),today(1)))/365) |
| --- | --- | --- |
| 8188 | $10000.00 | $7.95 |
| 8189 | $15000.00 | $67.93 |
| 8190 | $17500.00 | $33.37 |
| 8191 | $21000.00 | $56.73 |
| 8192 | $90000.00 | $600.66 |

monthsstart() 函數使用使用者輸入作為第一引數並使用今日日期作為第二引數，傳回使用者所選期間的開始日期。以目前日期減去該結果後，運算式會傳回此期間目前已經過的天數。

然後此值乘以利率並除以 365，以傳回此期間產生的有效利率。然後該結果乘以貸款的開始餘額，以傳回此期間目前已累積的利息。