weekstart - 指令碼與圖表函數在此頁面
此功能傳回的值相當於包含 date 的行事曆週第一天、第一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat 。
語法:
WeekStart( timestamp [, period_no [, first_week_day ]] )
傳回的資料類型: 雙值
weekstart() 函數判定日期落在哪一週。然後以日期格式傳回該週第一毫秒的時間戳記。該週的第一天由 FirstWeekDay 環境變數決定。但是,這可由 weekstart() 函數中的 first_week_day 引數取代。
引數 timestamp 要評估的時間戳記。 period_no shift 為整數,值 0 表示是包含 date 的週。負值的 shift 表示之前的週,正值表示之後的週。first_week_day 指定一週開始的日期。如果忽略,將使用變數 FirstWeekDay 的值。
first_week_day 可能的值是對星期一使用 0、對星期二使用 1,對星期三使用 2,對星期四使用 3,對星期五使用 4,對星期六使用 5,並對星期日使用 6。
如需系統變數的更多資訊,請參閱 FirstWeekDay 。
什麼情況下使用 weekstart() 函數通常在使用者想要計算使用一週中已經過的部分時,作為運算式的一部分使用。例如,若使用者想要計算員工目前為止在一週中所賺取的總工資,即可使用此函數。
下列範例假設:
SET FirstWeekDay=0;
函數範例 weekstart('01/12/2013') 傳回 01/07/2013 。 weekstart('01/12/2013', -1 ) 傳回 11/31/2012 。 weekstart('01/12/2013', 0, 1) 傳回 01/08/2013 。
區域設定 除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例:
若您想要週和週數的 ISO 設定,確認指令碼中有下列內容:
Set DateFormat ='YYYY-MM-DD';
Set FirstWeekDay =0; // Monday as first week day
Set BrokenWeeks =0; //(use unbroken weeks)
Set ReferenceDay =4; // Jan 4th is always in week 1
若您想要 US 設定,確認指令碼中有下列內容:
Set DateFormat ='M/D/YYYY';
Set FirstWeekDay =6; // Sunday as first week day
Set BrokenWeeks =1; //(use broken weeks)
Set ReferenceDay =1; // Jan 1st is always in week 1
以上範例從 weekstart() 函數產生下列內容:
Weekstart 函數範例 日期 ISO 週開始 US 週開始 Sat 2020 Dec 26 2020-12-21 12/20/2020 Sun 2020 Dec 27 2020-12-21 12/27/2020 Mon 2020 Dec 28 2020-12-28 12/27/2020 Tue 2020 Dec 29 2020-12-28 12/27/2020 Wed 2020 Dec 30 2020-12-28 12/27/2020 Thu 2020 Dec 31 2020-12-28 12/27/2020 Fri 2021 Jan 1 2020-12-28 12/27/2020 Sat 2021 Jan 2 2020-12-28 12/27/2020 Sun 2021 Jan 3 2020-12-28 1/3/2021 Mon 2021 Jan 4 2021-01-04 1/3/2021 Tue 2021 Jan 5 2021-01-04 1/3/2021
資訊備註 在 ISO 欄中,一週在星期一開始,而在 US 欄中,在星期日開始。
範例 1 – 無其他引數 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
包含一組 2022 年交易的資料集,這載入到稱為 Transactions 的表格中。
以 DateFormat 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。
建立欄位 start_of_week ,這傳回交易發生時每週開始的時間戳記。
載入指令碼
SET FirstWeekDay=6;
Transactions:
Load
*,
weekstart(date) as start_of_week,
timestamp(weekstart(date)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
date
start_of_week
start_of_week_timestamp
結果表格 1/7/2022 01/02/2022 1/2/2022 12:00:00 AM 1/19/2022 01/16/2022 1/16/2022 12:00:00 AM 2/5/2022 01/30/2022 1/30/2022 12:00:00 AM 2/28/2022 02/27/2022 2/27/2022 12:00:00 AM 3/16/2022 03/13/2022 3/13/2022 12:00:00 AM 4/1/2022 03/27/2022 3/27/2022 12:00:00 AM 5/7/2022 05/01/2022 5/1/2022 12:00:00 AM 5/16/2022 05/15/2022 5/15/2022 12:00:00 AM 6/15/2022 06/12/2022 6/12/2022 12:00:00 AM 6/26/2022 06/26/2022 6/26/2022 12:00:00 AM 7/9/2022 07/03/2022 7/3/2022 12:00:00 AM 7/22/2022 07/17/2022 7/17/2022 12:00:00 AM 7/23/2022 07/17/2022 7/17/2022 12:00:00 AM 7/27/2022 07/24/2022 7/24/2022 12:00:00 AM 8/2/2022 07/31/2022 7/31/2022 12:00:00 AM 8/8/2022 08/07/2022 8/7/2022 12:00:00 AM 8/19/2022 08/14/2022 8/14/2022 12:00:00 AM 9/26/2022 09/25/2022 9/25/2022 12:00:00 AM 10/14/2022 10/09/2022 10/9/2022 12:00:00 AM 10/29/2022 10/23/2022 10/23/2022 12:00:00 AM
start_of_week 欄位在前置 LOAD 陳述式中的建立方式是使用 weekstart() 函數並傳遞日期欄位,作為函數的引數。
The weekstart() 函數最初識別日期值落在哪一週,並傳回該週第一毫秒的時間戳記。
weekstart() 函數的圖表,無其他引數的範例
交易 8191 發生在 2 月 5 日。FirstWeekDay 系統變數會將每週第一天設為星期日。weekstart() 函數識別 2 月 5 日前的第一個星期六 – 因此是每週的開始 – 落在 1 月 30 日。因此,該交易的 start_of_week 值會傳回該日子的第一毫秒,亦即 1 月 30 日上午 12:00:00。
範例 2 – period_no 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,-1) as previous_week_start,
timestamp(weekstart(date,-1)) as previous_week_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格 1/7/2022 12/26/2021 12/26/2021 12:00:00 AM 1/19/2022 01/09/2022 1/9/2022 12:00:00 AM 2/5/2022 01/23/2022 1/23/2022 12:00:00 AM 2/28/2022 02/20/2022 2/20/2022 12:00:00 AM 3/16/2022 03/06/2022 3/6/2022 12:00:00 AM 4/1/2022 03/20/2022 3/20/2022 12:00:00 AM 5/7/2022 04/24/2022 4/24/2022 12:00:00 AM 5/16/2022 05/08/2022 5/8/2022 12:00:00 AM 6/15/2022 06/05/2022 6/5/2022 12:00:00 AM 6/26/2022 06/19/2022 6/19/2022 12:00:00 AM 7/9/2022 06/26/2022 6/26/2022 12:00:00 AM 7/22/2022 07/10/2022 7/10/2022 12:00:00 AM 7/23/2022 07/10/2022 7/10/2022 12:00:00 AM 7/27/2022 07/17/2022 7/17/2022 12:00:00 AM 8/2/2022 07/24/2022 7/24/2022 12:00:00 AM 8/8/2022 07/31/2022 7/31/2022 12:00:00 AM 8/19/2022 08/07/2022 8/7/2022 12:00:00 AM 9/26/2022 09/18/2022 9/18/2022 12:00:00 AM 10/14/2022 10/02/2022 10/2/2022 12:00:00 AM 10/29/2022 10/16/2022 10/16/2022 12:00:00 AM
在此例中,因為 period_no 的值 -1 已作為 weekstart() 函數中的偏移引數使用,所以該函數首先會識別交易發生的週。然後這會查看前一週並識別該週的第一毫秒。
weekstart() 函數的圖表,period_no 範例
交易 8196 發生在 6 月 15 日。weekstart() 函數識別該週開始於 6 月 12 日。因此,前一週開始於 6 月 5 日 12:00:00 AM;這是 previous_week_start 欄位傳回的值。
範例 3 – first_week_day 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。但是在此範例中,我們必須將星期二設為工作週第一天。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,0,1) as start_of_week,
timestamp(weekstart(date,0,1)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
date
start_of_week
start_of_week_timestamp
結果表格 1/7/2022 01/04/2022 1/4/2022 12:00:00 AM 1/19/2022 01/18/2022 1/18/2022 12:00:00 AM 2/5/2022 02/01/2022 2/1/2022 12:00:00 AM 2/28/2022 02/22/2022 2/22/2022 12:00:00 AM 3/16/2022 03/15/2022 3/15/2022 12:00:00 AM 4/1/2022 03/29/2022 3/29/2022 12:00:00 AM 5/7/2022 05/03/2022 5/3/2022 12:00:00 AM 5/16/2022 05/10/2022 5/10/2022 12:00:00 AM 6/15/2022 06/14/2022 6/14/2022 12:00:00 AM 6/26/2022 06/21/2022 6/21/2022 12:00:00 AM 7/9/2022 07/05/2022 7/5/2022 12:00:00 AM 7/22/2022 07/19/2022 7/19/2022 12:00:00 AM 7/23/2022 07/19/2022 7/19/2022 12:00:00 AM 7/27/2022 07/26/2022 7/26/2022 12:00:00 AM 8/2/2022 08/02/2022 8/2/2022 12:00:00 AM 8/8/2022 08/02/2022 8/2/2022 12:00:00 AM 8/19/2022 08/16/2022 8/16/2022 12:00:00 AM 9/26/2022 09/20/2022 9/20/2022 12:00:00 AM 10/14/2022 10/11/2022 10/11/2022 12:00:00 AM 10/29/2022 10/25/2022 10/25/2022 12:00:00 AM
在此例中,因為 first_week_date 引數的值 1 已用於 weekstart() 函數中,所以這會將每週第一天設為星期二。
weekstart() 函數的圖表,first_week_day 範例
交易 8191 發生在 2 月 5 日。weekstart() 函數識別此日期前的第一個星期二 – 因此是每週的開始並傳回該值 – 落在 2 月 1 日 12:00:00 AM。
範例 4 – 圖表物件範例 載入指令碼和圖表運算式 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。
不過,在此範例中,不變的資料集會載入到應用程式中。會建立傳回交易發生週開始時間戳記的計算,作為應用程式圖表物件中的量值。
載入指令碼
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: date 。
若要計算交易發生的該週開始時間,新增下列量值:
結果表格 1/7/2022 01/02/2022 1/2/2022 12:00:00 AM 1/19/2022 01/16/2022 1/16/2022 12:00:00 AM 2/5/2022 01/30/2022 1/30/2022 12:00:00 AM 2/28/2022 02/27/2022 2/27/2022 12:00:00 AM 3/16/2022 03/13/2022 3/13/2022 12:00:00 AM 4/1/2022 03/27/2022 3/27/2022 12:00:00 AM 5/7/2022 05/01/2022 5/1/2022 12:00:00 AM 5/16/2022 05/15/2022 5/15/2022 12:00:00 AM 6/15/2022 06/12/2022 6/12/2022 12:00:00 AM 6/26/2022 06/26/2022 6/26/2022 12:00:00 AM 7/9/2022 07/03/2022 7/3/2022 12:00:00 AM 7/22/2022 07/17/2022 7/17/2022 12:00:00 AM 7/23/2022 07/17/2022 7/17/2022 12:00:00 AM 7/27/2022 07/24/2022 7/24/2022 12:00:00 AM 8/2/2022 07/31/2022 7/31/2022 12:00:00 AM 8/8/2022 08/07/2022 8/7/2022 12:00:00 AM 8/19/2022 08/14/2022 8/14/2022 12:00:00 AM 9/26/2022 09/25/2022 9/25/2022 12:00:00 AM 10/14/2022 10/09/2022 10/9/2022 12:00:00 AM 10/29/2022 10/23/2022 10/23/2022 12:00:00 AM
start_of_week 量值在圖表物件中的建立方式是使用 weekstart() 函數並傳遞 date 欄位,作為函數的引數。
The weekstart() 函數最初識別日期值落在哪一週,並傳回該週第一毫秒的時間戳記。
weekstart() 函數的圖表,圖表物件範例
交易 8191 發生在 2 月 5 日。FirstWeekDay 系統變數會將每週第一天設為星期日。weekstart() 函數識別 2 月 5 日前的第一個星期日 – 因此是每週開始 – 落在 1 月 30 日。因此,該交易的 start_of_week 值傳回該日子的第一毫秒,亦即 1 月 30 日上午 12:00:00。
範例 5 – 情境 載入指令碼和圖表運算式 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
員工在星期一開始工作且每週工作六天。FirstWeekDay 系統變數不得修改。
最終使用者想要圖表物件按員工 ID 和員工姓名顯示該週至今所賺取的工資。
載入指令碼
Payroll:
Load
*
Inline
[
employee_id,employee_name,day_rate
182,Mark, $150
183,Deryck, $125
184,Dexter, $125
185,Sydney,$270
186,Agatha,$128
];
結果
請執行下列動作:
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
接下來,建立量值以計算該週至今所賺取的工資:
=if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6)
將量值的數字格式 設定為金錢 。
結果表格 182 Mark $600.00 183 Deryck $500.00 184 Dexter $500.00 185 Sydney $1080.00 186 Agatha $512.00
藉由使用今日日期作為其第一個引數,weekstart() 函數會將星期一設為該週第一天並傳回目前週的開始日期。以目前日期減去該結果後,運算式會傳回本週目前已經過的天數。
然後條件就會評估本週是否超過六天。如果是的話,員工的 day_rate 會乘以 6 天。否則,day_rate 會乘以本週目前為止已經過的天數。