monthstart  - 指令碼與圖表函數
                此函數傳回的值相當於包含 date 的月份第一天、第一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat。
語法:
MonthStart(date[, period_no])
傳回的資料類型: 雙值
monthstart() 函數的圖表

monthstart() 函數判定日期落在哪個月。然後以日期格式傳回該月第一毫秒的時間戳記。
| 引數 | 描述 | 
|---|---|
| date | 要評估的時間戳記。 | 
| period_no | period_no 是一個整數,如果為 0 或忽略,則表示包含 date 的月份。負值的 period_no 表示之前的月份,正值表示之後的月份。 | 
什麼情況下使用
monthstart() 函數通常在使用者想要計算使用一個月中已經過的部分時,作為運算式的一部分使用。例如,這可用於計算截至特定日期之月份內已累積的利息。
| 範例 | 結果 | 
|---|---|
| monthstart('10/19/2001') | 傳回 10/01/2001。 | 
| monthstart('10/19/2001', -1) | 傳回 09/01/2001。 | 
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。如需詳細資訊,請參閱 修改用於應用程式和指令碼的區域設定。
應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。
若您是應用程式建立者,可以為您建立的應用程式設定預設地區。如需詳細資訊,請參閱Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定。
範例 1 – 無其他引數
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
- 
                                    
包含一組 2022 年交易的資料集,這載入到稱為 Transactions 的表格中。
 - 
                                    
以 DateFormat 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。
 - 
                                    
建立欄位 start_of_month,這傳回交易發生該月開始的時間戳記。
 
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
    Load
        *,
        monthstart(date) as start_of_month,
        timestamp(monthstart(date)) as start_of_month_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
 - 
                                    
start_of_month
 - 
                                    
start_of_month_timestamp
 
| 日期 | start_of_month | start_of_month_timestamp | 
|---|---|---|
| 1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM | 
| 1/19/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM | 
| 2/5/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM | 
| 2/28/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM | 
| 3/16/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM | 
| 4/1/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM | 
| 5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM | 
| 5/16/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM | 
| 6/15/2022 | 06/01/2022 | 6/1/2022 12:00:00 AM | 
| 6/26/2022 | 07/01/2022 | 6/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 | 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 | 09/01/2022 | 9/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 | 
start_of_month 欄位在前置 LOAD 陳述式中的建立方式是使用 monthstart() 函數並傳遞日期欄位,作為函數的引數。
monthstart() 函數識別日期值落在哪個月,並傳回該月第一毫秒的時間戳記。
monthstart() 函數的圖表,無其他引數的範例

交易 8192 發生於 3 月 16 日。monthstart() 函數傳回該月的第一毫秒,亦即 3 月 1 日上午 12:00:00。
範例 2 – period_no
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
- 
                                    
與第一個範例相同的資料集和情境。
 - 
                                    
建立欄位 previous_month_start,這傳回交易發生的前一個月開始的時間戳記。
 
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
    Load
        *,
        monthstart(date,-1) as previous_month_start,
        timestamp(monthstart(date,-1)) as previous_month_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
 - 
                                    
previous_month_start
 - 
                                    
previous_month_start_timestamp
 
| 日期 | previous_month_start | previous_month_start_timestamp | 
|---|---|---|
| 1/7/2022 | 12/01/2021 | 12/1/2021 12:00:00 AM | 
| 1/19/2022 | 12/01/2021 | 12/1/2021 12:00:00 AM | 
| 2/5/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM | 
| 2/28/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM | 
| 3/16/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM | 
| 4/1/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM | 
| 5/7/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM | 
| 5/16/2022 | 04/01/2022 | 4/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 | 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 | 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 | 08/01/2022 | 8/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 | 
在此例中,因為 period_no 的值 -1 已作為 monthstart() 函數中的偏移引數使用,所以該函數首先會識別交易發生的月份。然後這會往前偏移一個月並識別該月的第一毫秒。
monthstart() 函數的圖表,period_no 範例

交易 8192 發生於 3 月 16 日。monthstart() 函數識別交易發生的前一個月為 2 月。然後這會傳回該月的第一毫秒 2 月 1 日 12:00:00 AM。
範例 3 – 圖表物件範例
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。
不過,在此範例中,不變的資料集會載入到應用程式中。會建立傳回交易發生月份開始時間戳記的計算,作為應用程式圖表物件中的量值。
載入指令碼
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
];結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: date。
若要計算交易發生的該月開始日期,建立下列量值:
- 
                                    
=monthstart(date)
 - =timestamp(monthstart(date))
 
| 日期 | =monthstart(date) | =timestamp(monthstart(date)) | 
|---|---|---|
| 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 | 
| 9/26/2022 | 09/01/2022 | 9/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 | 
| 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 | 
| 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 | 
| 5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM | 
| 5/16/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM | 
| 4/1/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM | 
| 3/16/2022 | 03/01/2022 | 3/1/2022 12:00:00 AM | 
| 2/5/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM | 
| 2/28/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM | 
| 1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM | 
| 1/19/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM | 
start_of_month 量值在圖表物件中的建立方式是使用 monthstart() 函數並傳遞日期欄位,作為函數的引數。
monthstart() 函數識別日期值落在哪個月,並傳回該月第一毫秒的時間戳記。
monthstart() 函數的圖表,圖表物件範例

交易 8192 發生於 3 月 16 日。monthstart() 函數識別交易發生在 3 月,並傳回該月的第一毫秒,亦即 3 月 1 日上午 12:00:00。
範例 4 – 情境
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。
載入指令碼包含:
- 
                                    
資料集包含一系列貸款餘額,其位於稱為 Loans 的表格。
 - 
                                    
資料包含貸款 ID、月份開始餘額以及每年對每項貸款收取的單利率。
 
最終使用者希望圖表物件按貸款 ID 顯示月初至今每筆貸款已累積的目前利息。
載入指令碼
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
];結果
請執行下列動作:
- 
                                    
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
- 
                                            
loan_id
 - 
                                            
start_balance
 
 - 
                                            
 - 
                                    
接下來,建立量值以計算累積的利息:
=start_balance*(rate*(today(1)-monthstart(today(1)))/365)
 - 
                                    
將量值的數字格式設定為金錢。
 
| loan_id | start_balance | =start_balance*(rate*(today(1)-monthstart(today(1)))/365) | 
|---|---|---|
| 8188 | $10000.00 | $16.44 | 
| 8189 | $15000.00 | $58.56 | 
| 8190 | $17500.00 | $28.77 | 
| 8191 | $21000.00 | $48.90 | 
| 8192 | $90000.00 | $517.81 | 
monthstart() 函數使用今日日期作為其唯一引數,傳回目前月份的開始日期。以目前日期減去該結果後,運算式會傳回此月目前已經過的天數。
然後此值乘以利率並除以 365,以傳回此期間產生的有效利率。然後該結果乘以貸款的開始餘額,以傳回本月目前已累積的利息。