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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
SOD_timestamp
日期 | SOD_timestamp |
---|---|
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
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含停車罰款的資料集,這載入到名為 Fines 的表格中。資料集包括下列欄位:
-
id
-
due_date
-
number_plate
-
amount
-
-
使用 daystart() 函數並提供所有三個參數的前置載入:time、period_no 和 day_start。此前置載入建立下列兩個新的日期欄位:
-
early_repayment_period 日期欄位,在付款到期前七天開始。
-
late_penalty_period 日期欄位,在付款到期後 14 天開始。
-
載入指令碼
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
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
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)
due_date | =daystart(due_date,-7,7/24) | =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。