weekend - 指令碼與圖表函數
此功能傳回的值相當於包含 date的該行事曆週最後一天(星期天)的最後一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat。
語法:
WeekEnd(date [, period_no[, first_week_day]])
傳回的資料類型: 雙值
weekend() 函數判定日期落在哪一週。然後以日期格式傳回該週最後一毫秒的時間戳記。該週的第一天由 FirstWeekDay 環境變數決定。但是,這可由 weekend() 函數中的 first_week_day 引數取代。
引數 | 描述 |
---|---|
date | 要評估的時間戳記。 |
period_no | shift 為整數,值 0 表示是包含 date 的週。負值的 shift 表示之前的週,正值表示之後的週。 |
first_week_day |
指定一週開始的日期。如果忽略,將使用變數 FirstWeekDay 的值。 first_week_day 可能的值是對星期一使用 0、對星期二使用 1,對星期三使用 2,對星期四使用 3,對星期五使用 4,對星期六使用 5,並對星期日使用 6。 如需系統變數的更多資訊,請參閱 FirstWeekDay |
broken_weeks |
如果您未指定 broken_weeks,則變數 BrokenWeeks 的值將用於定義週是否中斷。 如需系統變數的更多資訊,請參閱 BrokenWeeks |
什麼情況下使用
weekend() 函數通常在使用者想要計算使用特定日期的每週剩餘日子時,作為運算式的一部分使用。例如,若使用者想要計算該週期間尚未發生的總利息,即可使用此函數。
範例 | 結果 |
---|---|
weekend('01/10/2013') | 傳回 01/12/2013 23:59:59。 |
weekend('01/10/2013', -1) | 傳回 01/05/2013 23:59:59.。 |
weekend('01/10/2013', 0, 1) | 傳回 01/14/2013 23:59:59。 |
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 – 基本範例
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 2022 年交易的資料集,這載入到稱為 Transactions 的表格中。
-
以 DateFormat 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。
-
建立欄位 end_of_week,這傳回交易發生時每週結束的時間戳記。
載入指令碼
SET FirstWeekDay=6;
Transactions:
Load
*,
weekend(date) as end_of_week,
timestamp(weekend(date)) as end_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
-
end_of_week
-
end_of_week_timestamp
日期 | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/08/2022 | 1/8/2022 11:59:59 PM |
1/19/2022 | 01/22/2022 | 1/22/2022 11:59:59 PM |
2/5/2022 | 02/05/2022 | 2/5/2022 11:59:59 PM |
2/28/2022 | 03/05/2022 | 3/5/2022 11:59:59 PM |
3/16/2022 | 03/19/2022 | 3/19/2022 11:59:59 PM |
4/1/2022 | 04/02/2022 | 4/2/2022 11:59:59 PM |
5/7/2022 | 05/07/2022 | 5/7/2022 11:59:59 PM |
5/16/2022 | 05/21/2022 | 5/21/2022 11:59:59 PM |
6/15/2022 | 06/18/2022 | 6/18/2022 11:59:59 PM |
6/26/2022 | 07/02/2022 | 7/2/2022 11:59:59 PM |
7/9/2022 | 07/09/2022 | 7/9/2022 11:59:59 PM |
7/22/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
7/23/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
7/27/2022 | 07/30/2022 | 7/30/2022 11:59:59 PM |
8/2/2022 | 08/06/2022 | 8/6/2022 11:59:59 PM |
8/8/2022 | 08/13/2022 | 8/13/2022 11:59:59 PM |
8/19/2022 | 08/20/2022 | 8/20/2022 11:59:59 PM |
9/26/2022 | 10/01/2022 | 10/1/2022 11:59:59 PM |
10/14/2022 | 10/15/2022 | 10/15/2022 11:59:59 PM |
10/29/2022 | 10/29/2022 | 10/29/2022 11:59:59 PM |
end_of_week 欄位在前置 LOAD 陳述式中的建立方式是使用 weekend() 函數並傳遞日期欄位,作為函數的引數。
weekend() 函數識別日期值落在哪一週,並傳回該週最後一毫秒的時間戳記。
交易 8191 發生在 2 月 5 日。FirstWeekDay 系統變數會將每週第一天設為星期日。weekend() 函數識別 2 月 5 日後的第一個星期六 – 因此是每週的結束 – 落在 2 月 5 日。因此,該交易的 end_of_week 值會傳回該日子的最後一毫秒,亦即 2 月 5 日下午 11:59:59。
範例 2 – period_no
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
與第一個範例相同的資料集和情境。
-
建立欄位 previous_week_end,這傳回交易發生之前每週開始的時間戳記。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekend(date,-1) as previous_week_end,
timestamp(weekend(date,-1)) as previous_week_end_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
-
previous_week_end
-
previous_week_end_timestamp
日期 | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 11:59:59 PM |
1/19/2022 | 01/15/2022 | 1/15/2022 11:59:59 PM |
2/5/2022 | 01/29/2022 | 1/29/2022 11:59:59 PM |
2/28/2022 | 02/26/2022 | 2/26/2022 11:59:59 PM |
3/16/2022 | 03/12/2022 | 3/12/2022 11:59:59 PM |
4/1/2022 | 03/26/2022 | 3/26/2022 11:59:59 PM |
5/7/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
5/16/2022 | 05/14/2022 | 5/14/2022 11:59:59 PM |
6/15/2022 | 06/11/2022 | 6/11/2022 11:59:59 PM |
6/26/2022 | 06/25/2022 | 6/25/2022 11:59:59 PM |
7/9/2022 | 07/02/2022 | 7/2/2022 11:59:59 PM |
7/22/2022 | 07/16/2022 | 7/16/2022 11:59:59 PM |
7/23/2022 | 07/16/2022 | 7/16/2022 11:59:59 PM |
7/27/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
8/2/2022 | 07/30/2022 | 7/30/2022 11:59:59 PM |
8/8/2022 | 08/06/2022 | 8/6/2022 11:59:59 PM |
8/19/2022 | 08/13/2022 | 8/13/2022 11:59:59 PM |
9/26/2022 | 09/24/2022 | 9/24/2022 11:59:59 PM |
10/14/2022 | 10/08/2022 | 10/8/2022 11:59:59 PM |
10/29/2022 | 10/22/2022 | 10/22/2022 11:59:59 PM |
在此例中,因為 period_no 的值 -1 已作為 weekend() 函數中的偏移引數使用,所以該函數首先會識別交易發生的週。然後這會查看前一週並識別該週的最後一毫秒。
交易 8196 發生在 6 月 15 日。weekend() 函數識別該週開始於 6 月 12 日。因此,前一週結束於 6 月 11 日 11:59:59 PM;這是 previous_week_end 欄位傳回的值。
範例 3 – first_week_day
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。但是在此範例中,我們必須將星期二設為工作週第一天。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekend(date,0,1) as end_of_week,
timestamp(weekend(date,0,1)) as end_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
-
end_of_week
-
end_of_week_timestamp
日期 | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/10/2022 | 1/10/2022 11:59:59 PM |
1/19/2022 | 01/24/2022 | 1/24/2022 11:59:59 PM |
2/5/2022 | 02/07/2022 | 2/7/2022 11:59:59 PM |
2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
3/16/2022 | 03/21/2022 | 3/21/2022 11:59:59 PM |
4/1/2022 | 04/04/2022 | 4/4/2022 11:59:59 PM |
5/7/2022 | 05/09/2022 | 5/9/2022 11:59:59 PM |
5/16/2022 | 05/16/2022 | 5/16/2022 11:59:59 PM |
6/15/2022 | 06/20/2022 | 6/20/2022 11:59:59 PM |
6/26/2022 | 06/27/2022 | 6/27/2022 11:59:59 PM |
7/9/2022 | 07/11/2022 | 7/11/2022 11:59:59 PM |
7/22/2022 | 07/25/2022 | 7/25/2022 11:59:59 PM |
7/23/2022 | 07/25/2022 | 7/25/2022 11:59:59 PM |
7/27/2022 | 08/01/2022 | 8/1/2022 11:59:59 PM |
8/2/2022 | 08/08/2022 | 8/8/2022 11:59:59 PM |
8/8/2022 | 08/08/2022 | 8/8/2022 11:59:59 PM |
8/19/2022 | 08/22/2022 | 8/22/2022 11:59:59 PM |
9/26/2022 | 09/26/2022 | 9/26/2022 11:59:59 PM |
10/14/2022 | 10/17/2022 | 10/17/2022 11:59:59 PM |
10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
在此例中,因為 first_week_date 引數的值 1 已用於 weekend() 函數中,所以這會將每週第一天設為星期二。
交易 8191 發生在 2 月 5 日。weekend() 函數識別此日期後的第一個星期一 – 因此是每週的結束並傳回該值 – 落在 2 月 6 日 11:59:59 PM。
範例 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。
若要計算交易發生的該週開始時間,新增下列量值:
-
=weekend(date)
-
=timestamp(weekend(date))
日期 | =weekend(date) | =timestamp(weekend(date)) |
---|---|---|
1/7/2022 | 01/08/2022 | 1/8/2022 11:59:59 PM |
1/19/2022 | 01/22/2022 | 1/22/2022 11:59:59 PM |
2/5/2022 | 02/05/2022 | 2/5/2022 11:59:59 PM |
2/28/2022 | 03/05/2022 | 3/5/2022 11:59:59 PM |
3/16/2022 | 03/19/2022 | 3/19/2022 11:59:59 PM |
4/1/2022 | 04/02/2022 | 4/2/2022 11:59:59 PM |
5/7/2022 | 05/07/2022 | 5/7/2022 11:59:59 PM |
5/16/2022 | 05/21/2022 | 5/21/2022 11:59:59 PM |
6/15/2022 | 06/18/2022 | 6/18/2022 11:59:59 PM |
6/26/2022 | 07/02/2022 | 7/2/2022 11:59:59 PM |
7/9/2022 | 07/09/2022 | 7/9/2022 11:59:59 PM |
7/22/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
7/23/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
7/27/2022 | 07/30/2022 | 7/30/2022 11:59:59 PM |
8/2/2022 | 08/06/2022 | 8/6/2022 11:59:59 PM |
8/8/2022 | 08/13/2022 | 8/13/2022 11:59:59 PM |
8/19/2022 | 08/20/2022 | 8/20/2022 11:59:59 PM |
9/26/2022 | 10/01/2022 | 10/1/2022 11:59:59 PM |
10/14/2022 | 10/15/2022 | 10/15/2022 11:59:59 PM |
10/29/2022 | 10/29/2022 | 10/29/2022 11:59:59 PM |
end_of_week 量值在圖表物件中的建立方式是使用 weekend() 函數並傳遞日期欄位,作為函數的引數。weekend() 函數識別日期值落在哪一週,並傳回該週最後一毫秒的時間戳記。
交易 8191 發生在 2 月 5 日。FirstWeekDay 系統變數會將每週第一天設為星期日。weekend() 函數識別 2 月 5 日後的第一個星期六 – 因此是每週的結束 – 落在 2 月 5 日。因此,該交易的 end_of_week 值會傳回該日子的最後一毫秒,亦即 2 月 5 日下午 11:59:59。
範例 5 – 情境
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
載入到稱為 Employee_Expenses 之表格的資料集。
-
由員工 ID、員工姓名及每個員工報銷的平均每日開支組成的資料。
最終使用者希望圖表物件按員工 ID 和員工名稱顯示該週剩餘期間仍會產生的預估開支報銷。
載入指令碼
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
結果
請執行下列動作:
-
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
employee_id
-
employee_name
-
-
接下來,建立量值以計算累積的利息:
=(weekend(today(1))-today(1))*avg_daily_claim
-
將量值的數字格式設定為金錢。
employee_id | employee_name | =(weekend(today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $90.00 |
183 | Deryck | $75.00 |
184 | Dexter | $75.00 |
185 | Sydney | $162.00 |
186 | Agatha | $108.00 |
藉由使用今日日期作為其唯一函數,weekend() 函數會傳回目前週的結束日期。然後,以該週結束日期減去今日日期,運算式就會傳回該週剩餘天數。
然後按員工讓此值乘以平均每日開支報銷,以計算每個員工在該週剩餘期間預期會有的預估報銷值。