daystart - 指令碼與圖表函數在此頁面
此函數傳回的值相當於包含在 time 引數中該日的第一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 TimestampFormat 。
語法:
DayStart( time[, [period_no[, day_start]] )
傳回的資料類型: 雙值
引數
time
要評估的時間戳記。
period_no
period_no 是一個整數,或者解析為整數的運算式,其中值 0 表示包含 time 的日。負值的 period_no 表示之前的日,正值表示之後的日。
day_start
若要指定日不從午夜開始,可在 day_start 中指示位移 (以一日的片段表示)。例如,0.125 表示上午 3:00。 換言之,若要建立偏移,請依 24 小時分割開始時間。例如,對於在上午 7:00 開始的日子,請使用分數 7/24。
什麼情況下使用
daystart() 函數通常在使用者想要計算使用一天中已經過的部分時,作為運算式的一部分使用。例如,這可用來計算員工目前為止在一天中所賺取的總工資,即可使用此函數。
這些範例使用時間戳記格式 'M/D/YYYY h:mm:ss[.fff] TT' 。時間戳記格式是在位於資料載入指令碼頂端的 SET TimeStamp 陳述式中指定。變更範例中的格式,以滿足您的需求。
函數範例
daystart('01/25/2013 4:45:00 PM')
傳回 1/25/2013 12:00:00 AM 。
daystart('1/25/2013 4:45:00 PM', -1)
傳回 1/24/2013 12:00:00 AM 。
daystart('1/25/2013 16:45:00',0,0.5
)
傳回 1/25/2013 12:00:00 PM 。
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 - 簡單範例 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
包含日期清單的簡單資料集,載入到名為 Calendar 的表格中。
已使用預設的 TimeStampFormat 系統變數 ((M/D/YYYY h:mm:ss[.fff] TT )。
使用 daystart() 函數建立附加欄位 (名稱為 SOD_timestamp ) 的前置載入。
除了日期,不會向函數提供其他參數。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Calendar:
Load
date,
daystart(date) as SOD_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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格 03/11/2022 1:47:15 AM 3/11/2022 12:00:00 AM 03/12/2022 4:34:58 AM 3/12/2022 12:00:00 AM 03/13/2022 5:15:55 AM 3/13/2022 12:00:00 AM 03/14/2022 9:25:14 AM 3/14/2022 12:00:00 AM 03/15/2022 10:06:54 AM 3/15/2022 12:00:00 AM 03/16/2022 10:44:42 AM 3/16/2022 12:00:00 AM 03/17/2022 11:33:30 AM 3/17/2022 12:00:00 AM 03/18/2022 12:58:14 PM 3/18/2022 12:00:00 AM 03/19/2022 4:23:12 PM 3/19/2022 12:00:00 AM
03/20/2022 6:42:15 PM 3/20/2022 12:00:00 AM 03/21/2022 7:41:16 PM 3/21/2022 12:00:00 AM
如同在以上表格中所見,會為資料集中的每個日期產生日子結束時間戳記。時間戳記的格式是系統變數 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 。
範例 2 - period_no 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Fines:
Load
*,
daystart(due_date,-7) as early_repayment_period,
daystart(due_date,14) as late_penalty_period
;
Load
*
Inline
[
id, due_date, number_plate,amount
1,02/11/2022, 573RJG,50.00
2,03/25/2022, SC41854,50.00
3,04/14/2022, 8EHZ378,50.00
4,06/28/2022, 8HSS198,50.00
5,08/15/2022, 1221665,50.00
6,11/16/2022, EAK473,50.00
7,01/17/2023, KD6822,50.00
8,03/22/2023, 1GGLB,50.00
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
due_date
early_repayment_period
late_penalty_period
結果表格 02/11/2022 9:25:14 AM 2/4/2022 12:00:00 AM 2/25/2022 12:00:00 AM 03/25/2022 10:06:54 AM 3/18/2022 12:00:00 AM 4/8/2022 12:00:00 AM 04/14/2022 10:44:42 AM 4/7/2022 12:00:00 AM 4/28/2022 12:00:00 AM 06/28/2022 11:33:30 AM 6/21/2022 12:00:00 AM 7/12/2022 12:00:00 AM 08/15/2022 12:58:14 PM 8/8/2022 12:00:00 AM 8/29/2022 12:00:00 AM 11/16/2022 4:23:12 PM 11/9/2022 12:00:00 AM 11/30/2022 12:00:00 AM 01/17/2023 6:42:15 PM 1/10/2023 12:00:00 AM 1/31/2023 12:00:00 AM 03/22/2023 7:41:16 PM 3/15/2023 12:00:00 AM 4/5/2023 12:00:00 AM
新欄位的值位於 TimestampFormat M/DD/YYYY tt 中。因為使用函數 daystart() ,時間戳記值都是一天中的第一毫秒。
由於 daystart() 函數中傳遞的第二引數為負值,提早還款期間值是到期日期前七天。
由於 daystart() 函數中傳遞的第二引數為正值,延遲還款期間值是到期日期後 14 天。
範例 3 - day_start 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
與上一個範例相同的資料集和情境。
與上一個範例相同的前置載入。
在此範例中,我們將工作日設定為在每天上午 7:00 開始和結束。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Fines:
Load
*,
daystart(due_date,-7,7/24) as early_repayment_period,
daystart(due_date,14, 7/24) as late_penalty_period
;
Load
*
Inline
[
id, due_date, number_plate,amount
1,02/11/2022, 573RJG,50.00
2,03/25/2022, SC41854,50.00
3,04/14/2022, 8EHZ378,50.00
4,06/28/2022, 8HSS198,50.00
5,08/15/2022, 1221665,50.00
6,11/16/2022, EAK473,50.00
7,01/17/2023, KD6822,50.00
8,03/22/2023, 1GGLB,50.00
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
due_date
early_repayment_period
late_penalty_period
結果表格 02/11/2022 2/3/2022 7:00:00 AM 2/24/2022 7:00:00 AM 03/25/2022 3/17/2022 7:00:00 AM 4/7/2022 7:00:00 AM 04/14/2022 4/6/2022 7:00:00 AM 4/27/2022 7:00:00 AM 06/28/2022 6/20/2022 7:00:00 AM 7/11/2022 7:00:00 AM 08/15/2022 8/7/2022 7:00:00 AM 8/28/2022 7:00:00 AM 11/16/2022 11/8/2022 7:00:00 AM 11/29/2022 7:00:00 AM 01/17/2023 1/9/2023 7:00:00 AM 1/30/2023 7:00:00 AM 03/22/2023 3/14/2023 7:00:00 AM 4/4/2023 7:00:00 AM
日期現在有上午 7:00 的時間戳記,因為傳遞至 daystart() 函數的 day_start 引數值為 7/24。這將一日的開始設定為上午 7:00 。
因為 due_date 欄位沒有時間戳記,這會被視為上午 12:00,因此仍然屬於前一天,因為每天在上午 7:00 開始和結束。因此,於 2 月 11 日到期的罰款提早還款期間在 2 月 3 日上午 7:00 開始。
範例 4 - 圖表物件範例 載入指令碼和圖表運算式 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
此範例使用與上一個範例相同的資料集和情境。
不過,僅原始 Fines 表格會載入到應用程式中,且圖表物件中計算了兩個額外的到期日期值。
載入指令碼
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
Fines:
Load
*
Inline
[
id, due_date, numer_plate,amount
1,02/11/2022 9:25:14 AM, 573RJG,50.00
2,03/25/2022 10:06:54 AM, SC41854,50.00
3,04/14/2022 10:44:42 AM, 8EHZ378,50.00
4,06/28/2022 11:33:30 AM, 8HSS198,50.00
5,08/15/2022 12:58:14 PM, 1221665,50.00
6,11/16/2022 4:23:12 PM, EAK473,50.00
7,01/17/2023 6:42:15 PM, KD6822,50.00
8,03/22/2023 7:41:16 PM, 1GGLB,50.00
];
結果
請執行下列動作:
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: due_date 。
若要建立 early_repayment_period 欄位,建立下列量值。
=daystart(due_date,-7,7/24)
若要建立 late_penalty_period 欄位,建立下列量值:
=daystart(due_date,14,7/24)
結果表格 02/11/2022 9:25:14 AM 2/4/2022 7:00:00 AM 2/25/2022 7:00:00 AM 03/25/2022 10:06:54 AM 3/18/2022 7:00:00 AM 4/8/2022 7:00:00 AM 04/14/2022 10:44:42 AM 4/7/2022 7:00:00 AM 4/28/2022 7:00:00 AM 06/28/2022 11:33:30 AM 6/21/2022 7:00:00 AM 7/12/2022 7:00:00 AM 08/15/2022 12:58:14 PM 8/8/2022 7:00:00 AM 8/29/2022 7:00:00 AM 11/16/2022 4:23:12 PM 11/9/2022 7:00:00 AM 11/30/2022 7:00:00 AM 01/17/2023 6:42:15 PM 1/10/2023 7:00:00 AM 1/31/2023 7:00:00 AM 03/22/2023 7:41:16 PM 3/15/2023 7:00:00 AM 4/5/2023 7:00:00 AM
新欄位的值位於 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因為使用 daystart() 函數,時間戳記值對應至一天中的第一毫秒。
由於 daystart() 函數中傳遞的第二引數為負值,提早還款期間值是到期日期前七天。
由於 daystart() 函數中傳遞的第二引數為正值,延遲還款期間值是到期日期後 14 天。
日期有上午 7:00 的時間戳記,因為傳遞至 daystart() 函數 day_start 的第三引數值為 7/24。