inlunarweektodate - 指令碼與圖表函數在此頁面
此函數會發現 timestamp 是否位於農曆週部分內,且不超過 (可包含) base_date 的最後一毫秒。將 1 月 1 日視為該週的第一天,以定義 Qlik Sense 中的農曆週,而除了該年的最後一週,會確切包含七天。
語法:
InLunarWeekToDate
( timestamp, base_date, period_no [, first_week_day] )
傳回的資料類型: 布林
資訊備註
在 Qlik Sense 中,布林值 true 值以 -1 代表,而 false 值以 0 代表。
inlunarweektodate() 函數的範例圖表
inlunarweektodate() 函數作為農曆週的結束點運作。相反地,inlunarweek() 函數判定 base_date 落在哪一個農曆週。例如,若 base_date 為 1 月 5 日,則 1 月 1 日和 1 月 5 日之間的任何時間戳記會傳回布林值結果 TRUE ,而 1 月 6 日和 7 日及之後的日期則會傳回布林值結果 FALSE 。
引數
timestamp
您要與 base_date 比較的日期。
base_date
用來評估農曆週的日期。
period_no
農曆週可以使用 period_no 位移。period_no 是一個整數,其中值 0 表示包含 base_date 的農曆週。負值的 period_no 表示之前的農曆週,正值表示之後的農曆週。
first_week_day
可能大於或小於零的位移。這會使用指定的天數及/或一天的片段變更一年的開始。
什麼情況下使用
inlunarweektodate() 函數會傳回布林值結果。通常,此函數類型將作為 IF 運算式中的條件使用。若使用者希望計算根據評估的日期是否發生在有疑問的特定週區段期間,傳回彙總或計算,則會使用 inlunarweektodate() 函數。
例如,inlunarweektodate() 函數可用來識別特定週截至 (含) 特定日期前製作的所有設備。
函數範例
inlunarweektodate('01/12/2013', '01/13/2013',
0)
傳回 TRUE ,因為 timestamp 、01/12/2013 的值介於週 01/08/2013 至 01/13/2013 的部分期間。
inlunarweektodate('01/12/2013', '01/11/2013',
0)
傳回 FALSE ,因為 timestamp 的值晚於 base_date 值,即便兩個日期都在 01/12/2012 之前的同一農曆週內。
inlunarweektodate('01/12/2006', '01/05/2006',
1)
傳回 TRUE 。為 period_no 指定值 1 會將 base_date 向前移動一週,因此 timestamp 的值在農曆週部分中。
inlunarweektodate() 函數通常用於組合下列函數:
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 - 無其他引數
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweektodate(date,'01/10/2022', 0) as in_lunar_week_to_date
;
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
date
in_lunar_week_to_date
結果表格
1/1/2022
0
1/4/2022
0
1/10/2022
-1
1/11/2022
0
1/12/2022
0
1/15/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/21/2022
0
1/23/2022
0
1/26/2022
0
1/27/2022
0
1/29/2022
0
1/31/2022
0
inlunarweektodate() 函數,無其他引數
in_lunar_week_to_date 欄位在前置 LOAD 陳述式中的建立方式是使用 inlunarweektodate() 函數並傳遞 date 欄位,即 1 月 10 日的硬式編碼作為我們的 base_date ,而 0 偏移作為函數的引數。
因為農曆週於 1 月 1 日開始,所以 1 月 10 日會落在於 1 月 8 日開始的農曆週;又因為我們使用 inlunarweektodate() 函數,所以該農曆週會結束於 10 日。因此,發生在 1 月這兩個日期之間的任何交易會傳回布林值 TRUE 。這在結果表格中驗證。
範例 2 - period_no
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。不過,在此範例中,任務是建立欄位 2_lunar_weeks_later ,這判定交易是否發生在截至 1 月 1 日之農曆週的兩週之後。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweektodate(date,'01/10/2022', 2) as [2_lunar_weeks_later]
;
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
1/1/2022
0
1/4/2022
0
1/10/2022
0
1/11/2022
0
1/12/2022
0
1/15/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/21/2022
0
1/23/2022
-1
1/26/2022
0
1/27/2022
0
1/29/2022
0
1/31/2022
0
inlunarweektodate() 函數,period_no 範例
在此例中,inlunarweektodate() 函數判定截至 1 月 10 日的農曆週等於三天 (1 月 8 日、9 日、10 日)。由於值為 2 的 period_no 用來作為偏移引數,此農曆週偏移了 14 天。因此,這將為期三天的農曆週定義為包括 1 月 22 日、23 日和 24 日。任何發生在 1 月 22 日和 1 月 24 日之間的交易會傳回 TRUE 的布林值結果。
範例 3 - first_week_day
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 0,3) as in_lunar_week_to_date
;
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
date
in_lunar_week_to_date
結果表格
1/1/2022
0
1/4/2022
-1
1/10/2022
-1
1/11/2022
0
1/12/2022
0
1/15/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/21/2022
0
1/23/2022
0
1/26/2022
0
1/27/2022
0
1/29/2022
0
1/31/2022
0
inlunarweektodate() 函數,first_week_day 範例
在此例中,因為值為 3 的 the first_week_date 引數用於 inlunarweek() 函數,所以第一個農曆週將是自 1 月 3 日至 1 月 10 日。因為 1 月 10 日也是 base_date ,所以任何落在這兩個日期之間的交易會傳回 TRUE 的布林值。
範例 4 - 圖表物件範例
載入指令碼和圖表運算式
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。
不過,在此範例中,不變的資料集會載入到應用程式中。會建立決定交易是否發生在截至 1 月 10 日之農曆週的計算,作為應用程式圖表物件中的量值。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: date 。
建立下列量值:
=inlunarweektodate(date,'01/10/2022', 0)
結果表格
1/1/2022
0
1/4/2022
0
1/10/2022
-1
1/11/2022
0
1/12/2022
0
1/15/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/21/2022
0
1/23/2022
0
1/26/2022
0
1/27/2022
0
1/29/2022
0
1/31/2022
0
inlunarweektodate() 函數,圖表物件範例
in_lunar_week_to_date 量值在圖表物件中的建立方式是使用 inlunarweektodate() 函數並傳遞日期欄位,即 1 月 10 日的硬式編碼日期作為 base_date ,而 0 偏移作為函數的引數。
因為農曆週於 1 月 1 日開始,所以 1 月 10 日會落在於 1 月 8 日開始的農曆週,由於我們使用 inlunarweektodate() 函數,所以該農曆週會終止於 10 日。因此,發生在 1 月這兩個日期之間的任何交易會傳回布林值 TRUE 。這在結果表格中驗證。
範例 5 - 情境
載入指令碼和圖表運算式
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入到稱為 Products 之表格的資料集。
包含產品 ID、製造日期和成本價格的資訊。
這識別出由於設備錯誤,在 1 月 12 日該農曆週製造的產品有瑕疵。問題已在 1 月 13 日解決。最終使用者希望圖表物件依週顯示製造的產品狀態為「瑕疵」或「無缺失」,以及在該週製造的產品成本。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff]';
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
8188,'01/02/2022 12:22:06',37.23
8189,'01/05/2022 01:02:30',17.17
8190,'01/06/2022 15:36:20',88.27
8191,'01/08/2022 10:58:35',57.42
8192,'01/09/2022 08:53:32',53.80
8193,'01/10/2022 21:13:01',82.06
8194,'01/11/2022 00:57:13',40.39
8195,'01/12/2022 09:26:02',87.21
8196,'01/13/2022 15:05:09',95.93
8197,'01/14/2022 18:44:57',45.89
8198,'01/15/2022 06:10:46',36.23
8199,'01/16/2022 06:39:27',25.66
8200,'01/17/2022 10:44:16',82.77
8201,'01/18/2022 18:48:17',69.98
8202,'01/26/2022 04:36:03',76.11
8203,'01/27/2022 08:07:49',25.12
8204,'01/28/2022 12:24:29',46.23
8205,'01/30/2022 11:56:56',84.21
8206,'01/30/2022 14:40:19',96.24
8207,'01/31/2022 05:28:21',67.67
];
結果
請執行下列動作:
載入資料並開啟工作表。建立新的表格。
建立維度以顯示週名稱:
=weekname(manufacture_date)
接下來,建立使用 inlunarweektodate() 函數的維度,以識別哪些產品為瑕疵,那些為無缺失:
=if(inlunarweektodate(manufacture_date,makedate(2022,01,12),0),'Defective','Faultless')
建立量值以加總產品的 cost_price :
=sum(cost_price)
將量值的數字格式 設定為金錢 。
結果表格
2022/01
無缺失
$142.67
2022/02
瑕疵
$320.88
2022/02
無缺失
$141.82
2022/03
無缺失
$214.64
2022/04
無缺失
$147.46
2022/05
無缺失
$248.12
inlunarweektodate() 函數會在評估每個產品的製造日期時傳回布林值。對於傳回布林值 TRUE 的項目,會將產品標記為 ‘Defective’ 。對於傳回值 FALSE 的任何產品,以及因此不是在該農曆週截至 1 月 12 日製作的產品,會將產品標記為 ‘Faultless’ 。