weekyear - スクリプトおよびチャート関数
この関数は、環境変数に基づいた週番号が含まれる年を返します。週番号の範囲は、1 からおよそ 52 となります。
構文:
weekyear(timestamp [, first_week_day [, broken_weeks [, reference_day]]])
戻り値データ型: integer
引数
timestamp
|
評価する日付またはタイムスタンプ。 |
first_week_day
|
週の開始日を指定します。省略されている場合は、変数 FirstWeekDay の値が使用されます。
first_week_day には、0 が月曜日、1 が火曜日、2 が水曜日、3 が木曜日、4 が金曜日、5 が土曜日、6 が日曜日の値を使用できます。
システム変数の詳細については、FirstWeekDay を参照してください。
|
broken_weeks
|
broken_weeks が指定されていない場合は、変数 BrokenWeeks の値を使用して、週が分離しているかどうかを定義します。
システム変数の詳細については、BrokenWeeks を参照してください
|
reference_day
|
reference_day が指定されていない場合は、変数 ReferenceDay の値を使用して、第 1 週を定義する参照日として設定する 1 月の日を定義します。デフォルトでは、Qlik Sense 関数は 4 を参照日として使用します。これは、第 1 週に必ず 1 月 4 日が含まれる、または第 1 週に少なくとも 1 月の 4 日間が常に含まれることを意味します。
システム変数の詳細については、ReferenceDay を参照してください
|
weekyear() 関数は、日付が年のどの週に該当するかを判断します。次に、その週番号に対応する年を返します。
BrokenWeeks が 0 (false) に設定されると、weekyear() が year() と同じ結果を返します。
ただし、BrokenWeeks システム変数が未分離の週を使用するように設定されている場合、ReferenceDay システム変数で指定した値に基づいて、第 1 週は 1 月の特定の日数のみを含むことになります。
例えば、ReferenceDay 値 4 が使用される場合、第 1 週は 1 月に少なくとも 4 日を含む必要があります。第 1 週が前年 12 月の日付を含むことも、1 年の最後の週番号が翌年 1 月の日付を含むことも考えられます。このような状況では、weekyear() 関数は year() 関数に異なる値を返します。
使用に適しているケース
weekyear() 関数は、集計を年単位で比較する場合に便利です。たとえば、製品の総売上高を年ごとに表示する場合などが考えられます。ユーザーがアプリで BrokenWeeks システム変数との一貫性を維持したい場合は、year() ではなく weekyear() 関数が選択されます。
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「アプリとスクリプトの地域設定の変更」を参照してください。
アプリの既定地域設定は、ユーザー プロファイルに基づいています。これらの地域の書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
関数の例
例 |
結果 |
weekyear('12/30/1996',0,0,4)
|
1997 を返します (1997 年の第 1 週は 12/30/1996 に開始するため) |
weekyear('01/02/1997',0,0,4)
|
1997 を返します |
weekyear('12/28/1997',0,0,4)
|
1997 を返します |
weekyear('12/30/1997',0,0,4) |
1998 を返します (1998 年の第 1 週は 12/29/1997 に開始するため) |
weekyear('01/02/1999',0,0,4)
|
1998 を返します (1998 年の第 53 週は 01/03/1999 に終了するため) |
例 1 - 分離された週
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
SET BrokenWeeks=1;
Transactions:
Load
*,
week(date) as week,
weekyear(date) as week_year
;
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
ID |
日付 |
週 |
week_year |
8176 |
12/28/2020 |
53 |
2020 |
8177 |
12/29/2020 |
53 |
2020 |
8178 |
12/30/2020 |
53 |
2020 |
8179 |
12/31/2020 |
53 |
2020 |
8180 |
01/01/2021 |
1 |
2021 |
8181 |
01/02/2021 |
1 |
2021 |
8182 |
01/03/2021 |
2 |
2021 |
8183 |
01/04/2021 |
2 |
2021 |
8184 |
01/05/2021 |
2 |
2021 |
8185 |
01/06/2021 |
2 |
2021 |
8186 |
01/07/2021 |
2 |
2021 |
[week_year] 項目は、weekyear() 関数を使用し、関数の引数として日付項目を渡すことにより、前の load ステートメントで作成されます。
BrokenWeeks システム変数は 1 に設定されます。つまり、アプリは分離された週を使うということです。第 1 週は 1 月 1 日に始まります。
トランザクション 8181 は、第 1 週である 1 月 2 日に発生します。そのため、[week_year] 項目に値 2021 を返します。
例 2 - 未分離の週
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ただし、この例では、会社ポリシーで未分離の週を使用するよう定められています。
ロード スクリプト
SET BrokenWeeks=0;
Transactions:
Load
*,
week(date) as week,
weekyear(date) as week_year
;
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
ID |
日付 |
週 |
week_year |
8176 |
12/28/2020 |
53 |
2020 |
8177 |
12/29/2020 |
53 |
2020 |
8178 |
12/30/2020 |
53 |
2020 |
8179 |
12/31/2020 |
53 |
2020 |
8180 |
01/01/2021 |
53 |
2020 |
8181 |
01/02/2021 |
53 |
2020 |
8182 |
01/03/2021 |
1 |
2021 |
8183 |
01/04/2021 |
1 |
2021 |
8184 |
01/05/2021 |
1 |
2021 |
8185 |
01/06/2021 |
1 |
2021 |
8186 |
01/07/2021 |
1 |
2021 |
BrokenWeeks システム変数は 0 に設定されます。つまり、アプリケーションは未分離の週を使うということです。そのため、第 1 週は 1 月 1 日に始まる必要はありません。
2020 年の第 53 週は 2021 年の 1 月 2 日の終わりまで続き、2020 年の第 1 週は 2021 年 1 月 3 日の日曜日に始まります。
トランザクション 8181 は、第 1 週である 1 月 2 日に発生します。そのため、[week_year] 項目に値 2021 を返します。
例 3 – チャート オブジェクトの例
概要
最初の例と同じデータセットとシナリオが使用されます。
ただし、この例では、データセットは変更されず、アプリケーションにロードされます。トランザクションが発生した年の週番号を返す計算は、アプリのチャートのメジャーとして作成されます。
ロード スクリプト
SET BrokenWeeks=1;
Transactions:
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
トランザクションが発生する週を計算するには、次のメジャーを作成します。
週番号に基づいてトランザクションが発生する年を計算するには、次のメジャーを作成します。
結果テーブル
ID |
日付 |
週 |
week_year |
8176 |
12/28/2020 |
53 |
2020 |
8177 |
12/29/2020 |
53 |
2020 |
8178 |
12/30/2020 |
53 |
2020 |
8179 |
12/31/2020 |
53 |
2020 |
8180 |
01/01/2021 |
1 |
2021 |
8181 |
01/02/2021 |
1 |
2021 |
8182 |
01/03/2021 |
2 |
2021 |
8183 |
01/04/2021 |
2 |
2021 |
8184 |
01/05/2021 |
2 |
2021 |
8185 |
01/06/2021 |
2 |
2021 |
8186 |
01/07/2021 |
2 |
2021 |
[week_year] 項目は、weekyear() 関数を使用し、関数の引数として日付項目を渡すことにより、前の load ステートメントで作成されます。
BrokenWeeks システム変数は 1 に設定されます。つまり、アプリは分離された週を使うということです。第 1 週は 1 月 1 日に始まります。
トランザクション 8181 は、第 1 週である 1 月 2 日に発生します。そのため、[week_year] 項目に値 2021 を返します。
例 4 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
2021 年の最後の週と 2021 年の最初の週のトランザクションを含むデータセットで、Transactions というテーブルにロードされます。
-
0 に設定された BrokenWeeks 変数。これは、アプリが未分離の週を使うということです。
-
2 に設定された ReferenceDay 変数。これは、年が 1 月 2 日に始まり、1 月のうち少なくとも 2 日を含むということです。
-
1 に設定された FirstWeekDay 変数。これは、週の最初の日が火曜日であるということです。
会社ポリシーでは、分離された週を使用することになっています。エンド ユーザーは、年ごとの総売上高を示すチャートを求めています。アプリは未分離の週を使用し、第 1 週に 1 月の少なくとも 2 日を含めます。
ロード スクリプト
SET BrokenWeeks=0;
SET ReferenceDay=2;
SET FirstWeekDay=1;
Transactions:
Load
*
Inline
[
id,date,amount
8176,12/28/2020,19.42
8177,12/29/2020,23.80
8178,12/30/2020,82.06
8179,12/31/2020,40.56
8180,01/01/2021,37.23
8181,01/02/2021,17.17
8182,01/03/2021,88.27
8183,01/04/2021,57.42
8184,01/05/2021,67.42
8185,01/06/2021,23.80
8186,01/07/2021,82.06
];
結果
データをロードしてシートを開きます。新しいテーブルを作成します。
週番号に基づいてトランザクションが発生する年を計算するには、次のメジャーを作成します。
総売上を計算するには、次のメジャーを作成します。
メジャーの [数値書式] を [通貨] に設定します。
結果テーブル
weekyear(date) |
=sum(amount) |
2020 |
19.42 |
2021 |
373.37 |