yeartodate - スクリプトおよびチャート関数
この関数は、入力したタイムスタンプがスクリプトが最後にロードされた日付の年に該当するかどうかを算出し、該当する場合は True を返し、該当しない場合は False を返します。
構文:
YearToDate(timestamp[ , yearoffset
[ , firstmonth [ , todaydate] ] ])
戻り値データ型: ブール値
情報メモ
Qlik Sense では、真のブール値は -1 で表現され、偽の値は 0 で表現されます。
オプションのパラメータがどれも使用されていない場合、年初から当日までとは、さかのぼって直近の 1 月 1 日からスクリプトを最後に実行した日付までを含む 1 暦年以内のいずれかの日付を意味します。
つまり、yeartodate() 関数が、追加パラメータなしでトリガーされると、タイムスタンプを評価するために使用され、日付がリロードが発生した日付までのカレンダー年に発生したかどうかに基づいてブール値結果を返します。
ただし、firstmonth 引数を使用して年の開始日を上書きすることも、yearoffset 引数を使って前後の年と比較することもできます。
最後に、過去のデータセットの場合、yeartodate() 関数は todaydate を設定するパラメータを提供し、これによりタイムスタンプが todaydate 引数で提供された日付までのカレンダー年と比較されます。
引数
timestamp
|
評価するタイムスタンプ (例: '10/12/2012')。
|
yearoffset
|
yearoffset を指定することで、yeartodate は、別の年の同じ期間について True を返します。負の値の yearoffset は過去の年を示し、正の値の場合は将来の年を示します。前年 1 年間を取得するときは、yearoffset = -1 を指定します。省略された場合は、0 として処理されます。
|
firstmonth
|
firstmonth を 1~12 で指定することにより (省略した場合は 1)、年度の始めを任意の月の 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 Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
例 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 |
year_to_date 項目は、yeartodate() 関数を使用し、関数の引数として date 項目を渡すことにより、先行する LOAD ステートメントで作成されます。
それ以外のパラメータは関数に渡されないため、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 |
yeartodate() 関数で -2 を yearoffset 引数として使用することにより、関数は、比較対象のカレンダー年の境界を 2 年間ずらします。最初、年セグメントは 2022 年 1 月 1 日~4 月 26 日に相当します。yearoffset 引数は次にこのセグメントを 2 年前にオフセットします。そうすると、日付の境界線は 2020 年 1 月 1 日~4 月 26 日に入ります。
したがって、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 |
この例では、yeartodate() 関数で firstmonth 引数 7 が使用されているため、年の最初の日は 7 月 1 日、年の最後の日が 6 月 30 日に設定されます。
したがって、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 結果を返すことになります。
したがって、2022 年 1 月 1 日~2022 年 3 月 1 日に発生したトランザクションの場合、todaydate パラメータはブール値の結果 TRUE を返します。2022 年 1 月 1 日の前、または 2022 年 3 月 1 日の後に発生したトランザクションは、ブール値結果 FALSE を返します。
例 5 – Chart object example
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じデータセットとシナリオが含まれます。
ただし、この例では、変更されていないデータセットがアプリケーションにロードされます。前回のリロードまでを含むカレンダー年に発生したトランザクションを決定する計算は、アプリケーションのチャート オブジェクトのメジャーとして作成されます。
ロード スクリプト
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 を返します。
1 月 1 日~4 月 26 日に発生したトランザクションの場合、リロード日付は TRUEのブール値の結果を返します。2022 年始めの前に発生したトランザクションは、ブール値結果 FALSE を返します。
例 6 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
エンド ユーザーは、2021 年の相当期間の総売上高を、前回のリロード時の現在の年初来として提示する KPI オブジェクトを求めています。
書き込み時には、日付は 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))
-
メジャーの [数値書式] を [通貨] に設定します。
yeartodate() 関数は、各トランザクション ID の日付を評価するときにブール値を返します。リロードは 2022 年 6 月 16 日に発生したため、yeartodate 関数は年期間を 01/01/2022 と 06/16/2022 に区分します。ただし、period_no 値 -1 が関数で使用されたため、これらも境界線は前の年に移動します。そのため、01/01/2021~06/16/2021 に発生したトランザクションについては、yeartodate() 関数がブール値 TRUE と金額の合計を返します。