weekname - 指令碼與圖表函數
此函數會傳回顯示年度和週數的值,其基礎數值相當於包含 date 之週的第一天、第一毫秒的時間戳記。
語法:
WeekName(date[, period_no[,first_week_day]])
weekname() 函數判定日期落在哪一週並傳回週數和該週的年份。該週的第一天由 FirstWeekDay 系統變數決定。不過,您可以使用 weekname() 函數中的 first_week_day 引數變更該週的第一天。
依照預設,Qlik Sense 應用程式使用中斷的週 (由 BrokenWeeks 系統變數定義),因此週數計數在 1 月 1 日開始,並在 FirstWeekDay 系統變數的前一天結束,無論發生了多少天。
不過,若應用程式正在使用未中斷的週,則第 1 週可以在前一年或 1 月的開頭幾天開始。這取決於您如何使用 ReferenceDay 和 FirstWeekDay 系統變數。
什麼情況下使用
若您想要按週比較彙總,則 weekname() 函數很實用。
例如,若您想要按週查看產品的總銷售額。若要在應用程式中維護與 BrokenWeeks 環境變數的一致性,請使用 weekname() 而非 lunarweekname()。若應用程式正在使用未中斷的週,則第 1 週可能包含上一年 12 月中的日期,或排除目前年份 1 月的日期。若應用程式正在使用中斷的週,則第 1 週的天數可少於七天。
傳回的資料類型: 雙值
引數 | 描述 |
---|---|
date | 要評估的時間戳記。 |
period_no | shift 為整數,值 0 表示是包含 date 的週。負值的 shift 表示之前的週,正值表示之後的週。 |
first_week_day |
指定一週開始的日期。如果忽略,將使用變數 FirstWeekDay 的值。 first_week_day 可能的值是對星期一使用 0、對星期二使用 1,對星期三使用 2,對星期四使用 3,對星期五使用 4,對星期六使用 5,並對星期日使用 6。 如需系統變數的更多資訊,請參閱 FirstWeekDay。 |
您可以在 first_week_day 引數中使用下列值設定一週開始的日期:
日 | 值 |
---|---|
星期一 | 0 |
星期二 | 1 |
星期三 | 2 |
星期四 | 3 |
星期五 | 4 |
星期六 | 5 |
星期日 | 6 |
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 | 結果 |
---|---|
weekname('01/12/2013') | 傳回 2013/02。 |
weekname('01/12/2013', -1) | Returns 2013/01. |
weekname('01/12/2013', 0, 1) | 傳回 2013/02。 |
範例 1 – 無其他引數的日期
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 2021 年最後一週和 2022 年前兩週交易的資料集,這載入到稱為「Transactions」的表格中。
-
設定為 MM/DD/YYYY 格式的 DateFormat 系統變數。
-
設定為 1 的 BrokenWeeks 系統變數。
-
設定為 6 的 FirstWeekDay 系統變數。
-
前置載入包含下列內容:
-
設定為欄位「week_number」的 weekday() 函數,傳回交易發生年份和週數。
-
設定為稱為「week_day」之欄位的 weekname() 函數,以顯示每個交易日期的星期值。
-
載入指令碼
SET BrokenWeeks=1;
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
Transactions:
Load
*,
WeekDay(date) as week_day,
Weekname(date) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
week_day
-
week_number
id | 日期 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 星期一 | 2021/53 |
8184 | 12/28/2021 | 星期二 | 2021/53 |
8185 | 12/29/2021 | 星期三 | 2021/53 |
8186 | 12/30/2021 | 星期四 | 2021/53 |
8187 | 12/31/2021 | 星期五 | 2021/53 |
8188 | 01/01/2022 | 星期六 | 2022/01 |
8189 | 01/02/2022 | 星期日 | 2022/02 |
8190 | 01/03/2022 | 星期一 | 2022/02 |
8191 | 01/04/2022 | 星期二 | 2022/02 |
8192 | 01/05/2022 | 星期三 | 2022/02 |
8193 | 01/06/2022 | 星期四 | 2022/02 |
8194 | 01/07/2022 | 星期五 | 2022/02 |
8195 | 01/08/2022 | 星期六 | 2022/02 |
8196 | 01/09/2022 | 星期日 | 2022/03 |
8197 | 01/10/2022 | 星期一 | 2022/03 |
8198 | 01/11/2022 | 星期二 | 2022/03 |
8199 | 01/12/2022 | 星期三 | 2022/03 |
8200 | 01/13/2022 | 星期四 | 2022/03 |
8201 | 01/14/2022 | 星期五 | 2022/03 |
「week_number」欄位在前置 LOAD 陳述式中的建立方式是使用 weekname() 函數並傳遞日期欄位,作為函數的引數。
weekname() 函數最初識別日期值落在哪一週並傳回交易發生的週數計數和年份。
FirstWeekDay 系統變數將星期日設為該週的第一天。BrokenWeeks 系統變數設定應用程式以使用中斷的週,表示第 1 週將從 1 月 1 日開始。
第 1 週從 1 月 1 日開始,這天是星期六,因此發生在此日期的交易會傳回值 2022/01 (年份和週數)。
因為應用程式使用中斷的週且一週的第一天是星期日,所以從 1 月 2 日到 1 月 8 日發生的交易會傳回值 2022/02 (2022 年第 2 週)。這種情況的範例會是發生在 1 月 5 日的交易 8192 並傳回「week_number」欄位的值 2022/02。
範例 2 – period_no
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,任務是要建立欄位「previous_week_number」,這傳回交易發生之前的年份和週數。
開啟 資料載入編輯器 並將以下載入指令碼新增至新的索引標籤。
載入指令碼
SET BrokenWeeks=1;
SET FirstWeekDay=6;
Transactions:
Load
*,
weekname(date,-1) as previous_week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
week_day
-
week_number
id | 日期 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 星期一 | 2021/52 |
8184 | 12/28/2021 | 星期二 | 2021/52 |
8185 | 12/29/2021 | 星期三 | 2021/52 |
8186 | 12/30/2021 | 星期四 | 2021/52 |
8187 | 12/31/2021 | 星期五 | 2021/52 |
8188 | 01/01/2022 | 星期六 | 2021/52 |
8189 | 01/02/2022 | 星期日 | 2021/53 |
8190 | 01/03/2022 | 星期一 | 2021/53 |
8191 | 01/04/2022 | 星期二 | 2021/53 |
8192 | 01/05/2022 | 星期三 | 2021/53 |
8193 | 01/06/2022 | 星期四 | 2021/53 |
8194 | 01/07/2022 | 星期五 | 2021/53 |
8195 | 01/08/2022 | 星期六 | 2022/01 |
8196 | 01/09/2022 | 星期日 | 2022/02 |
8197 | 01/10/2022 | 星期一 | 2022/02 |
8198 | 01/11/2022 | 星期二 | 2022/02 |
8199 | 01/12/2022 | 星期三 | 2022/02 |
8200 | 01/13/2022 | 星期四 | 2022/02 |
8201 | 01/14/2022 | 星期五 | 2022/02 |
因為 period_no 的值 -1 作為 weekname() 函數中的偏移引數使用,所以該函數首先會識別交易發生的週。然後這會查看前一週並識別該週的第一毫秒。
交易 8192 發生在 2022 年 1 月 5 日。weekname() 函數查看前一週,即 2021 年 12 月 30 日,並傳回該日期的週數和年份 – 2021/53。
範例 3 – first_week_day
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,公司政策適用於在星期二開始的工作週。
開啟 資料載入編輯器 並將以下載入指令碼新增至新的索引標籤。
載入指令碼
SET BrokenWeeks=1;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekday(date) as week_day,
weekname(date,0,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
week_day
-
week_number
id | 日期 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 星期一 | 2021/52 |
8184 | 12/28/2021 | 星期二 | 2021/53 |
8185 | 12/29/2021 | 星期三 | 2021/53 |
8186 | 12/30/2021 | 星期四 | 2021/53 |
8187 | 12/31/2021 | 星期五 | 2021/53 |
8188 | 01/01/2022 | 星期六 | 2022/01 |
8189 | 01/02/2022 | 星期日 | 2022/01 |
8190 | 01/03/2022 | 星期一 | 2022/01 |
8191 | 01/04/2022 | 星期二 | 2022/02 |
8192 | 01/05/2022 | 星期三 | 2022/02 |
8193 | 01/06/2022 | 星期四 | 2022/02 |
8194 | 01/07/2022 | 星期五 | 2022/02 |
8195 | 01/08/2022 | 星期六 | 2022/02 |
8196 | 01/09/2022 | 星期日 | 2022/02 |
8197 | 01/10/2022 | 星期一 | 2022/02 |
8198 | 01/11/2022 | 星期二 | 2022/03 |
8199 | 01/12/2022 | 星期三 | 2022/03 |
8200 | 01/13/2022 | 星期四 | 2022/03 |
8201 | 01/14/2022 | 星期五 | 2022/03 |
因為 1 的 first_week_date 引數用於 weekname() 函數,所以這使用星期二作為該週的第一天。因此該函數判定 2021 年的第 53 週從 12 月 28 日星期二開始;此外,由於應用程式使用中斷的週,第 1 週於 2022 年 1 月 1 日開始,並於 2022 年 1 月 3 日星期一的最後一毫秒結束。
交易 8192 發生在 2022 年 1 月 5 日。因此,使用星期二的 first_week_day 參數,weekname() 函數會傳回「week_number」欄位的值 2022/02。
範例 4 – 圖表物件範例
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,資料集保持不變並且會載入到應用程式中。會建立傳回交易發生週數年份的計算,作為應用程式圖表物件中的量值。
載入指令碼
SET BrokenWeeks=1;
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
=week_day (date)
若要計算交易發生的該週開始時間,建立下列量值:
=weekname(date)
id | 日期 | =weekday(date) | =weekname(date) |
---|---|---|---|
8183 | 12/27/2021 | 星期一 | 2021/53 |
8184 | 12/28/2021 | 星期二 | 2021/53 |
8185 | 12/29/2021 | 星期三 | 2021/53 |
8186 | 12/30/2021 | 星期四 | 2021/53 |
8187 | 12/31/2021 | 星期五 | 2021/53 |
8188 | 01/01/2022 | 星期六 | 2022/01 |
8189 | 01/02/2022 | 星期日 | 2022/02 |
8190 | 01/03/2022 | 星期一 | 2022/02 |
8191 | 01/04/2022 | 星期二 | 2022/02 |
8192 | 01/05/2022 | 星期三 | 2022/02 |
8193 | 01/06/2022 | 星期四 | 2022/02 |
8194 | 01/07/2022 | 星期五 | 2022/02 |
8195 | 01/08/2022 | 星期六 | 2022/02 |
8196 | 01/09/2022 | 星期日 | 2022/03 |
8197 | 01/10/2022 | 星期一 | 2022/03 |
8198 | 01/11/2022 | 星期二 | 2022/03 |
8199 | 01/12/2022 | 星期三 | 2022/03 |
8200 | 01/13/2022 | 星期四 | 2022/03 |
8201 | 01/14/2022 | 星期五 | 2022/03 |
「week_number」欄位在圖表物件中的建立為量值方式是使用 weekname() 函數並傳遞日期欄位,作為函數的引數。
weekname() 函數最初識別日期值落在哪一週並傳回交易發生的週數計數和年份。
FirstWeekDay 系統變數將星期日設為該週的第一天。BrokenWeeks 系統變數設定應用程式以使用中斷的週,表示第 1 週從 1 月 1 日開始。
因為應用程式使用中斷的週且一週的第一天是星期日,所以從 1 月 2 日到 1 月 8 日發生的交易會傳回值 2022/02,即 2022 年第 2 週。請注意,交易 8192 發生在 1 月 5 日並為「week_number」欄位傳回值 2022/02。
範例 5 – 情境
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 2019 年最後一週和 2020 年前兩週交易的資料集,這載入到稱為「Transactions」的表格中。
-
設定為 0 的 BrokenWeeks 系統變數。
-
設定為 2 的 ReferenceDay 系統變數。
-
設定為 MM/DD/YYYY 格式的 DateFormat 系統變數。
載入指令碼
SET BrokenWeeks=0;
SET ReferenceDay=2;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2019,58.27
8184,12/28/2019,67.42
8185,12/29/2019,23.80
8186,12/30/2019,82.06
8187,12/31/2019,40.56
8188,01/01/2020,37.23
8189,01/02/2020,17.17
8190,01/03/2020,88.27
8191,01/04/2020,57.42
8192,01/05/2020,53.80
8193,01/06/2020,82.06
8194,01/07/2020,40.56
8195,01/08/2020,53.67
8196,01/09/2020,26.63
8197,01/10/2020,72.48
8198,01/11/2020,18.37
8199,01/12/2020,45.26
8200,01/13/2020,58.23
8201,01/14/2020,18.52
];
結果
載入資料並開啟工作表。建立新的表格。
使用下列運算式建立計算維度:
=weekname(date)
若要計算總銷售額,建立下列彙總量值:
=sum(amount)
將量值的數字格式設定為金錢。
weekname(date) | =sum(amount) |
---|---|
2019/52 | $125.69 |
2020/01 | $346.51 |
2020/02 | $347.57 |
2020/03 | $122.01 |
若要展示在此情境下使用 weekname() 函數的結果,新增下列欄位作為維度:
date
weekname(date) | 日期 | =sum(amount) |
---|---|---|
2019/52 | 12/27/2019 | $58.27 |
2019/52 | 12/28/2019 | $67.42 |
2020/01 | 12/29/2019 | $23.80 |
2020/01 | 12/30/2019 | $82.06 |
2020/01 | 12/31/2019 | $40.56 |
2020/01 | 01/01/2020 | $37.23 |
2020/01 | 01/02/2020 | $17.17 |
2020/01 | 01/03/2020 | $88.27 |
2020/01 | 01/04/2020 | $57.42 |
2020/02 | 01/05/2020 | $53.80 |
2020/02 | 01/06/2020 | $82.06 |
2020/02 | 01/07/2020 | $40.56 |
2020/02 | 01/08/2020 | $53.67 |
2020/02 | 01/09/2020 | $26.63 |
2020/02 | 01/10/2020 | $72.48 |
2020/02 | 01/11/2020 | $18.37 |
2020/03 | 01/12/2020 | $45.26 |
2020/03 | 01/13/2020 | $58.23 |
2020/03 | 01/14/2020 | $18.52 |
因為應用程式使用中斷的週,且由於 ReferenceDay 系統變數,第 1 週需要至少有兩天落在 1 月,因此 2020 年第 1 週包括從 2019 年 12 月 29 日起的交易。