weekstart - スクリプトおよびチャート関数
この関数は、date を含む暦週の初日の最初のミリ秒のタイムスタンプに対応する値を返します。デフォルトの出力形式は、スクリプトに設定されている DateFormat です。
構文:
WeekStart(date [, period_no[, first_week_day]])
戻り値データ型: dual
weekstart() 関数は、日付がどの週に該当するかを判断します。次に、その年の最初のミリ秒のタイムスタンプを日付形式で返します。週の最初の曜日は、 FirstWeekDay 環境変数によって決定されます。ただし、weekstart() 関数ではこれより first_week_day 引数が優先されます。
引数 | 説明 |
---|---|
date | 評価する日付またはタイムスタンプ。 |
period_no | shift は整数で、値 0 は date を含む週を示します。shift の値が負の場合は過去の週を、正の場合は将来の週を示します。 |
first_week_day |
週の開始日を指定します。省略されている場合は、変数 FirstWeekDay の値が使用されます。 first_week_day には、0 が月曜日、1 が火曜日、2 が水曜日、3 が木曜日、4 が金曜日、5 が土曜日、6 が日曜日の値を使用できます。 システム変数の詳細については、FirstWeekDay を参照してください。 |
使用に適しているケース
weekstart() 関数は、ユーザーがこれまで経過した週の端数を計算に使用する場合に、数式の一部として一般的に使用されます。例えば、その週でこれまでに従業員が稼いだ合計賃金を計算したい場合に使用できます。
例 | 結果 |
---|---|
weekstart('01/12/2013') | 01/07/2013 を返します。 |
weekstart('01/12/2013', -1 ) | 11/31/2012 を返します。 |
weekstart('01/12/2013', 0, 1) | 01/08/2013 を返します。 |
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 1 – 追加の引数なし
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
Transactions というテーブルにロードされる、2022 年の一連のトランザクションを含むデータセット。
-
DateFormat システム変数形式 (MM/DD/YYYY) で提供されている日付項目。
-
トランザクションが発生する週の始めのタイムスタンプを返す、項目 [start_of_week] の作成。
ロード スクリプト
SET FirstWeekDay=6;
Transactions:
Load
*,
weekstart(date) as start_of_week,
timestamp(weekstart(date)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
start_of_week
-
start_of_week_timestamp
日付 | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
[start_of_week] 項目は、weekstart() 関数を使用し、関数の引数として日付項目を渡すことにより、前の load ステートメントで作成されます。
weekstart() 関数は、まず日付値がどの週に該当するかを識別し、その週の最初のミリ秒のタイムスタンプを返します。
トランザクション 8191 は 2 月 5 日に発生しました。FirstWeekDay システム変数は週の初日を日曜日に設定します。weekstart() 関数は、2 月 5 日前の最初の日曜日、つまり週の始めが 1 月 30 日であったことを特定します。そのため、そのトランザクションの start_of_week 値がその日の最初のミリ秒 1 月 30 日 12:00:00 AM を返します。
例 2 – period_no
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
最初の例と同じデータセットとシナリオ。
-
トランザクションが発生する前の四半期の始めのタイムスタンプを返す、項目 [previous_week_start] の作成。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,-1) as previous_week_start,
timestamp(weekstart(date,-1)) as previous_week_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
previous_week_start
-
previous_week_start_timestamp
日付 | previous_week_start | previous_week_start_timestamp |
---|---|---|
1/7/2022 | 12/26/2021 | 12/26/2021 12:00:00 AM |
1/19/2022 | 01/09/2022 | 1/9/2022 12:00:00 AM |
2/5/2022 | 01/23/2022 | 1/23/2022 12:00:00 AM |
2/28/2022 | 02/20/2022 | 2/20/2022 12:00:00 AM |
3/16/2022 | 03/06/2022 | 3/6/2022 12:00:00 AM |
4/1/2022 | 03/20/2022 | 3/20/2022 12:00:00 AM |
5/7/2022 | 04/24/2022 | 4/24/2022 12:00:00 AM |
5/16/2022 | 05/08/2022 | 5/8/2022 12:00:00 AM |
6/15/2022 | 06/05/2022 | 6/5/2022 12:00:00 AM |
6/26/2022 | 06/19/2022 | 6/19/2022 12:00:00 AM |
7/9/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/22/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/23/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/27/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
8/2/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/8/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/19/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
9/26/2022 | 09/18/2022 | 9/18/2022 12:00:00 AM |
10/14/2022 | 10/02/2022 | 10/2/2022 12:00:00 AM |
10/29/2022 | 10/16/2022 | 10/16/2022 12:00:00 AM |
この例では、-1 の period_no が weekstart() 関数でオフセット引数として使用されたため、関数は最初にトランザクションが発生した週を識別します。次に、1 週間前を調べて、その週の最初のミリ秒を識別します。
トランザクション 8196 は 6 月 15 日に発生しました。weekstart() 関数は、週が 6 月 12 日に開始することを特定します。そのため、前の週は 6 月 5 日 12:00:00 AM に開始されます。これは、[previous_week_start] 項目に対して返される値です。
例 3 – first_week_day
概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じデータセットとシナリオが含まれます。ただし、この例では、勤務週の初日として火曜日を設定する必要があります。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,0,1) as start_of_week,
timestamp(weekstart(date,0,1)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
date
-
start_of_week
-
start_of_week_timestamp
日付 | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/04/2022 | 1/4/2022 12:00:00 AM |
1/19/2022 | 01/18/2022 | 1/18/2022 12:00:00 AM |
2/5/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
2/28/2022 | 02/22/2022 | 2/22/2022 12:00:00 AM |
3/16/2022 | 03/15/2022 | 3/15/2022 12:00:00 AM |
4/1/2022 | 03/29/2022 | 3/29/2022 12:00:00 AM |
5/7/2022 | 05/03/2022 | 5/3/2022 12:00:00 AM |
5/16/2022 | 05/10/2022 | 5/10/2022 12:00:00 AM |
6/15/2022 | 06/14/2022 | 6/14/2022 12:00:00 AM |
6/26/2022 | 06/21/2022 | 6/21/2022 12:00:00 AM |
7/9/2022 | 07/05/2022 | 7/5/2022 12:00:00 AM |
7/22/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/23/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/27/2022 | 07/26/2022 | 7/26/2022 12:00:00 AM |
8/2/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/8/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/19/2022 | 08/16/2022 | 8/16/2022 12:00:00 AM |
9/26/2022 | 09/20/2022 | 9/20/2022 12:00:00 AM |
10/14/2022 | 10/11/2022 | 10/11/2022 12:00:00 AM |
10/29/2022 | 10/25/2022 | 10/25/2022 12:00:00 AM |
この場合、first_week_date 引数 1 が weekstart() 関数で使用されているため、週の初日として火曜日を設定します。
トランザクション 8191 は、2 月 5 日に発生しました。weekstart() 関数は、この日付前の最初の火曜日、つまり週の最初および返された値は 2 月 1 日 12:00:00 AM であることを特定します。
例 4 – チャート オブジェクトの例
概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには、最初の例と同じデータセットとシナリオが含まれます。
ただし、この例では、変更されていないデータセットがアプリケーションにロードされます。トランザクションが発生した月の始めのタイムスタンプを返す計算は、アプリケーションのチャート オブジェクトのメジャーとして作成されます。
ロード スクリプト
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:date。
トランザクションが発生する週の初めを計算するには、次のメジャーを計算します。
-
=weekstart(date)
-
=timestamp(weekstart(date))
日付 | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
[start_of_week] メジャーは、weekstart() 関数を使用し、関数の引数として [date] 項目を渡すことにより、チャート オブジェクトで作成されます。
weekstart() 関数は、まず日付値がどの週に該当するかを識別し、その週の最初のミリ秒のタイムスタンプを返します。
トランザクション 8191 は 2 月 5 日に発生しました。FirstWeekDay システム変数は週の初日を日曜日に設定します。weekstart() 関数は、2 月 5 日の前の最初の日曜日、つまり週の始めが 1 月 30 日であったことを特定します。そのため、トランザクションの start_of_week 値は、その日の最初のミリ秒である 1 月 30 日 12:00:00 AM を返します。
例 5 – シナリオ
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
「Payroll」というテーブルにロードされるデータセット。
-
従業員 ID、従業員名および各従業員の平均日次賃金で構成されたデータ。
従業員は月曜日に勤務を開始し、週に 6 日間働きます。FirstWeekDay システム変数は変更できません。
エンドユーザーは、従業員 ID と従業員名別にその週のその日までに稼いだ賃金を表示するチャート オブジェクトを求めています。
ロード スクリプト
Payroll:
Load
*
Inline
[
employee_id,employee_name,day_rate
182,Mark, $150
183,Deryck, $125
184,Dexter, $125
185,Sydney,$270
186,Agatha,$128
];
結果
次の手順を実行します。
-
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
employee_id
-
employee_name
-
-
次に、その週のその日までに稼いだ賃金を計算するメジャーを作成します。
=if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6)
-
メジャーの [数値書式] を [通貨] に設定します。
employee_id | employee_name | =if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6) |
---|---|---|
182 | Mark | $600.00 |
183 | Deryck | $500.00 |
184 | Dexter | $500.00 |
185 | Sydney | $1080.00 |
186 | Agatha | $512.00 |
weekstart() 関数は、今日の日付を第一引数、0 を第 3 引数として使うことにより、週の初日として月曜日を設定し、現在の週の開始日付を返します。その結果を現在の日付から減算することにより、数式は今週経過した日数を返します。
次に条件で、この週の経過日数が 6 日を超えているかどうかが評価されます。その場合、従業員の day_rate は 6 日間で乗算されます。そうでない場合、day_rate は、今週発生した日数で乗算されます。