inmonthtodate - 指令碼與圖表函數
如果 date 位於包含 basedate 的月份部分內,且不超過 (可包含) basedate 的最後一毫秒,則傳回 True。
語法:
InMonthToDate (timestamp, base_date, period_no)
傳回的資料類型: 布林
inmonthtodate() 函數識別所選月份作為區段。開始邊界是該月的開始。結束邊界可設定為該月的較晚日期。然後這會判定一組日期是否落在此區段,傳回 TRUE 或 FALSE 布林值。
引數 | 描述 |
---|---|
timestamp | 您要與 base_date 比較的日期。 |
base_date | 用來評估月份的日期。 |
period_no |
月份可以使用period_no 位移。period_no 是一個整數,其中值 0 表示包含 base_date 的月份。負值的 period_no 表示之前的月份,正值表示之後的月份。 |
什麼情況下使用
inmonthtodate() 函數會傳回布林值結果。通常,此函數類型會作為 if expression 中的條件使用。inmonthtodate() 函數根據日期是否發生於截至 (含) 問題中日期的該月份中,傳回彙總或計算。
例如,inmonthtodate() 函數可用來識別某個月截至特定日期製造的所有設備。
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 | 結果 |
---|---|
inmonthtodate ('01/25/2013', '25/01/2013', 0) | 傳回 True |
inmonthtodate ('01/25/2013', '24/01/2013', 0) | 傳回 False |
inmonthtodate ('01/25/2013', '28/02/2013', -1) | 傳回 True |
範例 1 – 無其他引數
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 2022 年交易的資料集,這載入到稱為「Transactions」的表格中。
-
以 DateFormat 系統變數 (MM/DD/YYYY) 格式提供日期欄位。
-
前置 LOAD 陳述式包含:
-
設定為欄位「in_month_to_date」的 inmonthtodate() 函數。這判定哪些交易發生在 2022 年 7 月 1 日和 7 月 26 日之間。
-
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inmonthtodate(date,'07/26/2022', 0) as in_month_to_date
;
Load
*
Inline
[
id,date,amount
8188,'1/19/2022',37.23
8189,'1/7/2022',17.17
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
-
in_month_to_date
日期 | in_month_to_date |
---|---|
1/7/2022 | 0 |
1/19/2022 | 0 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | 0 |
4/1/2022 | 0 |
5/7/2022 | 0 |
5/16/2022 | 0 |
6/15/2022 | 0 |
6/26/2022 | 0 |
7/9/2022 | -1 |
7/22/2022 | -1 |
7/23/2022 | -1 |
7/27/2022 | 0 |
8/2/2022 | 0 |
8/8/2022 | 0 |
8/19/2022 | 0 |
9/26/2022 | 0 |
10/14/2022 | 0 |
10/29/2022 | 0 |
「in_month_to_date」欄位使用 inmonthtodate() 函數在前置 LOAD 陳述式中建立。
第一個引數識別正在評估哪個欄位。第二個引數是硬式編碼日期 7 月 26 日,這是 base_date。此 base_date 引數識別哪個月受到分段以及該區段的結束邊界。
0 的 period_no 是最終引數,表示該函數沒有比較分割月份之前或之後的月份。
因此,發生在 7 月 1 日和 7 月 26 日之間的任何交易都會傳回布林值結果 TRUE。發生在 7 月且晚於 7 月 26 日的任何交易會傳回布林值結果 FALSE,如同該年任何其他月份的任何交易。
範例 2 – period_no
概覽
使用與第一個範例相同的資料集和情境。
在此範例中,任務是建立欄位「six_months_prior」,這判定哪些交易發生在 7 月 1 日和 7 月 26 日之前的完整六個月。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inmonthtodate(date,'07/26/2022', -6) as six_months_prior
;
Load
*
Inline
[
id,date,amount
8188,'1/19/2022',37.23
8189,'1/7/2022',17.17
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
-
six_months_prior
日期 | six_months_prior |
---|---|
1/7/2022 | -1 |
1/19/2022 | -1 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | 0 |
4/1/2022 | 0 |
5/7/2022 | 0 |
5/16/2022 | 0 |
6/15/2022 | 0 |
6/26/2022 | 0 |
7/9/2022 | 0 |
7/22/2022 | 0 |
7/23/2022 | 0 |
7/27/2022 | 0 |
8/2/2022 | 0 |
8/8/2022 | 0 |
8/19/2022 | 0 |
9/26/2022 | 0 |
10/14/2022 | 0 |
10/29/2022 | 0 |
透過使用 -6 作為 inmonthtodate() 函數中的 period_no 引數,比較子月份區段的邊界會偏移六個月。原本該月區段等於 7 月 1 日和 7 月 26 日之間。然後 period_no 將此區段偏移負六個月,日期邊界會偏移,並落在 1 月 1 日和 1 月 26 日之間。
因此,發生在 1 月 1 日和 1 月 26 日之間的任何交易將會傳回布林值結果 TRUE。
範例 3 – 圖表範例
概覽
使用與第一個範例相同的資料集和情境。
在此範例中,資料集保持不變並載入到應用程式中。任務是建立決定交易是否發生在 7 月 1 日和 7 月 26 日之間的計算,作為應用程式圖表中的量值。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,'1/19/2022',37.23
8189,'1/7/2022',17.17
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
若要計算交易是否發生在 7 月 1 日和 7 月 26 日之間,建立下列量值:
=inmonthtodate(date,'07/26/2022', 0)
日期 | =inmonthtodate(date,'07/26/2022', 0) |
---|---|
1/7/2022 | 0 |
1/19/2022 | 0 |
2/5/2022 | 0 |
2/28/2022 | 0 |
3/16/2022 | 0 |
4/1/2022 | 0 |
5/7/2022 | 0 |
5/16/2022 | 0 |
6/15/2022 | 0 |
6/26/2022 | 0 |
7/9/2022 | -1 |
7/22/2022 | -1 |
7/23/2022 | -1 |
7/27/2022 | 0 |
8/2/2022 | 0 |
8/8/2022 | 0 |
8/19/2022 | 0 |
9/26/2022 | 0 |
10/14/2022 | 0 |
10/29/2022 | 0 |
會使用 inmonthtodate() 函數在圖表中建立「in_month_to_date」欄位量值。
第一個引數識別正在評估哪個欄位。第二個引數是硬式編碼日期 7 月 26 日,這是 base_date。此 base_date 引數識別哪個月受到分段以及該區段的結束邊界。值為 0 的 period_no 是最終引數。這表示該函數沒有比較分割月份之前或之後的月份。
因此,發生在 7 月 1 日和 7 月 26 日之間的任何交易都會傳回布林值結果 TRUE。發生在 7 月且晚於 7 月 26 日的任何交易會傳回布林值結果 FALSE,如同該年任何其他月份的任何交易。
範例 4 – 情境
概覽
在此範例中,資料集會載入到稱為「Products」的表格中。該表格含有下列欄位:
-
產品 ID
-
製造日期
-
成本價格
由於設備錯誤,在 2022 年 7 月製造的產品有瑕疵。問題已於 2022 年 7 月 27 日解決。
最終使用者希望圖表依月份顯示製造時為「瑕疵」(布林值 TURE) 或「故障」(布林值 FALSE) 的產品狀態,以及在該月份製造的產品成本。
載入指令碼
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
8188,'1/19/2022',37.23
8189,'1/7/2022',17.17
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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
=monthname(manufacture_date)
-
=if(Inmonthtodate(manufacture_date,makedate(2022,07,26),0),'Defective','Faultless')
若要計算產品成本總和,建立此量值:
=sum(cost_price)
將量值的數字格式設定為金錢。
monthname(manufacture_date) | if(Inmonthtodate(manufacture_date,makedate(2022,07,26),0),'Defective','Faultless') | Sum(cost_price) |
---|---|---|
2022 年 1 月 | 無缺失 | $54.40 |
2022 年 2 月 | 無缺失 | $145.69 |
2022 年 3 月 | 無缺失 | $53.80 |
2022 年 4 月 | 無缺失 | $82.06 |
2022 年 5 月 | 無缺失 | $127.60 |
2022 年 6 月 | 無缺失 | $141.82 |
2022 年 7 月 | 瑕疵 | $144.66 |
2022 年 7 月 | 無缺失 | $69.98 |
2022 年 8 月 | 無缺失 | $147.46 |
2022 年 9 月 | 無缺失 | $84.21 |
2022 年 10 月 | 無缺失 | $163.91 |
inmonthtodate() 函數會在評估每個產品的製造日期時傳回布林值。
對於傳回布林值 TRUE 的日期,產品會標記為「瑕疵」。對於傳回 FALSE 值的任何產品 (因此這不是在該月截至 (含) 7 月 26 日前製造),會將產品標記為「無缺失」。