inlunarweek - 指令碼與圖表函數在此頁面
此函數會判定 timestamp 是否位於包含 base_date 的農曆週內。將 1 月 1 日視為該週的第一天,以定義 Qlik Sense 中的農曆週。除了該年的最後一週,每週都會確切包含七天。
語法:
InLunarWeek
( timestamp, base_date, period_no[, first_week_day] )
傳回的資料類型: 布林
資訊備註
在 Qlik Sense 中,布林值 true 值以 -1 代表,而 false 值以 0 代表。
inlunarweek() 函數判定 base_date 落在哪一個農曆週。然後,判定每個時間戳記值是否發生在與 base_date 相同的農曆週期間後,就會傳回布林值結果。
inlunarweek() 函數的圖表
什麼情況下使用
inlunarweek() 函數會傳回布林值結果。通常,此函數類型將作為 IF 運算式中的條件使用。這會根據評估的日期是否發生於有疑問的農曆週期間,傳回彙總 或計算。
例如,inlunarweek() 函數可用來識別特定農曆週製作的所有設備。
引數
timestamp
您要與 base_date 比較的日期。
base_date
用來評估農曆週的日期。
period_no
農曆週可以使用 period_no 位移。period_no 是一個整數,其中值 0 表示包含 base_date 的農曆週。負值的 period_no 表示之前的農曆週,正值表示之後的農曆週。
first_week_day
可能大於或小於零的位移。這會使用指定的天數及/或一天的片段變更一年的開始。
函數範例
inlunarweek('01/12/2013', '01/14/2013',
0)
傳回 TRUE ,因為 timestamp 、01/12/2013 的值介於週 01/08/2013 至 01/14/2013 期間。
inlunarweek('01/12/2013', '01/07/2013',
0)
傳回 FALSE ,因為 base_date 01/07/2013 在定義為 01/01/2013 至 01/07/2013 的農曆週。
inlunarweek('01/12/2013', '01/14/2013',
-1)
傳回 FALSE 。將 period_no 的值指定為 -1,會將週變更為前一週,即 01/01/2013 變更為 01/07/2013 。
inlunarweek('01/07/2013', 01/14/2013',
-1)
傳回 TRUE 。與前一個範例相比較,timestamp 是在考量往回偏移之後的下一週內。
inlunarweek('01/11/2006', '01/08/2006',
0, 3)
傳回 FALSE 。為 first_week_day 指定值 3 表示會從 01/04/2013 計算一年的開始。因此,base _date 的值落在第一週,而 timestamp 的值落在週 01/11/2013 至 01/17/2013 。
inlunarweek() 函數通常用於組合下列函數:
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。如需詳細資訊,請參閱 修改用於應用程式和指令碼的區域設定 。
應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。
若您是應用程式建立者,可以為您建立的應用程式設定預設地區。如需詳細資訊,請參閱Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定 。
範例 1 - 無其他引數
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
建立欄位 in_lunar_week ,這判定交易是否發生在與 1 月 10 日相同的農曆週。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 0) as in_lunar_week
;
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
1/5/2022
0
1/6/2022
0
1/7/2022
0
1/8/2022
-1
1/9/2022
-1
1/10/2022
-1
1/11/2022
-1
1/12/2022
-1
1/13/2022
-1
1/14/2022
-1
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
0
1/23/2022
0
inlunarweek() 函數,基本範例
in_lunar_week 欄位在前置 LOAD 陳述式中的建立方式是使用 inlunarweek() ,然後傳遞以下內容作為函數的引數:
因為農曆週於 1 月 1 日開始,所以 1 月 10 日會落在 1 月 8 日開始、1 月 14 日結束的農曆週。因此,發生在 1 月這兩個日期之間的任何交易會傳回布林值 TRUE 。這在結果表格中驗證。
範例 2 - period_no
範例與結果:
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
不過,在此範例中,任務是建立欄位 2_lunar_weeks_later ,這判定交易是否發生在 1 月 10 日的兩個農曆週之後。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 2) as [2_lunar_weeks_later]
;
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
1/5/2022
0
1/6/2022
0
1/7/2022
0
1/8/2022
0
1/9/2022
0
1/10/2022
0
1/11/2022
0
1/12/2022
0
1/13/2022
0
1/14/2022
0
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
-1
1/23/2022
-1
inlunarweek() 函數,period_no 範例
在此例中,因為值為 2 的 period_no 作為 inlunarweek() 函數中的偏移引數使用,所以該函數將 1 月 22 日開始的週定義為農曆週,以據此驗證交易。因此,任何發生在 1 月 22 日和 1 月 28 日之間的交易會傳回 TRUE 的布林值結果。
範例 3 - first_week_day
載入指令碼和結果
概覽
開啟資料載入編輯器 並將下面的載入指令碼 新增至新的索引標籤。
載入指令碼使用與第一個範例相同的資料集和情境。不過,在此範例中,我們將農曆週設定為在 1 月 6 月開始。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inlunarweek(date,'01/10/2022', 0,5) as in_lunar_week
;
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
1/5/2022
0
1/6/2022
-1
1/7/2022
-1
1/8/2022
-1
1/9/2022
-1
1/10/2022
-1
1/11/2022
-1
1/12/2022
-1
1/13/2022
0
1/14/2022
0
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
0
1/23/2022
0
inlunarweek() 函數,first_week_day 範例
在此例中,因為值為 5 的 first_week_date 引數用於 inlunarweek() 函數,所以這會將農曆週的開始偏移至 1 月 6 日。因此,1 月 10 日落在 1 月 6 日開始、1 月 12 日結束的農曆週。任何落在這兩個日期之間的交易會傳回 TRUE 的布林值。
範例 4 - 圖表物件
載入指令碼和圖表運算式:
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
不過,在此範例中,不變的資料集會載入到應用程式中。會建立決定交易是否發生在與 1 月 10 日相同之農曆週的計算,作為應用程式圖表物件中的量值 。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: date 。
若要計算交易是否發生在包含 1 月 10 日的農曆週,建立下列量值:
= inlunarweek(date,'01/10/2022', 0)
結果表格
1/5/2022
0
1/6/2022
0
1/7/2022
0
1/8/2022
-1
1/9/2022
-1
1/10/2022
-1
1/11/2022
-1
1/12/2022
-1
1/13/2022
-1
1/14/2022
-1
1/15/2022
0
1/16/2022
0
1/17/2022
0
1/18/2022
0
1/19/2022
0
1/20/2022
0
1/21/2022
0
1/22/2022
0
1/23/2022
0
範例 5 - 情境
載入指令碼和圖表運算式:
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入到稱為 Products 之表格的資料集。
包含產品 ID、製造日期和成本價格的資訊。
這識別出由於設備錯誤,在包含 1 月 12 日之農曆週製造的產品有瑕疵。最終使用者希望圖表物件依農曆週名稱顯示製造的產品狀態為「瑕疵」或「無缺失」,以及在該月製造的產品成本。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
product_id,manufacture_date,cost_price
8183,'1/5/2022',42.32
8184,'1/6/2022',68.22
8185,'1/7/2022',15.25
8186,'1/8/2022',25.26
8187,'1/9/2022',37.23
8188,'1/10/2022',37.23
8189,'1/11/2022',17.17
8190,'1/12/2022',88.27
8191,'1/13/2022',57.42
8192,'1/14/2022',53.80
8193,'1/15/2022',82.06
8194,'1/16/2022',87.21
8195,'1/17/2022',95.93
8196,'1/18/2022',45.89
8197,'1/19/2022',36.23
8198,'1/20/2022',25.66
8199,'1/21/2022',82.77
8200,'1/22/2022',69.98
8201,'1/23/2022',76.11
];
結果
請執行下列動作:
載入資料並開啟工作表 。建立新的表格。
建立維度 以顯示月份名稱:
=lunarweekname(manufacture_date)
使用 inlunarweek() 函數建立量值以識別哪些產品為瑕疵,那些為無缺失:
=if(only(inlunarweek(manufacture_date,makedate(2022,01,12),0)), 'Defective','Faultless')
建立量值以加總產品的 cost_price :
=sum(cost_price)
將量值的數字格式 設定為金錢 。
在外觀 之下,關閉總計 。
結果表格
2022/01
無缺失
$125.79
2022/02
瑕疵
$316.38
2022/03
無缺失
$455.75
2022/04
無缺失
$146.09
inlunarweek() 函數會在評估每個產品的製造日期時傳回布林值。對於在包含 1 月 10 日之農曆週製造的任何產品,inlunarweek() 函數會傳回布林值 TRUE 並將產品標記為「瑕疵」。對於傳回 FALSE 值的任何產品 (因此這不是在該週製造),會將產品標記為「無缺失」。