week - スクリプトおよびチャート関数
この関数は、ISO 8601 に従って、週番号を表す整数を返します。週番号は標準的な数値の解釈に従って、数式の日付の解釈により計算されます。
構文:
week(timestamp [, first_week_day [, broken_weeks [, reference_day]]])
週数のカウントは 1 月 1 日に始まります (これは、Qlik Sense が既定で分離週を使用するよう設定されているため)。最初の週は、その週に何日あるかに関わらず、FirstWeekDay システム変数より前の日に終了します。FirstWeekDay システム変数は、first_week_day 引数によって week() 関数内で優先されます。
week() 関数は、broken_weeks 引数を使って、分離または非分離の週のどちらを使用するかを指定する機能も提供します。分離された週の機能が採用された場合、第 1 週は ReferenceDay システム変数によって定義された 1 月の特定の日数を含むことになります。そのため、第 1 週は 12 月に開始するか、あるいは週 52 または 53 は 1 月まで続行する可能性があります。最後に、reference_day 引数を使用すると、変数が ReferenceDay システム変数を上書きすることができます。
weekname() 関数と異なり、week() 関数は年の値も返しません。これにより、複数年の週を比較した集計を行うことができます。
この関数内では 4 つの引数を使用できます。
引数 # 1: タイムスタンプ
これは、タイムスタンプまたは計算結果がタイムスタンプになる数式として評価して変換する日付です (例: 2012-10-12)。
引数 # 2: first_week_day
first_week_day が指定されていない場合、変数 FirstWeekDay の値が週の初日として使用されます。
週の初日として別の曜日を指定する場合は、first_week_day を次のように設定します。
- 0 - 月曜日
- 1 - 火曜日
- 2 - 水曜日
- 3 - 木曜日
- 4 - 金曜日
- 5 - 土曜日
- 6 - 日曜日
これで、関数から返された整数は、first_week_dayで指定した週の初日を使用するようになります。
引数 # 3: broken_weeks
broken_weeks が指定されていない場合は、変数 BrokenWeeks の値を使用して、週が分離しているかどうかを定義します。
デフォルトでは、Qlik Sense関数は分離していない週を使用します。つまり、
- 第 1 週が 12 月から始まる年もあれば、第 52 週や第 53 週が 1 月に渡る年もあります。
- 通常第 1 週には、少なくとも 1 月の 4 日間が含まれます。
分離した週を使用するオプションもあります。
- 第 52 週や第 53 週は 1 月へと続きません。
- 第 1 週は 1 月 1 日から始まり、多くの場合は完全な 1 週間ではありません。
次の値を使用できます。
- 0 (= 分離しない週を使用)
- 1 (= 分離した週を使用)
引数 # 4: reference_day
reference_day が指定されていない場合は、変数 ReferenceDay の値を使用して、第 1 週を定義する参照日として設定する 1 月の日を定義します。デフォルトでは、Qlik Sense 関数は 4 を参照日として使用します。これは、第 1 週に必ず 1 月 4 日が含まれる、または第 1 週に少なくとも 1 月の 4 日間が常に含まれることを意味します。
次の値は異なる参照日の設定に使用可能です。
- 1 (= 1 月 1 日)
- 2 (= 1 月 2 日)
- 3 (= 1 月 3 日)
- 4 (= 1 月 4 日)
- 5 (= 1 月 5 日)
- 6 (= 1 月 6 日)
- 7 (= 1 月 7 日)
使用に適しているケース
The week() 関数は、集計を週単位で比較する場合に便利です。例えば、製品の総売上高を週ごとに表示する場合などに使用できます。week() 関数は、ユーザーがアプリケーションの BrokenWeeks、FirstWeekDay、または ReferenceDay システム変数を必ずしも使用せずに計算を行いたい場合に、weekname() よりも優先して選択されます。
さらに、複数年にわたって比較を行いたい場合には week() 関数が選択されます。week() 関数を使用することにより、ユーザーは関数使用時に使用するこれらの変数の独自の組み合わせを作成することができます。
これらの軸は、関数を使用してマスター カレンダー テーブルに項目を作成することにより、ロード スクリプトで作成することも、計算軸としてチャートで直接使用することもできます。
例 | 結果 |
---|---|
week( '10/12/2012') |
41 を返します。 |
week( '35648') | 32 を返します (35648 = 08/06/1997 のため) |
week('10/12/2012', 0, 1) | 42 を返します。 |
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 1 - 既定システムの変数
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
2021 年の最後の週と 2022 年の最初の週のトランザクションを含むデータセットは、Transactions というテーブルにロードされます。
-
DateFormat システム変数形式 (MM/DD/YYYY) で提供されている日付項目。
-
トランザクションが発生する年と週番号を返す、項目 [week_number] の作成。
-
各トランザクション日付の平日値を示している、week_day という項目の作成
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
week_day
-
week_number
ID | 日付 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 月 | 53 |
8184 | 12/28/2021 | 火 | 53 |
8185 | 12/29/2021 | 水 | 53 |
8186 | 12/30/2021 | Thu | 53 |
8187 | 12/31/2021 | Fri | 53 |
8188 | 01/01/2022 | Sat | 1 |
8189 | 01/02/2022 | 日 | 2 |
8190 | 01/03/2022 | 月 | 2 |
8191 | 01/04/2022 | 火 | 2 |
8192 | 01/05/2022 | 水 | 2 |
8193 | 01/06/2022 | Thu | 2 |
8194 | 01/07/2022 | Fri | 2 |
8195 | 01/08/2022 | Sat | 2 |
8196 | 01/09/2022 | 日 | 3 |
8197 | 01/10/2022 | 月 | 3 |
8198 | 01/11/2022 | 火 | 3 |
8199 | 01/12/2022 | 水 | 3 |
8200 | 01/13/2022 | Thu | 3 |
8201 | 01/14/2022 | Fri | 3 |
[week_number] 項目は、week() 関数を使用し、関数の引数として [date] 項目を渡すことにより、前の load ステートメントで作成されます。
関数に渡される他のパラメータはないため、week() 関数に影響する次の既定変数が有効となります。
-
BrokenWeeks: 週のカウントは 1 月 1 日に始まります
-
FirstWeekDay: 週の初日は日曜日です
アプリケーションは既定の BrokenWeeks システム変数を使用しているため、第 1 週は 1 月 1 日の土曜日に始まります。
既定の FirstWeekDay システム変数のため、週は日曜日に始まります。1 月 1 日以降の最初の日曜日は 1 月 2 日に発生し、この日から第 2 週が始まります。
例 2 – first_week_day
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
トランザクションが発生する年と週番号を返す、項目 [week_number] の作成。
-
各トランザクション日付の平日日を示している、week_day という項目の作成。
子の例では、勤務週の初めを火曜日に設定します。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
week_day
-
week_number
ID | 日付 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 月 | 52 |
8184 | 12/28/2021 | 火 | 53 |
8185 | 12/29/2021 | 水 | 53 |
8186 | 12/30/2021 | Thu | 53 |
8187 | 12/31/2021 | Fri | 53 |
8188 | 01/01/2022 | Sat | 1 |
8189 | 01/02/2022 | 日 | 1 |
8190 | 01/03/2022 | 月 | 1 |
8191 | 01/04/2022 | 火 | 2 |
8192 | 01/05/2022 | 水 | 2 |
8193 | 01/06/2022 | Thu | 2 |
8194 | 01/07/2022 | Fri | 2 |
8195 | 01/08/2022 | Sat | 2 |
8196 | 01/09/2022 | 日 | 2 |
8197 | 01/10/2022 | 月 | 2 |
8198 | 01/11/2022 | 火 | 3 |
8199 | 01/12/2022 | 水 | 3 |
8200 | 01/13/2022 | Thu | 3 |
8201 | 01/14/2022 | Fri | 3 |
アプリケーションはまだ分離された週を使用しています。ただし、first_week_day 引数は week() 関数で 1 に設定されています。これにより、週の最初の日が火曜日に設定されます。
アプリケーションは既定の BrokenWeeks システム変数を使用しているため、第 1 週は 1 月 1 日の土曜日に始まります。
week() の first_week_day 引数により、週の最初の日が火曜日に設定されます。そのため、第 53 週は 2021 年 12 月 28 日に始まります。
しかし、関数ではそのまま分離週を使用しているため、1 月 1 日以降の最初の火曜日が 1 月 3 日になり、第 1 週は 2 日しかありません。
例 3 – unbroken_weeks
概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じデータセットとシナリオが含まれます。
この例では、未分離の週を使用します。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,6,0) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
week_day
-
week_number
ID | 日付 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 月 | 52 |
8184 | 12/28/2021 | 火 | 52 |
8185 | 12/29/2021 | 水 | 52 |
8186 | 12/30/2021 | Thu | 52 |
8187 | 12/31/2021 | Fri | 52 |
8188 | 01/01/2022 | Sat | 52 |
8189 | 01/02/2022 | 日 | 1 |
8190 | 01/03/2022 | 月 | 1 |
8191 | 01/04/2022 | 火 | 1 |
8192 | 01/05/2022 | 水 | 1 |
8193 | 01/06/2022 | Thu | 1 |
8194 | 01/07/2022 | Fri | 1 |
8195 | 01/08/2022 | Sat | 1 |
8196 | 01/09/2022 | 日 | 2 |
8197 | 01/10/2022 | 月 | 2 |
8198 | 01/11/2022 | 火 | 2 |
8199 | 01/12/2022 | 水 | 2 |
8200 | 01/13/2022 | Thu | 2 |
8201 | 01/14/2022 | Fri | 2 |
first_week_date パラメータが 1 に設定されており、週の初日が火曜日となります。broken_weeks パラメータが 0 に設定されており、関数が分離されていない週を使うよう強制します。最後に、3 番目のパラメータが reference_day を 2 に設定します。
first_week_date パラメータが 6 に設定されており、週の初日が日曜日となります。broken_weeks パラメータが 0 に設定されており、関数が分離されていない週を使うよう強制します。
未分離の週を使用することにより、第 1 週が 1 月 1 日に始まるとは限らず、最低 4 日間が必須となります。そのため、データセットでは、第 52 週は 2022 年 1 月 1 日の土曜日に終わります。そうすると第 1 週は FirstWeekDay システム変数、つまり 1 月 2 日の日曜日に始まります。この週は次の土曜日である 1 月 8 日に終わります。
例 4 – reference_day
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
例 3 と同じデータセットとシナリオ。
-
トランザクションが発生する年と週番号を返す、項目 [week_number] の作成。
-
各トランザクション日付の平日日を示している、week_day という項目の作成。
さらに、次の条件も満たす必要があります。
-
勤務週は火曜日に始まります。
-
会社は未分離の週を使用します。
-
reference_day 値は 2 です。つまり、第 1 週の最小日数は 2 となります。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1,0,2) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
id
-
date
-
week_day
-
week_number
ID | 日付 | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | 月 | 52 |
8184 | 12/28/2021 | 火 | 1 |
8185 | 12/29/2021 | 水 | 1 |
8186 | 12/30/2021 | Thu | 1 |
8187 | 12/31/2021 | Fri | 1 |
8188 | 01/01/2022 | Sat | 1 |
8189 | 01/02/2022 | 日 | 1 |
8190 | 01/03/2022 | 月 | 1 |
8191 | 01/04/2022 | 火 | 2 |
8192 | 01/05/2022 | 水 | 2 |
8193 | 01/06/2022 | Thu | 2 |
8194 | 01/07/2022 | Fri | 2 |
8195 | 01/08/2022 | Sat | 2 |
8196 | 01/09/2022 | 日 | 2 |
8197 | 01/10/2022 | 月 | 2 |
8198 | 01/11/2022 | 火 | 3 |
8199 | 01/12/2022 | 水 | 3 |
8200 | 01/13/2022 | Thu | 3 |
8201 | 01/14/2022 | Fri | 3 |
first_week_date パラメータが 1 に設定されており、週の初日が火曜日となります。broken_weeks パラメータが 0 に設定されており、関数が分離されていない週を使うよう強制します。最後に、3 番目のパラメータが reference_day を 2 に設定します。
関数が未分離の週を使用し、パラメータとして reference_day 値 2 を使用しているため、第 1 週に含める必要があるのは 1 月の 2 日間のみです。最初の平日が火曜日であるため、第 1 週は 2021 年 12 月 28 日に始まり、2022 年 1 月 3 日に終わります。
例 5 – Chart object example
概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じデータセットとシナリオが含まれます。
ただし、この例では、変更されていないデータセットがアプリケーションにロードされます。週番号を返す計算は、チャート オブジェクトでメジャーとして作成されます。
ロード スクリプト
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
結果
次の手順を実行します。
-
データをロードしてシートを開きます。新しいテーブルを作成します。
-
次の項目を軸として追加します。
-
id
-
date
-
-
次に、下記のメジャーを作成します。
=week (date)
-
各トランザクション日付の平日値を表示するメジャー, week_day を作成します。
=weekday(date)
ID | 日付 | =week(date) | =weekday(date) |
---|---|---|---|
8183 | 12/27/2021 | 53 | 月 |
8184 | 12/28/2021 | 53 | 火 |
8185 | 12/29/2021 | 53 | 水 |
8186 | 12/30/2021 | 53 | Thu |
8187 | 12/31/2021 | 53 | Fri |
8188 | 01/01/2022 | 1 | Sat |
8189 | 01/02/2022 | 2 | 日 |
8190 | 01/03/2022 | 2 | 月 |
8191 | 01/04/2022 | 2 | 火 |
8192 | 01/05/2022 | 2 | 水 |
8193 | 01/06/2022 | 2 | Thu |
8194 | 01/07/2022 | 2 | Fri |
8195 | 01/08/2022 | 2 | Sat |
8196 | 01/09/2022 | 3 | 日 |
8197 | 01/10/2022 | 3 | 月 |
8198 | 01/11/2022 | 3 | 火 |
8199 | 01/12/2022 | 3 | 水 |
8200 | 01/13/2022 | 3 | Thu |
8201 | 01/14/2022 | 3 | Fri |
[week_number] 項目は、week() 関数を使用し、関数の引数として [date] 項目を渡すことにより、前の load ステートメントで作成されます。
関数に渡される他のパラメータはないため、week() 関数に影響する次の既定変数が有効となります。
-
BrokenWeeks: 週のカウントは 1 月 1 日に始まります
-
FirstWeekDay: 週の初日は日曜日です
アプリケーションは既定の BrokenWeeks システム変数を使用しているため、第 1 週は 1 月 1 日の土曜日に始まります。
既定の FirstWeekDay システム変数のため、週は日曜日に始まります。1 月 1 日以降の最初の日曜日は 1 月 2 日に発生し、この日から第 2 週が始まります。
例 6 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
2019 年の最後の週と 2020 年の最初の週のトランザクションを含むデータセットは、Transactions というテーブルにロードされます。
- DateFormat システム変数形式 (MM/DD/YYYY) で提供されている日付項目。
アプリケーションは、ダッシュボード全体で未分離の週を主に使用します。ただし、エンド ユーザーは、未分離の週を使用して週ごとの総売上高を示すチャート オブジェクトを求めています。週が火曜日に始まるため、参照日は 1 月 2 日である必要があります。これは、チャートの計算軸として week() 関数を使用して、この軸がデータ モデルで使用できない場合でも実現できます。
ロード スクリプト
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2019,58.27
8184,12/28/2019,67.42
8185,12/29/2019,23.80
8186,12/30/2019,82.06
8187,12/31/2019,40.56
8188,01/01/2020,37.23
8189,01/02/2020,17.17
8190,01/03/2020,88.27
8191,01/04/2020,57.42
8192,01/05/2020,53.80
8193,01/06/2020,82.06
8194,01/07/2020,40.56
8195,01/08/2020,53.67
8196,01/09/2020,26.63
8197,01/10/2020,72.48
8198,01/11/2020,18.37
8199,01/12/2020,45.26
8200,01/13/2020,58.23
8201,01/14/2020,18.52
];
結果
次の手順を実行します。
-
データをロードしてシートを開きます。新しいテーブルを作成します。
-
次の計算軸を作成します。
=week(date)
-
次に、下記の集計メジャーを作成します。
=sum(amount)
-
メジャーの [数値書式] を [通貨] に設定します。
-
[ソート] メニューを選択し、計算軸に対して、カスタム ソートを削除します。
-
[数値でソート] と [アルファベット順でソート] オプションの選択を解除します。
week(date) | sum(amount) |
---|---|
52 | $125.69 |
53 | $146.42 |
1 | $200.09 |
2 | $347.57 |
3 | $122.01 |