weekstart - スクリプトおよびチャート関数このページ上
この関数は、date を含む暦週の初日の最初のミリ秒のタイムスタンプに対応する値を返します。デフォルトの出力形式は、スクリプトに設定されている DateFormat です。
構文:
WeekStart( timestamp [, period_no [, first_week_day ]] )
戻り値データ型: dual
weekstart() 関数は、日付がどの週に該当するかを判断します。次に、その年の最初のミリ秒のタイムスタンプを日付形式で返します。週の最初の曜日は、 FirstWeekDay 環境変数によって決定されます。ただし、weekstart() 関数ではこれより first_week_day 引数が優先されます。
引数
timestamp
評価する日付またはタイムスタンプ。
period_no
shift は整数で、値 0 は date を含む週を示します。shift の値が負の場合は過去の週を、正の場合は将来の週を示します。
first_week_day
週の開始日を指定します。省略されている場合は、変数 FirstWeekDay の値が使用されます。
first_week_day には、0 が月曜日、1 が火曜日、2 が水曜日、3 が木曜日、4 が金曜日、5 が土曜日、6 が日曜日の値を使用できます。
システム変数の詳細については、FirstWeekDay を参照してください。
使用に適しているケース
weekstart() 関数は、ユーザーがこれまで経過した週の端数を計算に使用する場合に、数式の一部として一般的に使用されます。例えば、その週でこれまでに従業員が稼いだ合計賃金を計算したい場合に使用できます。
次の例は下記の内容を推測します。
SET FirstWeekDay=0;
関数の例
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 は使用しているブラウザと同じ言語で表示されます。
週数と週番号の ISO 設定を希望する場合、スクリプトに必ず次を組み込むようにしてください。
Set DateFormat ='YYYY-MM-DD';
Set FirstWeekDay =0; // Monday as first week day
Set BrokenWeeks =0; //(use unbroken weeks)
Set ReferenceDay =4; // Jan 4th is always in week 1
US 設定を希望する場合、スクリプトに必ず次を組み込むようにしてください。
Set DateFormat ='M/D/YYYY';
Set FirstWeekDay =6; // Sunday as first week day
Set BrokenWeeks =1; //(use broken weeks)
Set ReferenceDay =1; // Jan 1st is always in week 1
上記の例では、weekstart() 関数から次のような結果になります。
Weekstart 関数の例
Date
ISO week start
US week start
2020 年 12 月 26 日 (土)
2020-12-21
12/20/2020
2020 年 12 月 27 日 (日)
2020-12-21
12/27/2020
2020 年 12 月 28 日 (月)
2020-12-28
12/27/2020
2020 年 12 月 29 日 (火)
2020-12-28
12/27/2020
2020 年 12 月 30 日 (水)
2020-12-28
12/27/2020
2020 年 12 月 31 日 (木)
2020-12-28
12/27/2020
2021 年 1 月 1 日 (金)
2020-12-28
12/27/2020
2021 年 1 月 2 日 (土)
2020-12-28
12/27/2020
2021 年 1 月 3 日 (日)
2020-12-28
1/3/2021
2021 年 1 月 4 日 (月)
2021-01-04
1/3/2021
2021 年 1 月 5 日 (火)
2021-01-04
1/3/2021
情報メモ ISO 列は月曜日、US 列は日曜日が週初めとなります。
例 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
結果テーブル
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() 関数は、まず日付値がどの週に該当するかを識別し、その週の最初のミリ秒のタイムスタンプを返します。
weekstart() 関数の図、追加の引数がない例
トランザクション 8191 は 2 月 5 日に発生しました。FirstWeekDay システム変数は週の初日を日曜日に設定します。weekstart() 関数は、2 月 5 日前の最初の日曜日、つまり週の始めが 1 月 30 日であったことを特定します。そのため、そのトランザクションの start_of_week 値がその日の最初のミリ秒 1 月 30 日 12:00:00 AM を返します。
例 2 – period_no
ロード スクリプトと結果
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
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
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
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 週間前を調べて、その週の最初のミリ秒を識別します。
weekstart() 関数の図、period_no の例
トランザクション 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
結果テーブル
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() 関数で使用されているため、週の初日として火曜日を設定します。
weekstart() 関数、first_week_day 例の図
トランザクション 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 。
トランザクションが発生する週の初めを計算するには、次のメジャーを計算します。
結果テーブル
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() 関数は、まず日付値がどの週に該当するかを識別し、その週の最初のミリ秒のタイムスタンプを返します。
weekstart() 関数の図、チャート オブジェクトの例
トランザクション 8191 は 2 月 5 日に発生しました。FirstWeekDay システム変数は週の初日を日曜日に設定します。weekstart() 関数は、2 月 5 日の前の最初の日曜日、つまり週の始めが 1 月 30 日であったことを特定します。そのため、トランザクションの start_of_week 値は、その日の最初のミリ秒である 1 月 30 日 12:00:00 AM を返します。
例 5 – シナリオ
ロード スクリプトとチャートの数式
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
従業員は月曜日に勤務を開始し、週に 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)
メジャーの [数値書式 ] を [通貨 ] に設定します。
結果テーブル
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 は、今週発生した日数で乗算されます。