weekend - 指令碼與圖表函數在此頁面
此功能傳回的值相當於包含 date 的該行事曆週最後一天的最後一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat 。
語法:
WeekEnd( timestamp [, period_no [, first_week_day ]] )
傳回的資料類型: 雙值
weekend() 函數判定日期落在哪一週。然後以日期格式傳回該週最後一毫秒的時間戳記。該週的第一天由 FirstWeekDay 環境變數決定。但是,這可由 weekend() 函數中的 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
什麼情況下使用 weekend() 函數通常在使用者想要計算使用特定日期的每週剩餘日子時,作為運算式的一部分使用。例如,若使用者想要計算該週期間尚未發生的總利息,即可使用此函數。
下列範例假設:
SET FirstWeekDay=0;
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 顯示的語言將與您正在使用的瀏覽器相同。
範例:
若您想要週和週數的 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
以上範例從 weekend() 函數產生下列內容:
Weekend 函數範例 日期 ISO 週結束 US 週結束 Sat 2020 Dec 26 2020-12-27 12/26/2020 Sun 2020 Dec 27 2020-12-27 1/2/2021 Mon 2020 Dec 28 2021-01-03 1/2/2021 Tue 2020 Dec 29 2021-01-03 1/2/2021 Wed 2020 Dec 30 2021-01-03 1/2/2021 Thu 2020 Dec 31 2021-01-03 1/2/2021 Fri 2021 Jan 1 2021-01-03 1/2/2021 Sat 2021 Jan 2 2021-01-03 1/2/2021 Sun 2021 Jan 3 2021-01-03 1/9/2021 Mon 2021 Jan 4 2021-01-10 1/9/2021 Tue 2021 Jan 5 2021-01-10 1/9/2021
資訊備註 在 ISO 欄中,一週在星期日結束,而在 US 欄中,在星期六結束。
範例 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
結果表格 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() 函數識別日期值落在哪一週,並傳回該週最後一毫秒的時間戳記。
weekend() 函數的圖表,基本範例
交易 8191 發生在 2 月 5 日。FirstWeekDay 系統變數會將每週第一天設為星期日。weekend() 函數識別 2 月 5 日後的第一個星期六 – 因此是每週的結束 – 落在 2 月 5 日。因此,該交易的 end_of_week 值會傳回該日子的最後一毫秒,亦即 2 月 5 日下午 11:59:59。
範例 2 – period_no 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入指令碼
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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格 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() 函數中的偏移引數使用,所以該函數首先會識別交易發生的週。然後這會查看前一週並識別該週的最後一毫秒。
weekend() 函數的圖表,period_no 範例
交易 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
結果表格 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() 函數中,所以這會將每週第一天設為星期二。
weekend() 函數的圖表,first_week_day 範例
交易 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 。
若要計算交易發生的該週開始時間,新增下列量值:
結果表格 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() 函數識別日期值落在哪一週,並傳回該週最後一毫秒的時間戳記。
weekend() 函數的圖表,圖表物件範例
交易 8191 發生在 2 月 5 日。FirstWeekDay 系統變數會將每週第一天設為星期日。weekend() 函數識別 2 月 5 日後的第一個星期六 – 因此是每週的結束 – 落在 2 月 5 日。因此,該交易的 end_of_week 值會傳回該日子的最後一毫秒,亦即 2 月 5 日下午 11:59:59。
範例 5 – 情境 載入指令碼和圖表運算式 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
最終使用者希望圖表物件按員工 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
];
結果
請執行下列動作:
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
接下來,建立量值以計算累積的利息:
=(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() 函數會傳回目前週的結束日期。然後,以該週結束日期減去今日日期,運算式就會傳回該週剩餘天數。
然後按員工讓此值乘以平均每日開支報銷,以計算每個員工在該週剩餘期間預期會有的預估報銷值。