yeartodate - 指令碼與圖表函數在此頁面
此功能會尋找輸入時間戳記是否位於前次載入指令碼之日期的年份內,並傳回 True (如果在其內),False (如果不在其內)。
語法:
YearToDate( timestamp[ , yearoffset
[ , firstmonth [ , todaydate] ] ] )
傳回的資料類型: 布林
資訊備註
在 Qlik Sense 中,布林值 true 值以 -1 代表,而 false 值以 0 代表。
yeartodate() 函數的範例圖表
如未使用任何選用參數,年初至今表示是從 1 月 1 日起,在一個日曆年內的任何日期,但不超過 (可包含) 上次指令碼執行的日期。
換言之,不透過其他參數觸發時,yeartodate() 函數會用來評估時間戳記,並根據日曆年內是否出現日期來傳回布林值結果,但不超過 (可包含) 重新載入的發生日期。
但是,這也可能使用 firstmonth 引數取代年份開始日期,以及使用 yearoffset 引數比較前一年或下一年。
最後,在歷史資料集的例子中,yeartodate() 函數提供設定 todaydate 的參數,這也會改為比較日曆年的時間戳記,但不超過 (可包含) todaydate 引數中提供的日期。
引數
timestamp
要評估的時間戳記,例如「10/12/2012」。
yearoffset
透過指定 yearoffset ,yeartodate 針對另一年中的相同期間傳回 True 。負數 yearoffset 表示前一年,正數是未來年的位移。最新的年結束日期透過指定 yearoffset = -1 實現。如果省略,則採用 0。
firstmonth
透過指定 firstmonth 介於 1 和 12 之間 (如果省略,則為 1),可將年開始向前移到任何月份的第一天。例如,如果要使用起始於 5 月 1 日的會計年度,可指定 firstmonth = 5。 1 的值表示會計年度開始於 1 月 1 日,而 12 的值表示會計年度開始於 12 月 1 日。
todaydate
透過指定 todaydate (如果省略,則為上次指令碼執行的時間戳記),即可移動作為期間上限的日期。
什麼情況下使用
yeartodate() 函數會傳回布林值結果。通常,此函數類型將作為 if 運算式中的條件使用。這會傳回彙總或計算,其相依於每年出現的評估日期,但不超過 (可包含) 最後一次應用程式重新載入的日期。
例如,YearToDate() 函數可用來識別目前年份迄今製造的所有設備。
下列範例假設最後一個重新載入時間 = 11/18/2011。
函數範例
yeartodate( '11/18/2010')
傳回 False
yeartodate( '02/01/2011')
傳回 True
yeartodate( '11/18/2011')
傳回 True
yeartodate( '11/19/2011')
傳回 False
yeartodate( '11/19/2011', 0, 1, '12/31/2011')
傳回 True
yeartodate( '11/18/2010', -1)
傳回 True
yeartodate( '11/18/2011', -1)
傳回 False
yeartodate( '04/30/2011', 0, 5)
傳回 False
yeartodate( '05/01/2011', 0, 5)
傳回 True
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 – 基本範例
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
撰稿時,日期為 2022 年 4 月 26 日。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yeartodate(date) as year_to_date
;
Load
*
Inline
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
01/10/2020
0
02/28/2020
0
04/09/2020
0
04/16/2020
0
05/21/2020
0
08/14/2020
0
10/07/2020
0
12/05/2020
0
01/22/2021
0
02/03/2021
0
03/17/2021
0
04/23/2021
0
05/04/2021
0
06/30/2021
0
07/26/2021
0
12/27/2021
0
02/02/2022
-1
02/26/2022
-1
03/07/2022
-1
03/11/2022
-1
yeartodate() 函數的圖表,基本範例
year_to_date 欄位在前置 LOAD 陳述式中的建立方式是使用 yeartodate() 函數並傳遞 date 欄位,作為函數的引數。
因為沒有其他參數傳遞至函數,所以 yeartodate() 函數最初會識別重新載入日期,目前日曆年 (開始於 1 月 1 日) 的界限因此會傳回 TRUE 的布林值結果。
因此,任何發生在 1 月 1 日和 4 月 26 日的交易 (重新載入日期) 會傳回 TRUE 的布林值結果。任何發生在 2022 年開始前的交易會傳回 FALSE 的布林值結果。
範例 2 – yearoffset
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yeartodate(date,-2) as two_years_prior
;
Load
*
Inline
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
01/10/2020
-1
02/28/2020
-1
04/09/2020
-1
04/16/2020
-1
05/21/2020
0
08/14/2020
0
10/07/2020
0
12/05/2020
0
01/22/2021
0
02/03/2021
0
03/17/2021
0
04/23/2021
0
05/04/2021
0
06/30/2021
0
07/26/2021
0
12/27/2021
0
02/02/2022
0
02/26/2022
0
03/07/2022
0
03/11/2022
0
透過使用 -2 作為 yeartodate() 函數中的 yearoffset 引數,函數會使用完整兩年轉移比較子日曆年區段的界限。一開始,年份區段等同於 2022 年 1 月 1 日和 4 月 26 日之間。然後 yearoffset 引數會將此區段偏移至兩年前。然後日期界限會落在 2020 年 1 月 1 日和 4 月 26 日之間。
yeartodate() 函數,yearoffset 範例
因此,發生在 2020 年 1 月 1 日和 4 月 26 日之間的任何交易將會傳回 TRUE 的布林值結果 。任何發生在此區段前後的交易會傳回 FALSE 。
範例 3 – firstmonth
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
在此範例中,我們將會計年度開始設為 7 月 1 日。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yeartodate(date,0,7) as year_to_date
;
Load
*
Inline
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
01/10/2020
0
02/28/2020
0
04/09/2020
0
04/16/2020
0
05/21/2020
0
08/14/2020
0
10/07/2020
0
12/05/2020
0
01/22/2021
0
02/03/2021
0
03/17/2021
0
04/23/2021
0
05/04/2021
0
06/30/2021
0
07/26/2021
-1
12/27/2021
-1
02/02/2022
-1
02/26/2022
-1
03/07/2022
-1
03/11/2022
-1
在此例中,因為 firstmonth 引數的值 7 用於 yeartodate() 函數,所以這將該年的第一天設為 7 月 1 日,而該年的最後一天則為 6 月 30 日。
yeartodate() 函數的圖表,firstmonth 範例
因此,任何發生在 2021 年 7 月 1 日和 2022 年 4 月 26 日的交易 (重新載入日期) 會傳回 TRUE 的布林值結果。任何發生在 2021 年 7 月 1 日前的交易會傳回 FALSE 的布林值結果。
範例 4 – todaydate
載入指令碼和結果
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
但是在此範例中,我們必須識別所有發生在日曆年中的交易,但不超過 (可包含) 2022 年 3 月 1 日。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yeartodate(date, 0, 1, '03/01/2022') as year_to_date
;
Load
*
Inline
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
結果表格
01/10/2020
0
02/28/2020
0
04/09/2020
0
04/16/2020
0
05/21/2020
0
08/14/2020
0
10/07/2020
0
12/05/2020
0
01/22/2021
0
02/03/2021
0
03/17/2021
0
04/23/2021
0
05/04/2021
0
06/30/2021
0
07/26/2021
0
12/27/2021
0
02/02/2022
-1
02/26/2022
-1
03/07/2022
0
03/11/2022
0
在此例中,因為 todaydate 引數的值 03/01/2022 用於 yeartodate() 函數,所以這會將比較子日曆年區段的界限設為 2022 年 3 月 1 日。請務必提供 firstmonth 參數 (介於 1 和 2 之間);否則,該函數會傳回 Null 值結果。
yeartodate() 函數的圖表,範例使用 todaydate 引數
因此,發生在 2022 年 1 月 1 日和 2022 年 3 月 1 日之間的任何交易 todaydate 參數,將會傳回 TRUE 的布林值結果。任何發生在 2022 年 1 月 1 日前和 2022 年 3 月 1 日後的交易,將會傳回 FALSE 的布林值結果。
範例 – 圖表物件範例
載入指令碼和圖表運算式
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。
不過,在此範例中,不變的資料集會載入到應用程式中。會建立決定哪些交易發生在日曆年但不超過 (可包含) 最後一次重新載入的計算,作為應用程式圖表物件中的量值。
載入指令碼
Transactions:
Load
*
Inline
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度: date 。
新增下列量值:
=yeartodate(date)
結果表格
01/10/2020
0
02/28/2020
0
04/09/2020
0
04/16/2020
0
05/21/2020
0
08/14/2020
0
10/07/2020
0
12/05/2020
0
01/22/2021
0
02/03/2021
0
03/17/2021
0
04/23/2021
0
05/04/2021
0
06/30/2021
0
07/26/2021
0
12/27/2021
0
02/02/2022
-1
02/26/2022
-1
03/07/2022
-1
03/11/2022
-1
year_to_date 量值在圖表物件中的建立方式是使用 yeartodate() 函數並傳遞 date 欄位,作為函數的引數。
因為沒有其他參數傳遞至函數,所以 yeartodate() 函數最初會識別重新載入日期,目前日曆年 (開始於 1 月 1 日) 的界限因此會傳回 TRUE 的布林值結果。
yeartodate() 函數的圖表,圖表物件範例
任何發生在 1 月 1 日和 4 月 26 日的交易 (重新載入日期) 會傳回 TRUE 的布林值結果。任何發生在 2022 年開始前的交易會傳回 FALSE 的布林值結果。
範例 6 – 情境
載入指令碼和圖表運算式
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
最終使用者想要 KPI 物件呈現總銷售額,且日期為等同於最後一次重新載入時間之目前年份至今的 2021 年期間。
撰稿時,日期為 2022 年 6 月 16。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,01/10/2020,37.23
8189,02/28/2020,17.17
8190,04/09/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,02/02/2022,46.23
8205,02/26/2022,84.21
8206,03/07/2022,96.24
8207,03/11/2022,67.67
];
結果
請執行下列動作:
建立 KPI 物件。
建立下列彙總量值來計算總銷售額:
=sum(if(yeartodate(date,-1),amount,0))
將量值的數字格式 設定為金錢 。
2021 年 KPI yeartodate() 圖表
yeartodate() 函數會在評估每筆交易 ID 的日期時傳回布林值。因為重新載入發生在 2022 年 6 月 16 日,所以 yeartodate 函數會將 01/01/2022 和 06/16/2022 之間的年份期間分段。但是,由於 period_no 值的 -1 用於該函數,因此這些界限會接著轉移至前一年。因此,對於任何發生在 01/01/2021 和 06/16/2021 之間的交易,yeartodate() 函數會傳回 TRUE 的布林值結果並加總金額。