# makeweekdate スクリプトおよびチャート関数

この関数は、年 、週番号、曜日から算出された日付を返します。

構文:

MakeWeekDate(weekyear [, week [, weekday [, first\_week\_day [, broken\_weeks [, reference\_day]]]]])

戻り値データ型： デュアル

`makeweekdate()` 関数はスクリプトとチャート関数の両方として使用できます。関数は、関数に渡されたパラメータに基づいて日付を計算します。

引数

| 引数 | 説明 |
| --- | --- |
| weekyear | 特定の日付に対して `WeekYear()` 関数によって定義された年、つまり週番号が属する年です。<br><br>情報メモ前年の 12 月に第 1 週がすでに開始されている場合など、週の年が暦年と異なる場合があります。 |
| week | 特定の日付に対して `Week()` 関数によって定義された週番号です。<br><br>週番号が指定されていない場合は、1 として処理されます。 |
| weekday | 質問の日付に対して `WeekDay()` 関数によって定義された曜日です。0 は週の最初の日、6 は週の最後の日になります。<br><br>曜日が指定されていない場合は、0 として処理されます。<br><br>情報メモ0 は常に週の最初の日を意味し、6 は常に最後の日を意味しますが、対応する曜日は first\_week\_day パラメーターによって決定されます。省略されている場合は、変数 FirstWeekDay の値が使用されます。<br><br>分離した週が使用され、パラメーターを組み合わせることができない場合、選択した年に属さない結果になる可能性があります。<br><br>```<br>MakeWeekDate(2021,1,0,6,1)<br>```<br><br>この日は指定された週の最初の日 (日曜日) であるため、「2020 年 12 月 27 日」を返します。2021 年 1 月 1 日は金曜日でした。 |
| first\_week\_day | 週の開始日を指定します。省略されている場合は、変数 FirstWeekDay の値が使用されます。<br><br>first\_week\_day には、0 が月曜日、1 が火曜日、2 が水曜日、3 が木曜日、4 が金曜日、5 が土曜日、6 が日曜日の値を使用できます。<br><br>システム変数の詳細については、[FirstWeekDay](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm) を参照してください。 |
| broken\_weeks | broken\_weeks が指定されていない場合は、変数 BrokenWeeks の値を使用して、週が分離しているかどうかを定義します。<br><br>システム変数の詳細については、[BrokenWeeks](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/BrokenWeeks.htm) を参照してください |
| reference\_day | reference\_day が指定されていない場合は、変数 ReferenceDay の値を使用して、第 1 週を定義する参照日として設定する 1 月の日を定義します。<br><br>システム変数の詳細については、[ReferenceDay](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/ReferenceDay.htm) を参照してください |

## makeweekdate の使用目的

`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` ステートメントで指定されています。既定の日付書式は、リージョンの設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「[アプリケーションとスクリプトの地域設定の変更](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)」を参照してください。

アプリケーションの既定のリージョン設定は、ユーザー プロファイルに基づいています。これらのリージョンの書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。

アプリケーションの作成者は、作成するアプリケーションの既定のリージョンを設定できます。詳細については、「[Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)」を参照してください。

## 例 1 – 日を含む

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/makeweekdate.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* `Sales` というテーブルの 2022 年の週次売上合計を含むデータセット。

* 3 つの項目 `year`、`week` および `sales` に提供されたトランザクション日付。

* `makeweekdate()` 関数を使って MM/DD/YYYY 形式でその週の金曜日の日付を返す、メジャー `end_of_week` を作成するのに使用される先行する LOAD。

返された日付が金曜日であることを証明するには、`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`

結果テーブル

| transaction\_year | transaction\_week | end\_of\_week | week\_day |
| --- | --- | --- | --- |
| 2022 | 01 | 01/07/2022 | 金 |
| 2022 | 02 | 01/14/2022 | 金 |
| 2022 | 03 | 01/21/2022 | 金 |
| 2022 | 04 | 01/28/2022 | 金 |
| 2022 | 05 | 02/04/2022 | 金 |
| 2022 | 06 | 02/11/2022 | 金 |
| 2022 | 07 | 02/18/2022 | 金 |

`end_of_week` 項目は、`makeweekdate()` 関数を使用して、先行する LOAD ステートメントで作成されます。`transaction_year`、`transaction_week` 項目は、年および週の引数として関数を使って渡されます。値 4 は、日引数に使用されます。

次に関数はこれらの値を組み合わせて日付項目に変換し、`DateFormat` システム変数の形式で結果を返します。

`makeweekdate()` 関数とその引数もまた `weekday()` 関数で囲まれ、`week_day` 項目を返します。さらに、上記のテーブルでは、`week_day` 項目ではこれらの日付が金曜日に当たることがわかります。

## 例 2 – 日を除外

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/makeweekdate.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 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

結果テーブル

| 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 – チャート オブジェクトの例

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/makeweekdate.htm)

#### ロード スクリプトとチャートの数式

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* Sales というテーブルの 2022 年の週次売上合計を含むデータセット。

* 3 つの項目 year、week および sales に提供されたトランザクション日付。

この例では、最初の例から 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
];
```

結果

次の手順を実行します。

1. データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

   * transaction\_year

   * transaction\_week

2. 最初の例の end\_of\_week 項目に相当する計算を実行するには、次のメジャーを作成します:

   =makeweekdate(transaction\_year,transaction\_week,4)

3. 各トランザクションの週の曜日を計算するには、次のメジャーを作成します:

   =weekday(makeweekdate(transaction\_year,transaction\_week,4))

結果テーブル

| transaction\_year | transaction\_week | =makeweekdate(transaction\_year,transaction\_week,4) | =weekday(makeweekdate(transaction\_year,transaction\_week,4)) |
| --- | --- | --- | --- |
| 2022 | 01 | 01/07/2022 | 金 |
| 2022 | 02 | 01/14/2022 | 金 |
| 2022 | 03 | 01/21/2022 | 金 |
| 2022 | 04 | 01/28/2022 | 金 |
| 2022 | 05 | 02/04/2022 | 金 |
| 2022 | 06 | 02/11/2022 | 金 |
| 2022 | 07 | 02/18/2022 | 金 |

end\_of\_week に相当する項目が、makeweekdate() 関数を使用することにより、メジャーとしてチャート オブジェクトに作成されます。transaction\_year および transaction\_week 項目は、年および週の引数として渡されます。値 4 は、日引数に使用されます。

次に関数はこれらの値を組み合わせて日付項目に変換し、DateFormat システム変数の形式で結果を返します。

makeweekdate() 関数とその引数もまた weekday() 関数で囲まれ、最初の例からの week\_day 項目の計算に相当する計算を返します。上記のテーブルで分かるように、右側の最後の列はこれらの日付が金曜日に当たることを示しています。

## 例 4 – シナリオ

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/makeweekdate.htm)

#### ロード スクリプトとチャートの数式

概要

この例では、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;
```

結果

結果テーブル

| date | weekday |
| --- | --- |
| 01/07/2022 | 金 |
| 01/14/2022 | 金 |
| 01/21/2022 | 金 |
| 01/28/2022 | 金 |
| 02/04/2022 | 金 |
| 02/11/2022 | 金 |
| 02/18/2022 | 金 |
| 02/25/2022 | 金 |
| 03/04/2022 | 金 |
| 03/11/2022 | 金 |
| 03/18/2022 | 金 |
| 03/25/2022 | 金 |
| 04/01/2022 | 金 |
| 04/08/2022 | 金 |
| 04/15/2022 | 金 |
| 04/22/2022 | 金 |
| 04/29/2022 | 金 |
| 05/06/2022 | 金 |
| 05/13/2022 | 金 |
| 05/20/2022 | 金 |
| 05/27/2022 | 金 |
| 06/03/2022 | 金 |
| 06/10/2022 | 金 |
| 06/17/2022 | 金 |
| さらに 27 行以上 |  |

makeweekdate() 関数は、2022 年のすべての金曜日を見つけます。週パラメータ -2 を使うことにより、日付を見過ごすことはなくなります。最後に、先行 load が追加の weekday 項目を作成し、各 date の値が金曜日であることを明確に示します。