inday - 指令碼與圖表函數在此頁面
此函數會傳回 True ,前提是如果 timestamp 位於包含 base_timestamp 的日中。
語法:
InDay ( timestamp, base_timestamp, period_no[, day_start] )
inday 函數的圖表
inday() 函數使用 base_timestamp 引數來識別時間戳記落在哪一天。依照預設,一天的開始時間為午夜;但您可以使用 inday() 函數的 day_start 引數變更一天的開始時間。定義此日後,該函數將會在比較規定的時間戳記值與該日時傳回布林值結果。
什麼情況下使用
inday() 函數會傳回布林值結果。通常,此函數類型將作為 if expression 中的條件使用。這根據評估的日期是否發生於問題中的時間戳記當日,傳回彙總 或計算。
例如,inday() 函數可用來識別指定日製作的所有設備。
傳回的資料類型: 布林
在 Qlik Sense 中,布林值 true 值以 -1 代表,而 false 值以 0 代表。
引數
timestamp
您想要與 base_timestamp 比較的日期和時間。
base_timestamp
用來評估時間戳記的日期和時間。
period_no
日可以使用 period_no 位移。period_no 是一個整數,其中值 0 表示包含 base_timestamp 的日。負值的 period_no 表示之前的日,正值表示之後的日。
day_start
如果要使用不起始於午夜的日,則可在 day_start 中指示位移 (以一日的小數表示),例如 0.125 代表早上 3 時。
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。如需詳細資訊,請參閱 修改用於應用程式和指令碼的區域設定 。
應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。
若您是應用程式建立者,可以為您建立的應用程式設定預設地區。如需詳細資訊,請參閱Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定 。
函數範例
範例
結果
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0)
傳回 True
inday ('01/12/2006 12:23:00 PM', '01/13/2006 12:00:00 AM', 0)
傳回 False
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1)
傳回 False
inday ('01/11/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1)
傳回 True
inday ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0, 0.5)
傳回 False
inday ('01/12/2006 11:23:00 AM', '01/12/2006 12:00:00 AM', 0, 0.5)
傳回 True
範例 1 – LOAD 陳述式 (指令碼)
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
包含依時間戳記之交易的資料集 ,這載入到稱為 Transactions 的表格中。
以 TimeStamp 系統變數 (M/D/YYYY h:mm:ss[.fff] TT) 格式提供的日期欄位 。
包含設定為 in_day 欄位之 inday() 函數的前置載入 。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', 0) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
日期
in_day
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
0
01/04/2022 6:49:38 PM
0
01/04/2022 10:58:34 PM
0
01/05/2022 5:40:49 AM
-1
01/05/2022 11:29:38 AM
-1
01/05/2022 7:04:57 PM
-1
01/06/2022 8:49:09 AM
0
in_day 欄位在前置 LOAD 陳述式中的建立方式是使用 inday() 函數並傳遞日期欄位,即 1 月 5 日的硬式編碼時間戳記和值為 0 的 period_no 作為函數的引數。
範例 2 – period_no
載入指令碼和結果
概覽
載入指令碼 使用與第一個範例中相同的資料集和情境。
不過,在此範例中,任務要計算交易日期是否發生在 1 月 5 日之前的兩天。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', -2) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
日期
in_day
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
-1
01/04/2022 6:49:38 PM
0
01/04/2022 10:58:34 PM
0
01/05/2022 5:40:49 AM
0
01/05/2022 11:29:38 AM
0
01/05/2022 7:04:57 PM
0
01/06/2022 8:49:09 AM
0
在此實例中,因為值為 -2 的 period_no 作為 inday() 函數中的偏移引數使用,所以函數會決定每個交易日期是否發生在 1 月 3 日。這可以在輸出表格中驗證,其中有一筆交易傳回布林值結果 TRUE。
範例 3 – day_start
載入指令碼和結果
概覽
載入指令碼使用與先前範例中相同的資料集和情境。
不過,在此範例中,公司政策是工作日在上午 7 時開始和結束。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
inday(date,'01/05/2022 12:00:00 AM', 0, 7/24) as in_day
;
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
日期
in_day
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
0
01/04/2022 6:49:38 PM
-1
01/04/2022 10:58:34 PM
-1
01/05/2022 5:40:49 AM
-1
01/05/2022 11:29:38 AM
0
01/05/2022 7:04:57 PM
0
01/06/2022 8:49:09 AM
0
因為 inday() 函數中使用的 start_day 引數為 7/24,亦即上午 7 時,所以該函數會決定每個交易日期是否發生在 1 月 4 日上午 7 時和 1 月 5 日上午 7 時之間。
這可以在輸出表格中驗證,其中發生在 1 月 4 日上午 7 時之後的交易傳回布林值結果 TRUE,而發生在 1 月 5 日上午 7 時之後的交易則傳回布林值結果 。
範例 4 – 圖表物件
載入指令碼和圖表運算式
概覽
載入指令碼使用與先前範例中相同的資料集和情境。
不過,在此範例中,資料集保持不變並且會載入到應用程式中。您將會建立圖表物件中的量值 ,藉此計算以決定交易是否發生在 1 月 5 日。
載入指令碼
Transactions:
Load
*
Inline
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
若要計算交易是否發生在 1 月 5 日,建立下列量值:
=inday(date,'01/05/2022 12:00:00 AM',0)
結果表格
日期
inday(date,'01/05/2022 12:00:00 AM',0)
01/01/2022 7:34:46 PM
0
01/01/2022 10:10:22 PM
0
01/02/2022 8:35:54 AM
0
01/03/2022 2:21:53 PM
0
01/04/2022 6:49:38 PM
0
01/04/2022 10:58:34 PM
0
01/05/2022 5:40:49 AM
-1
01/05/2022 11:29:38 AM
-1
01/05/2022 7:04:57 PM
-1
01/06/2022 8:49:09 AM
0
範例 5 – 情境
載入指令碼和結果
概覽
在此範例中,這識別出由於設備錯誤,在 1 月 5 日製造的產品有瑕疵。最終使用者希望圖表物件依日期顯示哪些製造產品的狀態為「瑕疵」或「故障」,以及在 1 月 5 日製造的產品成本。
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入資料集並稱為「Products」的表格。
該表格含有下列欄位:
載入指令碼
Products:
Load
*
Inline
[
product_id,manufacture_date,cost_price
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
=dayname(manufacture_date)
建立下列量值:
=if(only(InDay(manufacture_date,makedate(2022,01,05),0)),'Defective','Faultless')
=sum(cost_price)
將量值的數字格式 設定為金錢 。
在外觀 之下,關閉總計 。
結果表格
dayname(manufacture_date)
=if(only(InDay(manufacture_date,makedate(2022,01,05),0)),'Defective','Faultless')
=sum(cost_price)
01/01/2022
無缺失
44.67
01/02/2022
無缺失
36.34
01/03/2022
無缺失
51.75
01/04/2022
無缺失
89.69
01/05/2022
瑕疵
170.78
01/06/2022
無缺失
74.23
inday() 函數會在評估每個產品的製造日期時傳回布林值。對於在 1 月 5 日製造的任何產品,inday() 函數會傳回布林值 TRUE 並將產品標記為「瑕疵」。對於傳回 FALSE 值的任何產品 (因此這不是在該日製造),會將產品標記為「無缺失」。