indaytotime - 指令碼與圖表函數
如果 timestamp 位於包含 base_timestamp 的日部分內,且不超過 (可包含) base_timestamp 的確切的毫秒,則此函數會傳回 True。
語法:
InDayToTime (timestamp, base_timestamp, period_no[, day_start])
indaytotime() 函數傳回依據時間戳記值在該日時段期間於何時發生所決定的布林值結果。此時段的開始界線是一天的開始,預設為午夜;一天的開始可以透過 indaytotime() 函數的 day_start 引數來修改。一天時段的結束界線由函數的 base_timestamp 引數決定。
什麼情況下使用
indaytotime() 函數會傳回布林值結果。通常,此函數類型將作為 if expression 中的條件使用。indaytotime() 函數會截至 (含) 基本時間戳記的時間,根據時間戳記是否發生在該日時段內,傳回彙總或計算。
例如,indaytotime() 函數可用來顯示到今日為止演出之節目的票券銷售總和。
傳回的資料類型: 布林
在 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 Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 | 結果 |
---|---|
indaytotime ('01/12/2006 12:23:00 PM', '01/12/2006 11:59:00 PM', 0) | 傳回 True |
indaytotime ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0) | 傳回 False |
indaytotime '01/11/2006 12:23:00 PM', '01/12/2006 11:59:00 PM', -1) | 傳回 True |
範例 1 – 無其他引數
概述
開啟 資料載入編輯器 並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 1 月 4 日和 1 月 5 日之間交易的資料集載入到稱為「Transactions」的表格中。
-
以 TimeStamp 系統變數 (M/D/YYYY h:mm:ss[.fff] TT) 格式提供的日期欄位。
-
包含 indaytotime() 函數的前置載入,這設定為 'in_day_to_time' 欄位,決定每筆交易是否發生在上午 9:00 之前。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
indaytotime(date,'01/05/2022 9:00:00 AM',0) as in_day_to_time
;
Load
*
Inline
[
id,date,amount
8188,'01/04/2022 3:41:54 AM',25.66
8189,'01/04/2022 4:19:43 AM',87.21
8190,'01/04/2022 4:53:47 AM',53.80
8191,'01/04/2022 8:38:53 AM',69.98
8192,'01/04/2022 10:37:52 AM',57.42
8193,'01/04/2022 1:54:10 PM',45.89
8194,'01/04/2022 5:53:23 PM',82.77
8195,'01/04/2022 8:13:26 PM',36.23
8196,'01/04/2022 10:00:49 PM',76.11
8197,'01/05/2022 7:45:37 AM',82.06
8198,'01/05/2022 8:44:36 AM',17.17
8199,'01/05/2022 11:26:08 AM',40.39
8200,'01/05/2022 6:43:08 PM',37.23
8201,'01/05/2022 10:54:10 PM',88.27
8202,'01/05/2022 11:09:09 PM',95.93
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
in_day_to_time
日期 | in_day_to_time |
---|---|
01/04/2022 3:41:54 AM | 0 |
01/04/2022 4:19:43 AM | 0 |
01/04/2022 04:53:47 AM | 0 |
01/04/2022 8:38:53 AM | 0 |
01/04/2022 10:37:52 AM | 0 |
01/04/2022 1:54:10 PM | 0 |
01/04/2022 5:53:23 PM | 0 |
01/04/2022 8:13:26 PM | 0 |
01/04/2022 10:00:49 PM | 0 |
01/05/2022 7:45:37 AM | -1 |
01/05/2022 8:44:36 AM | -1 |
01/05/2022 11:26:08 AM | 0 |
01/05/2022 6:43:08 PM | 0 |
01/05/2022 10:54:10 PM | 0 |
01/05/2022 11:09:09 PM | 0 |
in_day_to_time field 在前置 LOAD 陳述式中的建立方式是使用 indaytotime() 函數並傳遞日期欄位,即 1 月 5 日上午 9:00 的硬式編碼時間戳記和值為 0 的偏移作為函數的引數。任何發生在 1 月 5 日午夜和上午 9:00 之間的交易都會傳回 TRUE。
範例 2 – period_no
概覽
載入指令碼使用與第一個範例中相同的資料集和情境。
不過,在此範例中,您將計算交易日期是否發生在 1 月 5 日上午 9:00 前一天。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
indaytotime(date,'01/05/2022 9:00:00 AM', -1) as in_day_to_time
;
Load
*
Inline
[
id,date,amount
8188,'01/04/2022 3:41:54 AM',25.66
8189,'01/04/2022 4:19:43 AM',87.21
8190,'01/04/2022 4:53:47 AM',53.80
8191,'01/04/2022 8:38:53 AM',69.98
8192,'01/04/2022 10:37:52 AM',57.42
8193,'01/04/2022 1:54:10 PM',45.89
8194,'01/04/2022 5:53:23 PM',82.77
8195,'01/04/2022 8:13:26 PM',36.23
8196,'01/04/2022 10:00:49 PM',76.11
8197,'01/05/2022 7:45:37 AM',82.06
8198,'01/05/2022 8:44:36 AM',17.17
8199,'01/05/2022 11:26:08 AM',40.39
8200,'01/05/2022 6:43:08 PM',37.23
8201,'01/05/2022 10:54:10 PM',88.27
8202,'01/05/2022 11:09:09 PM',95.93
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
- date
-
in_day_to_time
日期 | in_day_to_time |
---|---|
01/04/2022 3:41:54 AM | -1 |
01/04/2022 4:19:43 AM | -1 |
01/04/2022 04:53:47 AM | -1 |
01/04/2022 8:38:53 AM | -1 |
01/04/2022 10:37:52 AM | 0 |
01/04/2022 1:54:10 PM | 0 |
01/04/2022 5:53:23 PM | 0 |
01/04/2022 8:13:26 PM | 0 |
01/04/2022 10:00:49 PM | 0 |
01/05/2022 7:45:37 AM | 0 |
01/05/2022 8:44:36 AM | 0 |
01/05/2022 11:26:08 AM | 0 |
01/05/2022 6:43:08 PM | 0 |
01/05/2022 10:54:10 PM | 0 |
01/05/2022 11:09:09 PM | 0 |
在此範例中,因為值為 -1 的偏移作為 indaytotime() 函數中的偏移引數使用,所以函數會決定每個交易日期是否發生在 1 月 4 日上午 9:00 之前。這可以在輸出表格中驗證,其中有一筆交易傳回布林值結果 TRUE。
範例 3 – day_start
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,公司政策是工作日在上午 8 時開始和結束。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Transactions:
Load
*,
indaytotime(date,'01/05/2022 9:00:00 AM', 0,8/24) as in_day_to_time
;
Load
*
Inline
[
id,date,amount
8188,'01/04/2022 3:41:54 AM',25.66
8189,'01/04/2022 4:19:43 AM',87.21
8190,'01/04/2022 4:53:47 AM',53.80
8191,'01/04/2022 8:38:53 AM',69.98
8192,'01/04/2022 10:37:52 AM',57.42
8193,'01/04/2022 1:54:10 PM',45.89
8194,'01/04/2022 5:53:23 PM',82.77
8195,'01/04/2022 8:13:26 PM',36.23
8196,'01/04/2022 10:00:49 PM',76.11
8197,'01/05/2022 7:45:37 AM',82.06
8198,'01/05/2022 8:44:36 AM',17.17
8199,'01/05/2022 11:26:08 AM',40.39
8200,'01/05/2022 6:43:08 PM',37.23
8201,'01/05/2022 10:54:10 PM',88.27
8202,'01/05/2022 11:09:09 PM',95.93
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
in_day_to_time
日期 | in_day_to_time |
---|---|
01/04/2022 3:41:54 AM | 0 |
01/04/2022 4:19:43 AM | 0 |
01/04/2022 04:53:47 AM | 0 |
01/04/2022 8:38:53 AM | 0 |
01/04/2022 10:37:52 AM | 0 |
01/04/2022 1:54:10 PM | 0 |
01/04/2022 5:53:23 PM | 0 |
01/04/2022 8:13:26 PM | 0 |
01/04/2022 10:00:49 PM | 0 |
01/05/2022 7:45:37 AM | 0 |
01/05/2022 8:44:36 AM | -1 |
01/05/2022 11:26:08 AM | 0 |
01/05/2022 6:43:08 PM | 0 |
01/05/2022 10:54:10 PM | 0 |
01/05/2022 11:09:09 PM | 0 |
因為 indaytotime() 函數中使用的 start_day 引數為 8/24,等同於上午 8:00,所以每天於上午 8:00 開始和結束。因此,indaytotime() 函數將會為發生在 1 月 5 日上午 8:00 和上午 9:00 之間的任何交易傳回布林值結果 TRUE。
範例 4 – 圖表物件
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,資料集保持不變並且會載入到應用程式中。您將會建立圖表物件中的量值,藉此計算以決定交易是否發生在 1 月 5 日上午 9:00 之前。
載入指令碼
Transactions:
Load
*
Inline
[
id,date,amount
8188,'01/04/2022 3:41:54 AM',25.66
8189,'01/04/2022 4:19:43 AM',87.21
8190,'01/04/2022 4:53:47 AM',53.80
8191,'01/04/2022 8:38:53 AM',69.98
8192,'01/04/2022 10:37:52 AM',57.42
8193,'01/04/2022 1:54:10 PM',45.89
8194,'01/04/2022 5:53:23 PM',82.77
8195,'01/04/2022 8:13:26 PM',36.23
8196,'01/04/2022 10:00:49 PM',76.11
8197,'01/05/2022 7:45:37 AM',82.06
8198,'01/05/2022 8:44:36 AM',17.17
8199,'01/05/2022 11:26:08 AM',40.39
8200,'01/05/2022 6:43:08 PM',37.23
8201,'01/05/2022 10:54:10 PM',88.27
8202,'01/05/2022 11:09:09 PM',95.93
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
date。
若要決定交易是否發生在 1 月 5 日上午 9:00 之前,建立下列量值:
=indaytotime(date,'01/05/2022 9:00:00 AM',0)
日期 | =indaytotime(date,'01/05/2022 9:00:00 AM',0) |
---|---|
01/04/2022 3:41:54 AM | 0 |
01/04/2022 4:19:43 AM | 0 |
01/04/2022 04:53:47 AM | 0 |
01/04/2022 8:38:53 AM | 0 |
01/04/2022 10:37:52 AM | 0 |
01/04/2022 1:54:10 PM | 0 |
01/04/2022 5:53:23 PM | 0 |
01/04/2022 8:13:26 PM | 0 |
01/04/2022 10:00:49 PM | 0 |
01/05/2022 7:45:37 AM | -1 |
01/05/2022 8:44:36 AM | -1 |
01/05/2022 11:26:08 AM | 0 |
01/05/2022 6:43:08 PM | 0 |
01/05/2022 10:54:10 PM | 0 |
01/05/2022 11:09:09 PM | 0 |
in_day_to_time 量值在圖表物件中的建立方式是使用 indaytotime() 函數並傳遞日期欄位,即 1 月 5 日上午 9:00 的硬式編碼時間戳記和值為 0 的偏移作為函數的引數。任何發生在 1 月 5 日午夜和上午 9:00 之間的交易都會傳回 TRUE。這在結果表格中驗證。
範例 5 – 情境
概覽
在此範例中,包含當地電影院票券銷售的資料集載入到稱為 Ticket_Sales 的表格中。今日為 2022 年 5 月 3 日,現在是上午 11:00。
使用者希望 KPI 圖表物件顯示從截至今日演出的所有節目所賺取的收益。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Ticket_Sales:
Load
*
Inline
[
sale ID, show time, ticket price
1,05/01/2022 09:30:00 AM,10.50
2,05/03/2022 05:30:00 PM,21.00
3,05/03/2022 09:30:00 AM,10.50
4,05/03/2022 09:30:00 AM,31.50
5,05/03/2022 09:30:00 AM,10.50
6,05/03/2022 12:00:00 PM,42.00
7,05/03/2022 12:00:00 PM,10.50
8,05/03/2022 05:30:00 PM,42.00
9,05/03/2022 08:00:00 PM,31.50
10,05/04/2022 10:30:00 AM,31.50
11,05/04/2022 12:00:00 PM,10.50
12,05/04/2022 05:30:00 PM,10.50
13,05/05/2022 05:30:00 PM,21.00
14,05/06/2022 12:00:00 PM,21.00
15,05/07/2022 09:30:00 AM,42.00
16,05/07/2022 10:30:00 AM,42.00
17,05/07/2022 10:30:00 AM,10.50
18,05/07/2022 05:30:00 PM,10.50
19,05/08/2022 05:30:00 PM,21.00
20,05/11/2022 09:30:00 AM,10.50
];
結果
請執行下列動作:
-
建立 KPI 物件。
-
使用 indaytotime() 函數建立將會顯示截至今日演出節目的所有票券銷售總和的量值:
=sum(if(indaytotime([show time],'05/03/2022 11:00:00 AM',0),[ticket price],0))
-
建立 KPI 物件的標籤「目前收益」。
-
將量值的數字格式設定為金錢。
截至 2022 年 5 月 3 日上午 11:00 的票券銷售總和總計為 $52.50。
indaytotime () 函數會在比較每項票券銷售的節目時間與目前時間 ('05/03/2022 11:00:00 AM’) 時傳回布林值。對於 5 月 3 日在上午 11:00 之前的任何節目,indaytotime () 函數會傳回布林值 TRUE,其票券價格將會包括在總和總計中。