monthsstart - 指令碼與圖表函數
此函數傳回的值相當於包含基本日期的月、雙月、季度、四月期或半年的第一毫秒的時間戳記。還可以尋找前一個或後一個時間期間的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat。
語法:
MonthsStart(n_months, date[, period_no [, first_month_of_year]])
傳回的資料類型: 雙值
monthsstart() 函數根據提供的 n_months 引數將該年分為幾個區段。然後這會評估提供的每個日期落在哪些區段,並以日期格式傳回該區段的第一毫秒。該函數也能夠從之前或之後的區段傳回開始時間戳記,以及重新定義哪個是該年的第一個月。
一年中的下列區段可作為 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 ) | 傳回 10/01/2013,因為年開始變成月份 2。 |
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。如需詳細資訊,請參閱 修改用於應用程式和指令碼的區域設定。
應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。
若您是應用程式建立者,可以為您建立的應用程式設定預設地區。如需詳細資訊,請參閱Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定。
範例 1 – 無其他引數
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 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,將該年分為兩個月區段。第二個引數識別正在評估哪個欄位。
交易 8195 發生在 5 月 22 日。monthsstart() 函數原本將該年分為兩個月區段。交易 8195 落在 5 月 1 日和 6 月 30 日之間的區段內。因此,該函數傳回此區段的第一毫秒 2022 年 5 月 1 日 12:00:00 AM。
範例 2 – period_no
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
與第一個範例相同的資料集和情境。
-
建立欄位「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 引數,原本將年分為兩個月區段後,該函數就會針對交易發生時間傳回上一個兩個月區段的第一毫秒。
交易 8195 發生在 5 月 和 6 月 之間的區段內。因此,上一個兩個月區段介於 3 月 1 日和 4 月 30 日之間,所以該函數會傳回此區段的第一毫秒 2022 年 3 月 1 日 12:00:00 AM。
範例 3 – first_month_of_year
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
與第一個範例相同的資料集和情境。
-
建立欄位 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 日開始,然後將該年分為兩個月區段:4 月至 5 月、6 月至 7 月、8 月至 9 月、10 月至 11 月、12 月至 1 月、2 月至 3 月。
交易 8195 發生在 5 月 22 日並落在 4 月 1 日和 5 月 31 日之間的區段內。因此,該函數傳回此區段的第一毫秒 2022 年 4 月 1 日 12:00:00 AM。
範例 4 – 圖表物件範例
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。
不過,在此範例中,不變的資料集會載入到應用程式中。會建立將交易組成兩個月區段並為每個交易傳回設定之開始時間戳記的計算,作為應用程式圖表物件中的量值。
載入指令碼
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 |
交易 8195 發生在 5 月 22 日。monthsstart() 函數原本將該年分為兩個月區段。交易 8195 落在 5 月 1 日和 6 月 30 日之間的區段內。因此,該函數傳回此區段的第一毫秒 05/01/2022 12:00:00 AM。
範例 5 – 情境
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
資料集包含一系列貸款餘額,其位於稱為 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)。接下來,設定變數作為工作表中的自訂物件。
請執行下列動作:
-
在資產面板中,按一下自訂物件。
-
選取 Qlik 儀表板搭售,並建立變數輸入物件。
-
輸入圖表物件的標題。
-
在變數之下,選取 vPeriod 作為名稱並設定物件以顯示為下拉式清單。
-
在值之下,設定物件以使用動態值。輸入下列內容:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'
接下來,建立結果表格。
請執行下列動作:
-
建立新的表格。新增下列欄位作為維度。
-
employee_id
-
employee_name
-
-
建立量值以計算累積的利息:
=start_balance*(rate*(today(1)-monthsstart($(vPeriod),today(1)))/365)
-
將量值的數字格式設定為金錢。按一下完成編輯。您現在可以調整變數物件中的時間區段,以修改顯示在表格中的資料。
這是結果表格在選取 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,以傳回此期間產生的有效利率。然後該結果乘以貸款的開始餘額,以傳回此期間目前已累積的利息。