dayend - 指令碼與圖表函數
此函數傳回的值相當於包含在 time 中該日的最後一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 TimestampFormat。
語法:
DayEnd(time[, [period_no[, day_start]])
什麼情況下使用
dayend() 函數通常在使用者想要計算以使用一天中尚未發生的部分時,作為運算式的一部分使用。例如,用來計算一天當中仍待產生的整體費用。
傳回的資料類型: 雙值
引數 | 描述 |
---|---|
time | 要評估的時間戳記。 |
period_no | period_no 是一個整數,或者解析為整數的運算式,其中值 0 表示包含 time 的日。負值的 period_no 表示之前的日,正值表示之後的日。 |
day_start | 若要指定日不從午夜開始,可在 day_start 中指示位移 (以一日的片段表示)。例如,0.125 表示上午 3:00。 換言之,若要建立偏移,請依 24 小時分割開始時間。例如,對於在上午 7:00 開始的日子,請使用分數 7/24。 |
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 | 結果 |
---|---|
dayend('01/25/2013 16:45:00') | Returns 01/25/2013 23:59:59. PM |
dayend('01/25/2013 16:45:00', -1) | 傳回 01/24/2013 23:59:59。PM |
dayend('01/25/2013 16:45:00', 0, 0.5) | Returns 01/26/2013 11:59:59. PM |
範例 1 - 基本指令碼
概述
開啟 資料載入編輯器 並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含日期清單的資料集載入到名為「Calendar」的表格中。
-
預設 DateFormat 系統變數 (MM/DD/YYYY)。
-
使用 dayend() 函數建立附加欄位 'EOD_timestamp' 的前置載入。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Calendar:
Load
date,
dayend(date) as EOD_timestamp
;
Load
date
Inline
[
date
03/11/2022 1:47:15 AM
03/12/2022 4:34:58 AM
03/13/2022 5:15:55 AM
03/14/2022 9:25:14 AM
03/15/2022 10:06:54 AM
03/16/2022 10:44:42 AM
03/17/2022 11:33:30 AM
03/18/2022 12:58:14 PM
03/19/2022 4:23:12 PM
03/20/2022 6:42:15 PM
03/21/2022 7:41:16 PM
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
EOD_timestamp
日期 | EOD_timestamp |
---|---|
03/11/2022 1:47:15 AM | 3/11/2022 11:59:59 PM |
03/12/2022 4:34:58 AM | 3/12/2022 11:59:59 PM |
03/13/2022 5:15:55 AM | 3/13/2022 11:59:59 PM |
03/14/2022 9:25:14 AM | 3/14/2022 11:59:59 PM |
03/15/2022 10:06:54 AM | 3/15/2022 11:59:59 PM |
03/16/2022 10:44:42 AM | 3/16/2022 11:59:59 PM |
03/17/2022 11:33:30 AM | 3/17/2022 11:59:59 PM |
03/18/2022 12:58:14 PM | 3/18/2022 11:59:59 PM |
03/19/2022 4:23:12 PM | 3/19/2022 11:59:59 PM |
03/20/2022 6:42:15 PM | 3/20/2022 11:59:59 PM |
03/21/2022 7:41:16 PM | 3/21/2022 11:59:59 PM |
如同您在以上表格中所見,會為資料集中的每個日期產生日子結束時間戳記。時間戳記的格式是系統變數 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT。
範例 2 – period_no
概述
開啟 資料載入編輯器 並將下面的載入指令碼新增至新的索引標籤。
您會將包含服務預約的資料集載入到名稱為 'Services' 的表格。
資料集包括下列欄位:
-
service_id
-
service_date
-
amount
您將會在表格中建立兩個新欄位:
-
deposit_due_date: 應收到存款的日期。這是 service_date 三天之前的日子結束時間。
-
final_payment_due_date: 應收到最終付款的日期。這是 service_date 七天之後的日子結束時間。
以上兩個欄位在前置載入中使用 dayend() 函數建立,並提供前兩個參數 time 和 period_no。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
*,
dayend(service_date,-3) as deposit_due_date,
dayend(service_date,7) as final_payment_due_date
;
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
service_date
-
deposit_due_date
-
final_payment_due_date
service_date | deposit_due_date | final_payment_due_date |
---|---|---|
03/11/2022 9:25:14 AM | 3/8/2022 11:59:59 PM | 3/18/2022 11:59:59 PM |
03/12/2022 10:06:54 AM | 3/9/2022 11:59:59 PM | 3/19/2022 11:59:59 PM |
03/13/2022 10:44:42 AM | 3/10/2022 11:59:59 PM | 3/20/2022 11:59:59 PM |
03/14/2022 11:33:30 AM | 3/11/2022 11:59:59 PM | 3/21/2022 11:59:59 PM |
03/15/2022 12:58:14 PM | 3/12/2022 11:59:59 PM | 3/22/2022 11:59:59 PM |
03/16/2022 4:23:12 PM | 3/13/2022 11:59:59 PM | 3/23/2022 11:59:59 PM |
03/17/2022 6:42:15 PM | 3/14/2022 11:59:59 PM | 3/24/2022 11:59:59 PM |
03/18/2022 7:41:16 PM | 3/15/2022 11:59:59 PM | 3/25/2022 11:59:59 PM |
03/19/2022 8:14:15 PM | 3/16/2022 11:59:59 PM | 3/26/2022 11:59:59 PM |
03/20/2022 9:23:51 PM | 3/17/2022 11:59:59 PM | 3/27/2022 11:59:59 PM |
03/21/2022 10:04:41 PM | 3/18/2022 11:59:59 PM | 3/28/2022 11:59:59 PM |
新欄位的值位於 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因為使用函數 dayend(),時間戳記值都是一天中的最後一毫秒。
由於 dayend() 函數中傳遞的第二引數為負值,存款到期日期值是服務日期的三天前。
由於 dayend() 函數中傳遞的第二引數為正值,最終付款到期日期值是服務日期的七天後。
範例 3 – day_start 指令碼
概覽
開啟 資料載入編輯器 並在新的索引標籤中新增下面的載入指令碼。
此範例中使用的資料集和情境與上一個範例相同。
如同上一個範例,您將會建立兩個新的欄位:
-
deposit_due_date: 應收到存款的日期。這是 service_date 三天之前的日子結束時間。
-
final_payment_due_date: 應收到最終付款的日期。這是 service_date 七天之後的日子結束時間。
不過,貴公司希望根據工作日在下午 5 時開始並在次日下午 5 時結束的政策來運作。然後貴公司可以監控在這些工作時間中發生的交易。
為了達到這些要求,以上兩個欄位在前置載入中使用 dayend() 函數建立,並使用全部三個引數 time、period_no 和 day_start。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
*,
dayend(service_date,-3,17/24) as deposit_due_date,
dayend(service_date,7,17/24) as final_payment_due_date
;
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
service_date
-
deposit_due_date
-
final_payment_due_date
service_date | deposit_due_date | final_payment_due_date |
---|---|---|
03/11/2022 9:25:14 AM | 3/8/2022 4:59:59 PM | 3/18/2022 4:59:59 PM |
03/12/2022 10:06:54 AM | 3/9/2022 4:59:59 PM | 3/19/2022 4:59:59 PM |
03/13/2022 10:44:42 AM | 3/10/2022 4:59:59 PM | 3/20/2022 4:59:59 PM |
03/14/2022 11:33:30 AM | 3/11/2022 4:59:59 PM | 3/21/2022 4:59:59 PM |
03/15/2022 12:58:14 PM | 3/12/2022 4:59:59 PM | 3/22/2022 4:59:59 PM |
03/16/2022 4:23:12 PM | 3/13/2022 4:59:59 PM | 3/23/2022 4:59:59 PM |
03/17/2022 6:42:15 PM | 3/14/2022 4:59:59 PM | 3/24/2022 4:59:59 PM |
03/18/2022 7:41:16 PM | 3/15/2022 4:59:59 PM | 3/25/2022 4:59:59 PM |
03/19/2022 8:14:15 PM | 3/16/2022 4:59:59 PM | 3/26/2022 4:59:59 PM |
03/20/2022 9:23:51 PM | 3/17/2022 4:59:59 PM | 3/27/2022 4:59:59 PM |
03/21/2022 10:04:41 PM | 3/18/2022 4:59:59 PM | 3/28/2022 4:59:59 PM |
由於日期與範例 2 保持相同,日期現在有下午 5:00 之前最後一毫秒的時間戳記,因為傳遞至 dayend() 函數的第三引數 day_start 值為 17/24。
範例 4 – 圖表範例
概述
開啟 資料載入編輯器 並將下面的載入指令碼新增至新的索引標籤。
此範例中使用的資料集和情境與前兩個範例相同。公司希望根據工作日在下午 5:00 開始並在次日下午 5:00 結束的政策來運作。
如同上一個範例,您將會建立兩個新的欄位:
-
deposit_due_date: 應收到存款的日期。這是 service_date 三天之前的日子結束時間。
-
final_payment_due_date: 應收到最終付款的日期。這是 service_date 七天之後的日子結束時間。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Services:
Load
service_id,
service_date,
amount
Inline
[
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24
2,03/12/2022 10:06:54 AM,567.28
3,03/13/2022 10:44:42 AM,364.28
4,03/14/2022 11:33:30 AM,575.76
5,03/15/2022 12:58:14 PM,638.68
6,03/16/2022 4:23:12 PM,785.38
7,03/17/2022 6:42:15 PM,967.46
8,03/18/2022 7:41:16 PM,287.67
9,03/19/2022 8:14:15 PM,764.45
10,03/20/2022 9:23:51 PM,875.43
11,03/21/2022 10:04:41 PM,957.35
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:
service_date。
若要建立 deposit_due_date 欄位,建立此量值:
=dayend(service_date,-3,17/24).
然後,若要建立 final_payment_due_date 欄位,建立此量值:
=dayend(service_date,7,17/24).
service_date | =dayend(service_date,-3,17/24) | =dayend(service_date,7,17/24 |
---|---|---|
03/11/2022 | 3/8/2022 16:59:59 PM | 3/18/2022 16:59:59 PM |
03/12/2022 | 3/9/2022 16:59:59 PM | 3/19/2022 16:59:59 PM |
03/13/2022 | 3/10/2022 16:59:59 PM | 3/20/2022 16:59:59 PM |
03/14/2022 | 3/11/2022 16:59:59 PM | 3/21/2022 16:59:59 PM |
03/15/2022 | 3/12/2022 16:59:59 PM | 3/22/2022 16:59:59 PM |
03/16/2022 | 3/13/2022 16:59:59 PM | 3/23/2022 16:59:59 PM |
03/17/2022 | 3/14/2022 16:59:59 PM | 3/24/2022 16:59:59 PM |
03/18/2022 | 3/15/2022 16:59:59 PM | 3/25/2022 16:59:59 PM |
03/19/2022 | 3/16/2022 16:59:59 PM | 3/26/2022 16:59:59 PM |
03/20/2022 | 3/17/2022 16:59:59 PM | 3/27/2022 16:59:59 PM |
03/21/2022 | 3/18/2022 16:59:59 PM | 3/28/2022 16:59:59 PM |
新欄位的值位於 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因為使用函數 dayend(),時間戳記值都是一天中的最後一毫秒。
由於 dayend() 函數中傳遞的第二引數為負值,付款到期日期值是服務日期的三天前。
由於 dayend() 函數中傳遞的第二引數為正值,最終付款到期日期值是服務日期的七天後。
日期有下午 5:00 之前最後一毫秒的時間戳記,因為傳遞至 dayend() 函數的第三引數 day_start 值為 17/24。