yearend - 指令碼與圖表函數
此函數傳回的值相當於包含 date 的年份最後一天、最後一毫秒的時間戳記。預設的輸出格式為指令碼中所設定的 DateFormat。
語法:
YearEnd( date[, period_no[, first_month_of_year = 1]])
換言之,yearend() 函數判定日期落在哪一年。然後這會以日期格式傳回該年最後一毫秒的時間戳記。依照預設,該年的第一個月是 1 月。不過,您可以使用 yearend() 函數中的 first_month_of_year 引數變更要將哪個月設為第一個月。
什麼情況下使用
yearend() 函數在您想要計算以使用一年中尚未發生的部分時,作為運算式的一部分使用。例如,若您想要計算該年期間尚未發生的總利息。
傳回的資料類型: 雙值
引數 | 描述 |
---|---|
date | 要評估的時間戳記。 |
period_no | period_no 為整數,其中值 0 表示是包含 date 的年份。負值的 period_no 表示之前的年度,正值表示之後的年度。 |
first_month_of_year | 如果要使用不起始於 1 月的 (會計) 年度,可在 first_month_of_year 中指定介於 2 和 12 之間的值。 |
您可以在 first_month_of_year 引數中使用下列值設定一年的第一個月:
月 | 值 |
---|---|
二月 | 2 |
三月 | 3 |
四月 | 4 |
五月 | 5 |
六月 | 6 |
七月 | 7 |
八月 | 8 |
九月 | 9 |
十月 | 10 |
十一月 | 11 |
十二月 | 12 |
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 | 結果 |
---|---|
yearend('10/19/2001') | Returns 12/31/2001 23:59:59. |
yearend('10/19/2001', -1) | Returns 12/31/2000 23:59:59. |
yearend('10/19/2001', 0, 4) | Returns 03/31/2002 23:59:59. |
範例 1 – 無其他引數
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 2020 年和 2022 年之間交易的資料集,這載入到稱為「Transactions」的表格中。
-
已使用 DateFormat 系統變數 (MM/DD/YYYY) 格式提供日期欄位。
-
前置 LOAD 陳述式包含下列內容:
-
設定為 year_end 欄位的 yearend() 函數。
-
設定為 year_end_timestamp 欄位的 Timestamp() 函數。
-
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearend(date) as year_end,
timestamp(yearend(date)) as year_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
year_end
-
year_end_timestamp
id | 日期 | year_end | year_end_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8189 | 02/26/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8190 | 03/27/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8191 | 04/16/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8192 | 05/21/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8193 | 08/14/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8194 | 10/07/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8195 | 12/05/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8196 | 01/22/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8197 | 02/03/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8198 | 03/17/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8199 | 04/23/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8200 | 05/04/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8201 | 06/30/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8202 | 07/26/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8203 | 12/27/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8204 | 06/06/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8205 | 07/18/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8206 | 11/14/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8207 | 12/12/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
「year_end」欄位在前置 LOAD 陳述式中的建立方式是使用 yearend() 函數並傳遞日期欄位,作為函數的引數。
yearend() 函數最初識別日期值落在哪一年,並傳回該年最後一毫秒的時間戳記。
交易 8199 發生在 2021 年 4 月 23 日。yearend() 函數傳回該年的最後一毫秒,亦即 12 月 31 日下午 11:59:59。
範例 2 – period_no
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,任務是要建立欄位「previous_year_end」,這傳回交易發生年份之前的年份結束日期時間戳記。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearend(date,-1) as previous_year_end,
timestamp(yearend(date,-1)) as previous_year_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
previous_year_end
-
previous_ year_end_timestamp
id | 日期 | previous_year_end | previous_year_end_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8189 | 02/26/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8190 | 03/27/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8191 | 04/16/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8192 | 05/21/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8193 | 08/14/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8194 | 10/07/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8195 | 12/05/2020 | 12/31/2019 | 12/31/2019 11:59:59 PM |
8196 | 01/22/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8197 | 02/03/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8198 | 03/17/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8199 | 04/23/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8200 | 05/04/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8201 | 06/30/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8202 | 07/26/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8203 | 12/27/2021 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8204 | 06/06/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8205 | 07/18/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8206 | 11/14/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8207 | 12/12/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
因為 period_no 的值 -1 已作為 yearend() 函數中的偏移引數使用,所以該函數首先會識別交易發生的年份。然後這會查看前一年並識別該年的最後一毫秒。
交易 8199 發生在 2021 年 4 月 23 日。yearend() 函數為「previous_year_end」欄位傳回前一年的最後一毫秒,亦即 2020 年 12 月 31 日下午 11:59:59。
範例 3 – first_month_of_year
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,公司政策適用於從 4 月 1 日開始的年份。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearend(date,0,4) as year_end,
timestamp(yearend(date,0,4)) as year_end_timestamp
;
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
-
year_end
-
year_end_timestamp
id | 日期 | year_end | year_end_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 03/31/2020 | 3/31/2020 11:59:59 PM |
8189 | 02/26/2020 | 03/31/2020 | 3/31/2020 11:59:59 PM |
8190 | 03/27/2020 | 03/31/2020 | 3/31/2020 11:59:59 PM |
8191 | 04/16/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8192 | 05/21/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8193 | 08/14/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8194 | 10/07/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8195 | 12/05/2020 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8196 | 01/22/2021 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8197 | 02/03/2021 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8198 | 03/17/2021 | 03/31/2021 | 3/31/2021 11:59:59 PM |
8199 | 04/23/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8200 | 05/04/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8201 | 06/30/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8202 | 07/26/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8203 | 12/27/2021 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8204 | 06/06/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
8205 | 07/18/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
8206 | 11/14/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
8207 | 12/12/2022 | 03/31/2023 | 3/31/2023 11:59:59 PM |
因為 4 的 first_month_of_year 引數用於 yearend() 函數,所以這將該年的第一天設定為 4 月 1 日,而該年的最後一天則為 3 月 31 日。
交易 8199 發生在 2021 年 4 月 23 日。因為 yearend() 函數將該年的開始設定為 4 月 1 日,這會傳回 2022 年 3 月 31 日,作為交易的「year_end」值。
範例 4 – 圖表物件範例
概覽
使用與第一個範例相同的資料集和情境。
不過,在此範例中,資料集保持不變並且會載入到應用程式中。會建立傳回交易發生年份結束日期時間戳記的計算,作為應用程式圖表物件中的量值。
載入指令碼
Transactions:
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
id
-
date
若要計算交易發生在哪一年,建立下列量值:
-
=yearend(date)
-
=timestamp(yearend(date))
id | 日期 | =yearend(date) | =timestamp(yearend(date)) |
---|---|---|---|
8188 | 01/13/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8189 | 02/26/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8190 | 03/27/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8191 | 04/16/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8192 | 05/21/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8193 | 08/14/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8194 | 10/07/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8195 | 12/05/2020 | 12/31/2020 | 12/31/2020 11:59:59 PM |
8196 | 01/22/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8197 | 02/03/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8198 | 03/17/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8199 | 04/23/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8200 | 05/04/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8201 | 06/30/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8202 | 07/26/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8203 | 12/27/2021 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8204 | 06/06/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8205 | 07/18/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8206 | 11/14/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
8207 | 12/12/2022 | 12/31/2022 | 12/31/2022 11:59:59 PM |
「end_of_year」量值在圖表物件中的建立方式是使用 yearend() 函數並傳遞日期欄位,作為函數的引數。
yearend() 函數最初識別日期值落在哪一年,傳回該年最後一毫秒的時間戳記。
交易 8199 發生在 2021 年 4 月 23 日。yearend() 函數傳回該年的最後一毫秒,亦即 12 月 31 日下午 11:59:59。
範例 5 – 情境
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
資料集載入到稱為「Employee_Expenses」的表格。該表格含有下列欄位:
-
員工 ID
-
員工名稱
-
每個員工報銷的平均每日開支
-
最終使用者希望圖表物件按員工 ID 和員工名稱顯示該年剩餘期間仍會產生的預估開支報銷。會計年度於 1 月開始。
載入指令碼
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
若要計算預測的開支報銷,建立下列量值:
=(yearend(today(1))-today(1))*avg_daily_claim
將量值的數字格式設定為金錢。
employee_id | employee_name | =(yearend(today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $3240.00 |
183 | Deryck | $2700.00 |
184 | Dexter | $2700.00 |
185 | Sydney | $5832.00 |
186 | Agatha | $3888.00 |
藉由使用今日日期作為其唯一引數,yearend() 函數會傳回目前年份的結束日期。然後,以該年結束日期減去今日日期,運算式就會傳回該年剩餘天數。
然後按員工讓此值乘以平均每日開支報銷,以計算每個員工在該年剩餘期間預期會有的預估報銷值。