makeweekdate - 指令碼與圖表函數在此頁面
此函數會傳回從年、週數及星期幾計算而得的日期。
語法:
MakeWeekDate( weekyear [, week [, weekday [, first_week_day [, broken_weeks [, reference_day]]]]] )
傳回的資料類型: 雙值
makeweekdate() 函數可作為指令碼和圖表函數。該函數將根據傳遞至函數中的參數計算日期。
引數
weekyear
WeekYear() 函數為特定日期定義的年份,亦即該週數屬於的年份。
資訊備註 在某些情況下,該週年份可以與日曆年份不同,例如,若第 1 週已在上一年的 12 月開始。
week
Week() 函數為特定日期定義的週數。
如未指定週數,則會採用 1。
weekday
WeekDay() 函數為問題中的日期定義的星期幾。0 是一週的第一天,而 6 是一週的最後一天。
如未指定星期幾,則會採用 0。
資訊備註 即使 0 一律代表一週的第一天,而 6 一律是最後一天,對應至星期幾仍然由 first_week_day 參數決定。如果忽略,將使用變數 FirstWeekDay 的值。
若使用中斷的週,以及不可能的參數組合,這可能會導致不屬於所選年份的結果。
範例:
MakeWeekDate(2021,1,0,6,1)
傳回「Dec 27 2020」,因為此日是指定週的第一天 (星期日)。2021 年 1 月 1 日是星期五。
first_week_day
指定一週開始的日期。如果忽略,將使用變數 FirstWeekDay 的值。
first_week_day 可能的值是對星期一使用 0、對星期二使用 1,對星期三使用 2,對星期四使用 3,對星期五使用 4,對星期六使用 5,並對星期日使用 6。
如需系統變數的更多資訊,請參閱 FirstWeekDay 。
broken_weeks
如果您未指定 broken_weeks ,則變數 BrokenWeeks 的值會用於定義週是否中斷。
如需系統變數的更多資訊,請參閱 BrokenWeeks
reference_day
如果您不指定 reference_day ,變數 ReferenceDay 的值會用於定義要設定一月份的哪一天為參照日以定義第 1 週。
如需系統變數的更多資訊,請參閱 ReferenceDay
什麼情況下使用
makeweekdate() 函數通常用於進行資料產生的指令碼中,以產生日期清單,或用來在輸入資料中提供年份、週和星期幾時建構日期。
下列範例假設:
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
函數範例
makeweekdate(2014,6,6)
傳回 02/09/2014
makeweekdate(2014,6,1)
傳回 02/04/2014
makeweekdate(2014,6)
傳回 02/03/2014 (採用工作日 0)
區域設定 除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 – 含日子 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
稱為 Sales 的表格中包含 2022 年每週銷售總額的資料集。
跨越三個欄位提供的交易日期:year 、week 和 sales 。
用來建立量值 end_of_week 的前置載入,使用 makeweekdate() 函數以格式 MM/DD/YYYY 傳回該週星期五的日期。
若要證明傳回的日期是星期五,end_of_week 運算式也包覆在 weekday() 函數中,以顯示星期幾。
載入指令碼
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week,4) as end_of_week,
weekday(makeweekdate(transaction_year, transaction_week,4)) as week_day
;
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
transaction_year
transaction_week
end_of_week
week_day
結果表格 2022 01 01/07/2022 星期五 2022 02 01/14/2022 星期五 2022 03 01/21/2022 星期五 2022 04 01/28/2022 星期五 2022 05 02/04/2022 星期五 2022 06 02/11/2022 星期五 2022 07 02/18/2022 星期五
「end_of_week 」欄位使用 makeweekdate() 函數在前置 LOAD 陳述式中建立。透過該函數傳遞 transaction_week 欄位 transaction_year 作為年和週引數。值 4 用於日子引數。
然後該函數會將這些值合併並轉換為日期欄位,以 DateFormat 系統變數格式傳回結果。
makeweekdate() 函數及其引數也包覆在 weekday() 函數中,以傳回 week_day 欄位;如上表所見,week_day 欄位顯示這些日期的確發生在星期五。
範例 2 – 排除日子 載入指令碼和結果 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
稱為 Sales 的表格中包含 2022 年每週銷售總額的資料集。
跨越三個欄位提供的交易日期:year 、week 和 sales 。
使用 makeweekdate() 函數建立量值 first_day_of_week 的前置載入。這將會以格式 MM/DD/YYYY 傳回該週星期一的日期。
若要證明傳回的日期是星期一,first_day_of_week 運算式也包覆在 weekday() 函數中,以顯示星期幾。
載入指令碼
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week) as first_day_of_week,
weekday(makeweekdate(transaction_year, transaction_week)) as week_day
;
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
transaction_year
transaction_week
first_day_of_week
week_day
結果表格 2022 01 01/03/2022 星期一 2022 02 01/10/2022 星期一 2022 03 01/17/2022 星期一 2022 04 01/24/2022 星期一 2022 05 01/31/2022 星期一 2022 06 02/07/2022 星期一 2022 07 02/14/2022 星期一
first_day_of_week 欄位使用 makeweekdate() 函數在前置 LOAD 陳述式中建立。transaction_year 和 transaction_week 參數作為函數引數傳遞,而日子參數則留下空白。
然後該函數會將這些值合併並轉換為日期欄位,以 DateFormat 系統變數格式傳回結果。
makeweekdate() 函數及其引數也會包覆在 weekday() 函數中,以傳回 week_day 欄位。如上表所見,week_day 欄位在所有情況下都傳回星期一,因為該參數在 makeweekdate() 函數中為空白,預設為 0 (一週的第一天),而一週的第一天由 FirstWeekDay 系統變數設為星期一。
範例 3 – 圖表物件範例 載入指令碼和圖表運算式 概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
在此範例中,圖表物件將用來建立等同於第一個範例中 end_of_week 計算的量值。此量值將會使用 makeweekdate() 函數以格式 MM/DD/YYYY 傳回該週星期五的日期。
若要證明傳回的日期是星期五,建立第二個量值,以傳回星期幾。
載入指令碼
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Master_Calendar:
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
結果
請執行下列動作:
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
transaction_year
transaction_week
若要執行等同於第一個範例中 end_of_week 欄位的計算,建立下列量值:
=makeweekdate(transaction_year,transaction_week,4)
若要計算每個交易是星期幾,建立下列量值:
=weekday(makeweekdate(transaction_year,transaction_week,4))
結果表格 2022 01 01/07/2022 星期五 2022 02 01/14/2022 星期五 2022 03 01/21/2022 星期五 2022 04 01/28/2022 星期五 2022 05 02/04/2022 星期五 2022 06 02/11/2022 星期五 2022 07 02/18/2022 星期五
會使用 makeweekdate() 函數在圖表物件中建立等同於 end_of_week 的欄位作為量值。傳遞 transaction_year 和 transaction_week 欄位作為年和週引數。值 4 用於日子引數。
然後該函數會將這些值合併並轉換為日期欄位,以 DateFormat 系統變數格式傳回結果。
makeweekdate() 函數及其引數也會包覆在 weekday() 函數中,以傳回等同於第一個範例中 week_day 欄位的計算。如上表所見,右側最後一欄顯示這些日期的確發生在星期五。
範例 4 – 情境 載入指令碼和圖表運算式 概覽
在此範例中,建立包含 2022 年所有星期五的日期清單。
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Calendar:
load
*,
weekday(date) as weekday
where year(date)=2022;
load
makeweekdate(2022,recno()-2,4) as date
AutoGenerate 60;
結果
結果表格 01/07/2022 星期五 01/14/2022 星期五 01/21/2022 星期五 01/28/2022 星期五 02/04/2022 星期五 02/11/2022 星期五 02/18/2022 星期五 02/25/2022 星期五 03/04/2022 星期五 03/11/2022 星期五 03/18/2022 星期五 03/25/2022 星期五 04/01/2022 星期五 04/08/2022 星期五 04/15/2022 星期五 04/22/2022 星期五 04/29/2022 星期五 05/06/2022 星期五 05/13/2022 星期五 05/20/2022 星期五 05/27/2022 星期五 06/03/2022 星期五 06/10/2022 星期五 06/17/2022 星期五 還有 + 27 列
makeweekdate() 函數尋找 2022 年的每個星期五。使用週參數 -2 確保不會遺漏任何日期。最後,前置載入建立附加 weekday 欄位,以便清楚顯示每個 date 值是星期五。