makeweekdate - スクリプトおよびチャート関数このページ上
この関数は、年 、週番号、曜日 から算出された日付を返します。
構文:
MakeWeekDate( weekyear [, week [, weekday [, first_week_day [, broken_weeks [, reference_day]]]]] )
戻り値データ型: dual
makeweekdate() 関数はスクリプトとチャート関数の両方として使用できます。関数は、関数に渡されたパラメータに基づいて日付を計算します。
引数
weekyear
特定の日付に対して WeekYear() 関数によって定義された年、つまり週番号が属する年です。
情報メモ 前年の 12 月に第 1 週がすでに開始されている場合など、週の年が暦年と異なる場合があります。
week
特定の日付に対して Week() 関数によって定義された週番号です。
週番号が指定されていない場合は、1 として処理されます。
weekday
質問の日付に対して WeekDay() 関数によって定義された曜日です。0 は週の最初の日、6 は週の最後の日になります。
曜日が指定されていない場合は、0 として処理されます。
情報メモ 0 は常に週の最初の日を意味し、6 は常に最後の日を意味しますが、対応する曜日は first_week_day パラメーターによって決定されます。省略されている場合は、変数 FirstWeekDay の値が使用されます。
分離した週が使用され、パラメーターを組み合わせることができない場合、選択した年に属さない結果になる可能性があります。
MakeWeekDate(2021,1,0,6,1)
この日は指定された週の最初の日 (日曜日) であるため、「2020 年 12 月 27 日」を返します。2021 年 1 月 1 日は金曜日でした。
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 月の日を定義します。
システム変数の詳細については、ReferenceDay を参照してください
使用に適しているケース
makeweekdate() 関数は、日付のリストを生成したり、入力データに年、週、曜日がある場合に日付を作成したりするために、データ生成用のスクリプトで一般的に使用されます。
次の例は下記の内容を推測します。
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
関数の例
makeweekdate(2014,6,6)
の戻り値: 02/09/2014
makeweekdate(2014,6,1)
の戻り値: 02/04/2014
makeweekdate(2014,6)
02/03/2014 を返します (曜日が 0 として処理されます)
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 1 – 日を含む
ロード スクリプトと結果
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
Sales というテーブルの 2022 年の週次売上合計を含むデータセット。
3 つの項目 year 、week および sales に提供されたトランザクション日付。
makeweekdate() 関数を使って MM/DD/YYYY 形式でその週の金曜日の日付を返す、メジャー end_of_week を作成するのに使用される先行ロード。
返された日付が金曜日であることを証明するには、end_of_week 数式も曜日を示すため weekday() 関数で囲みます。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week,4) as end_of_week,
weekday(makeweekdate(transaction_year, transaction_week,4)) as week_day
;
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
transaction_year
transaction_week
end_of_week
week_day
結果テーブル
2022
01
01/07/2022
Fri
2022
02
01/14/2022
Fri
2022
03
01/21/2022
Fri
2022
04
01/28/2022
Fri
2022
05
02/04/2022
Fri
2022
06
02/11/2022
Fri
2022
07
02/18/2022
Fri
[end_of_week ] 項目は、makeweekdate() 関数を使用して、前の Load ステートメントで作成されます。transaction_year 、transaction_week 項目は、年および週の引数として関数を使って渡されます。値 4 は、日引数に使用されます。
次に関数はこれらの値を組み合わせて日付項目に変換し、DateFormat システム変数の形式で結果を返します。
makeweekdate() 関数とその引数もまた weekday() 関数で囲まれ、week_day 項目を返します。さらに、上記のテーブルでは、week_day 項目ではこれらの日付が金曜日に当たることがわかります。
例 2 – 日を除外
ロード スクリプトと結果
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
Sales というテーブルの 2022 年の週次売上合計を含むデータセット。
3 つの項目 year 、week および sales に提供されたトランザクション日付。
makeweekdate() 関数を使って、メジャー first_day_of_week を作成するのに使用される先行 load。これにより、MM/DD/YYYY 形式でその週の月曜日の日付が返されます。
返された日付が月曜日であることを証明するには、first_day_of_week 数式も曜日を示すため weekday() 関数で囲みます。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Transactions:
Load
*,
makeweekdate(transaction_year, transaction_week) as first_day_of_week,
weekday(makeweekdate(transaction_year, transaction_week)) as week_day
;
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
transaction_year
transaction_week
first_day_of_week
week_day
結果テーブル
2022
01
01/03/2022
月
2022
02
01/10/2022
月
2022
03
01/17/2022
月
2022
04
01/24/2022
月
2022
05
01/31/2022
月
2022
06
02/07/2022
月
2022
07
02/14/2022
月
[first_day_of_week ] 項目は、makeweekdate() 関数を使用して、前の Load ステートメントで作成されます。transaction_year と transaction_week パラメータは関数の引数として渡され、日パラメータはブランクのままとなります。
次に関数はこれらの値を組み合わせて日付項目に変換し、DateFormat システム変数の形式で結果を返します。
makeweekdate() 関数とその引数もまた weekday() 関数で囲まれ、week_day 項目を返します。上の表からわかるように、week_day フィールドはすべてのケースで月曜日を返します。これは、makeweekdate() 関数ではそのパラメーターが空白のままであり、既定は 0 (週の最初の曜日) で、週の最初の曜日が FirstWeekDay システム変数によって月曜日に設定されているためです。
例 3 – チャート オブジェクトの例
ロード スクリプトとチャートの数式
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
この例では、最初の例から end_of_week 計算に相当するメジャーを作成するのに、チャート オブジェクトが使用されます。このメジャーは makeweekdate() 関数を使って、MM/DD/YYYY 形式でその週の金曜日の日付が返されます。
返された日付が金曜日であることを証明するため、曜日を返す 2 番目のメジャーが作成されます。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Master_Calendar:
Load * Inline [
transaction_year, transaction_week, sales
2022, 01, 10000
2022, 02, 11250
2022, 03, 9830
2022, 04, 14010
2022, 05, 28402
2022, 06, 9992
2022, 07, 7292
];
結果
次の手順を実行します。
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
transaction_year
transaction_week
最初の例の end_of_week 項目に相当する計算を実行するには、次のメジャーを作成します:
=makeweekdate(transaction_year,transaction_week,4)
各トランザクションの週の曜日を計算するには、次のメジャーを作成します:
=weekday(makeweekdate(transaction_year,transaction_week,4))
結果テーブル
2022
01
01/07/2022
Fri
2022
02
01/14/2022
Fri
2022
03
01/21/2022
Fri
2022
04
01/28/2022
Fri
2022
05
02/04/2022
Fri
2022
06
02/11/2022
Fri
2022
07
02/18/2022
Fri
end_of_week に相当する項目が、makeweekdate() 関数を使用することにより、メジャーとしてチャート オブジェクトに作成されます。transaction_year および transaction_week 項目は、年および週の引数として渡されます。値 4 は、日引数に使用されます。
次に関数はこれらの値を組み合わせて日付項目に変換し、DateFormat システム変数の形式で結果を返します。
makeweekdate() 関数とその引数もまた weekday() 関数で囲まれ、最初の例からの week_day 項目の計算に相当する計算を返します。上記のテーブルで分かるように、右側の最後の列はこれらの日付が金曜日に当たることを示しています。
例 4 – シナリオ
ロード スクリプトとチャートの数式
概要
この例では、2022 年のすべての金曜日を含む日付のリストを作成します。
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプト
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=0;
SET BrokenWeeks=0;
SET ReferenceDay=4;
Calendar:
load
*,
weekday(date) as weekday
where year(date)=2022;
load
makeweekdate(2022,recno()-2,4) as date
AutoGenerate 60;
結果
結果テーブル
01/07/2022
Fri
01/14/2022
Fri
01/21/2022
Fri
01/28/2022
Fri
02/04/2022
Fri
02/11/2022
Fri
02/18/2022
Fri
02/25/2022
Fri
03/04/2022
Fri
03/11/2022
Fri
03/18/2022
Fri
03/25/2022
Fri
04/01/2022
Fri
04/08/2022
Fri
04/15/2022
Fri
04/22/2022
Fri
04/29/2022
Fri
05/06/2022
Fri
05/13/2022
Fri
05/20/2022
Fri
05/27/2022
Fri
06/03/2022
Fri
06/10/2022
Fri
06/17/2022
Fri
さらに 27 行以上
makeweekdate() 関数は、2022 年のすべての金曜日を見つけます。週パラメータ -2 を使うことにより、日付を見過ごすことはなくなります。最後に、先行 load が追加の weekday 項目を作成し、各 date の値が金曜日であることを明確に示します。