inyeartodate - 指令碼與圖表函數
如果 timestamp 位於包含 base_date 的年部分內,且不超過 (可包含) base_date 的最後一毫秒,則此函數會傳回 True。
語法:
InYearToDate (timestamp, base_date, period_no[, first_month_of_year])
傳回的資料類型: 布林
在 Qlik Sense 中,布林值 true 值以 -1 代表,而 false 值以 0 代表。
inyeartodate() 函數將會分割一年中的特定部分,並透過 base_date 識別該年區段的最大允許日期。然後該函數會評估日期欄位或值是否落在此區段內,並傳回布林值結果。
引數 | 描述 |
---|---|
timestamp | 您要與 base_date 比較的日期。 |
base_date | 用來評估年的日期。 |
period_no | 年可以使用 period_no 位移。period_no 是一個整數,其值 0 表示包含 base_date 的年。負值的 period_no 表示之前的年度,正值表示之後的年度。 |
first_month_of_year | 如果要使用不起始於 1 月的 (會計) 年度,可在 first_month_of_year 中指定介於 2 和 12 之間的值。 |
什麼情況下使用
inyeartodate() 函數會傳回布林值結果。通常,此函數類型將作為 if 運算式中的條件使用。這會根據評估的日期是否發生於該年截至 (含) 問題中的日期,傳回彙總或計算。
例如,inyeartodate() 函數可用來識別某年截至特定日期製造的所有設備。
這些範例使用日期格式 MM/DD/YYYY。日期格式是在位於資料載入指令碼頂端的 SET DateFormat 陳述式中指定。變更範例中的格式,以滿足您的需求。
範例 | 結果 |
---|---|
inyeartodate ('01/25/2013', '02/01/2013', 0) | 傳回 TRUE。 |
inyeartodate ('01/25/2012', '01/01/2013', 0) | 傳回 FALSE。 |
inyeartodate ('01/25/2012', '02/01/2013', -1) | 傳回 TRUE。 |
inyeartodate ('11/25/2012', '01/31/2013', 0, 4) | 傳回 TRUE。 timestamp 的值落在從第四個月開始的會計年度內,並在 base_date 的值之前。 |
inyeartodate ('3/31/2013', '01/31/2013', 0, 4 ) | 傳回 FALSE。 與先前的範例相比較,timestamp 仍在會計年度內,但是在 base_date 的值之後,因此它在年度部分之外。 |
區域設定
除非另有說明,否則此主題中的範例皆使用下列日期格式:MM/DD/YYYY。日期格式是在資料載入指令碼的 SET DateFormat 陳述式中指定。由於地區設定和其他因素,您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式,以滿足您的需求。或者,您可以在載入指令碼中變更格式,以符合這些範例。
應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典,資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。
範例 1 – 無其他引數
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
包含一組 2020 年和 2022 年之間交易的資料集,這載入到稱為「Transactions」的表格中。
-
以 DateFormat 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。
-
建立欄位 in_year_to_date,這決定哪些交易發生在該年的 2021 年 7 月 26 日之前。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inyeartodate(date,'07/26/2021', 0) as in_year_to_date
;
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,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/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,'07/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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
in_year_to_date
日期 | in_year_to_date |
---|---|
01/13/2020 | 0 |
02/26/2020 | 0 |
03/27/2020 | 0 |
04/16/2020 | 0 |
05/21/2020 | 0 |
06/14/2020 | 0 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | -1 |
02/03/2021 | -1 |
03/17/2021 | -1 |
04/23/2021 | -1 |
05/04/2021 | -1 |
06/30/2021 | -1 |
07/26/2021 | -1 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
「in_year_to_date」欄位使用 inyeartodate() 函數在前置 LOAD 陳述式中建立。提供的第一個引數識別正在評估哪個欄位。
第二個引數是 2021 年 7 月 26 日的硬式編碼日期,即識別年區段結束邊界的 base_date。值為 0 的 period_no 是最終引數,表示該函數沒有比較分割的年之前或之後的年。
發生在 1 月 1 日和 7 月 26 日之間的任何交易都會傳回布林值結果 TRUE。2021 年之前和超過 2021 年 7 月 26 日的交易日期會傳回 FALSE。
範例 2 – period_no
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
與第一個範例相同的資料集和情境。
-
建立欄位 previous_year_to_date,這決定哪些交易發生在結束於 2021 年 7 月 26 日之年區段的完整一年之前。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inyeartodate(date,'07/26/2021', -1) as previous_year_to_date
;
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,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/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,'07/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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
previous_year_to_date
日期 | previous_year_to_date |
---|---|
01/13/2020 | -1 |
02/26/2020 | -1 |
03/27/2020 | -1 |
04/16/2020 | -1 |
05/21/2020 | -1 |
06/14/2020 | -1 |
08/07/2020 | 0 |
09/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 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
period_no 值 -1 表示 inyeartodate () 函數比較輸入的季區段與上一年。透過輸入日期 2021 年 7 月 26 日,從 2021 年 1 月 1 日到 2021 年 7 月 26 日的區段原本被視為年初至今。然後 period_no 將此區段往前移動一整年,造成日期邊界變成 2020 年 1 月 1 日到 7 月 26 日。
因此,發生在 2020 年 1 月 1 日和 7 月 26 日之間的任何交易將會傳回布林值結果 TRUE。
範例 3 – first_month_of_year
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
與第一個範例相同的資料集和情境。
-
建立欄位 in_year_to_date,這決定哪些交易發生在同一年的 2021 年 7 月 26 日之前。
在此範例中,我們將 3 月設為會計年度的第一個月。
載入指令碼
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
inyeartodate(date,'07/26/2021', 0,3) as in_year_to_date
;
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,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/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,'07/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
];
結果
載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度:
-
date
-
in_year_to_date
日期 | in_year_to_date |
---|---|
01/13/2020 | 0 |
02/26/2020 | 0 |
03/27/2020 | 0 |
04/16/2020 | 0 |
05/21/2020 | 0 |
06/14/2020 | 0 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | 0 |
02/03/2021 | 0 |
03/17/2021 | -1 |
04/23/2021 | -1 |
05/04/2021 | -1 |
06/30/2021 | -1 |
07/26/2021 | -1 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
若使用 3 作為 inyeartodate() 函數中的 first_month_of_year 引數,該函數會讓該年從 3 月 1 日開始。值為 2021 年 7 月 26 日的 base_date 則會設定該年區段的結束日期。
因此,發生在 2021 年 3 月 1 日和 7 月 26 日之間的任何交易將會傳回布林值結果 TRUE,而日期落在這些邊界之外的交易將會傳回 FALSE 的值。
範例 4 – 圖表物件範例
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含與第一個範例相同的資料集和情境。不過,在此範例中,不變的資料集會載入到應用程式中。會建立決定哪些交易發生在同一年截至 2021 年 7 月 26 日的計算,作為應用程式圖表物件中的量值。
載入指令碼
SET DateFormat='MM/DD/YYYY';
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,'06/14/2020',82.06
8194,'08/07/2020',40.39
8195,'09/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,'07/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
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:date。
建立下列量值:
=inyeartodate(date,'07/26/2021', 0)
日期 | =inyeartodate(date,'07/26/2021', 0) |
---|---|
01/13/2020 | 0 |
02/26/2020 | 0 |
03/27/2020 | 0 |
04/16/2020 | 0 |
05/21/2020 | 0 |
06/14/2020 | 0 |
08/07/2020 | 0 |
09/05/2020 | 0 |
01/22/2021 | -1 |
02/03/2021 | -1 |
03/17/2021 | -1 |
04/23/2021 | -1 |
05/04/2021 | -1 |
06/30/2021 | -1 |
07/26/2021 | -1 |
07/27/2021 | 0 |
06/06/2022 | 0 |
07/18/2022 | 0 |
11/14/2022 | 0 |
12/12/2022 | 0 |
會使用 inyeartodate() 函數在圖表物件中建立 in_year_to_date 量值。提供的第一個引數識別正在評估哪個欄位。第二個引數是 2021 年 7 月 26 日的硬式編碼日期,即識別比較子年區段結束邊界的 base_date。值為 0 的 period_no 是最終引數,表示該函數沒有比較分割的年之前或之後的年。
發生在 2021 年 1 月 1 日和 7 月 26 日之間的任何交易都會傳回布林值結果 TRUE。2021 年之前和 2021 年 7 月 26 日之後的交易日期會傳回 FALSE。
範例 5 – 情境
概覽
開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。
載入指令碼包含:
-
載入到稱為 Products 之表格的資料集。
-
關於產品 ID、產品類型、製造日期和成本價格的資訊。
最終使用者希望圖表物件依產品類型顯示在 2021 年截至 7 月 26 日製造的產品成本。
載入指令碼
Products:
Load
*
Inline
[
product_id,product_type,manufacture_date,cost_price
8188,product A,'01/13/2020',37.23
8189,product B,'02/26/2020',17.17
8190,product B,'03/27/2020',88.27
8191,product C,'04/16/2020',57.42
8192,product D,'05/21/2020',53.80
8193,product D,'08/14/2020',82.06
8194,product C,'10/07/2020',40.39
8195,product B,'12/05/2020',87.21
8196,product A,'01/22/2021',95.93
8197,product B,'02/03/2021',45.89
8198,product C,'03/17/2021',36.23
8199,product C,'04/23/2021',25.66
8200,product B,'05/04/2021',82.77
8201,product D,'06/30/2021',69.98
8202,product D,'07/26/2021',76.11
8203,product D,'12/27/2021',25.12
8204,product C,'06/06/2022',46.23
8205,product C,'07/18/2022',84.21
8206,product A,'11/14/2022',96.24
8207,product B,'12/12/2022',67.67
];
結果
載入資料並開啟工作表。建立新的表格並將此欄位新增為維度:product_type。
建立計算在 2021 年的 7 月 27 日之前製造的每個產品總和的量值:
=sum(if(inyeartodate(manufacture_date,makedate(2021,07,26),0),cost_price,0))
將量值的數字格式設定為金錢。
product_type | =sum(if(inyeartodate(manufacture_date,makedate(2021,07,26),0),cost_price,0)) |
---|---|
產品 A | $95.93 |
產品 B | $128.66 |
產品 C | $61.89 |
產品 D | $146.09 |
inyeartodate() 函數會在評估每個產品的製造日期時傳回布林值。對於在 2021 年的 7 月 27 日之前製造的任何產品,inyeartodate() 函數會傳回布林值 TRUE 並加總 cost_price。
產品 D 是也在 2021 年 7 月 26 日之後製造的唯一產品。具有 product_ID 8203 的項目在 12 月 27 日製造且成本為 $25.12。因此,此成本不包括在圖表物件產品 D 的總計中。