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

この関数は、年 YYYY、月 MM、日 DD から算出された日付を返します。

構文:

MakeDate(YYYY [ , MM [ , DD ] ])

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

引数

| 引数 | 説明 |
| --- | --- |
| YYYY | 年 (整数)。 |
| MM | 月 (整数)。月が指定されていない場合は、1 (1 月) と見なされます。 |
| DD | 日 (整数)。日が指定されていない場合は、1 (1 日) と見なされます。 |

## 使用に適しているケース

`makedate()` 関数は、カレンダーを生成するために、データ生成用のスクリプトで一般的に使用されます。これは、日付項目を直接日付として利用できないが、年、月、日コンポーネントを抽出するために何らかの変換が必要な場合にも使用できます。

これらの例は、日付書式 DD/MM/YYYY を使用しています。日付書式は、データ ロード スクリプト上部の `SET DateFormat` ステートメントで指定されています。必要に応じて、書式を変更してください。

関数の例

| 例 | 結果 |
| --- | --- |
| `makedate(2012)` | 01/01/2012 を返します。 |
| `makedate(12)` | 01/01/2012 を返します。 |
| `makedate(2012,12)` | 12/01/2012 を返します。 |
| `makedate(2012,2,14)` | 02/14/2012 を返します。 |

## リージョンの設定

特に指定のない限り、このトピックの例では MM/DD/YYYY の日付書式を使用しています。 日付書式は、データ ロード スクリプトの `SET DateFormat` ステートメントで指定されています。既定の日付書式は、リージョンの設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。

アプリケーションの既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらのリージョンの書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。

## 例 1 – 基本的な例

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

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

概要

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

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

* `Transactions` というテーブルにロードされる、2018 年の一連のトランザクションを含むデータセット。

* `DateFormat` システム変数形式 (MM/DD/YYYY) で提供されている日付項目。

* MM/DD/YYYY 形式で日付を返す項目 [`transaction_date`] の作成。

ロード スクリプト

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        makedate(transaction_year, transaction_month, transaction_day) as transaction_date
        ; 
Load * Inline [
transaction_id, transaction_year, transaction_month, transaction_day, transaction_amount, transaction_quantity, customer_id
3750, 2018, 08, 30, 12423.56, 23, 2038593
3751, 2018, 09, 07, 5356.31, 6, 203521
3752, 2018, 09, 16, 15.75, 1, 5646471
3753, 2018, 09, 22, 1251, 7, 3036491
3754, 2018, 09, 22, 21484.21, 1356, 049681
3756, 2018, 09, 22, -59.18, 2, 2038593
3757, 2018, 09, 23, 3177.4, 21, 203521
];
```

結果

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

* `transaction_year`

* `transaction_month`

* `transaction_day`

* `transaction_date`

結果テーブル

| transaction\_year | transaction\_month | transaction\_day | transaction\_date |
| --- | --- | --- | --- |
| 2018 | 08 | 30 | 08/30/2018 |
| 2018 | 09 | 07 | 09/07/2018 |
| 2018 | 09 | 16 | 09/16/2018 |
| 2018 | 09 | 22 | 09/22/2018 |
| 2018 | 09 | 23 | 09/23/2018 |

`transaction_date` 項目は、`makedate()` 関数を使用して、関数の引数として年、月、日の項目を渡すことにより、先行する LOAD ステートメントで作成されます。

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

## 例 2 – 変更された DateFormat

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

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

概要

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

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

* 最初の例と同じデータセットとシナリオ。

* `DateFormat` システム変数を変更しない、形式 DD/MM/YYYY での項目 `transaction_date` の作成。

ロード スクリプト

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        date(makedate(transaction_year, transaction_month, transaction_day), ‘DD/MM/YYYY’) as transaction_date
        ; 
Load * Inline [
transaction_id, transaction_year, transaction_month, transaction_day, transaction_amount, transaction_quantity, customer_id
3750, 2018, 08, 30, 12423.56, 23, 2038593
3751, 2018, 09, 07, 5356.31, 6, 203521
3752, 2018, 09, 16, 15.75, 1, 5646471
3753, 2018, 09, 22, 1251, 7, 3036491
3754, 2018, 09, 22, 21484.21, 1356, 049681
3756, 2018, 09, 22, -59.18, 2, 2038593
3757, 2018, 09, 23, 3177.4, 21, 203521
];
```

結果

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

* `transaction_year`

* `transaction_month`

* `transaction_day`

* `transaction_date`

結果テーブル

| transaction\_year | transaction\_month | transaction\_day | transaction\_date |
| --- | --- | --- | --- |
| 2018 | 08 | 30 | 30/08/2018 |
| 2018 | 09 | 07 | 07/09/2018 |
| 2018 | 09 | 16 | 16/09/2018 |
| 2018 | 09 | 22 | 22/09/2018 |
| 2018 | 09 | 23 | 23/09/2018 |

この場合、`makedate()` 関数は `date()` 関数内にネストされています。`date()` 関数の第 2 引数は、`makedate()` 関数の結果を必要な DD/MM/YYYY として設定します。

## 例 3 – チャート オブジェクトの例

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

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

概要

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

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

* `Transactions` というテーブルにロードされる、2018 年の一連のトランザクションを含むデータセット。

* 2 つの項目 `year` と `month` に提供されたトランザクション日付。

MM/DD/YYYY 形式で日付を返す、チャート オブジェクト メジャー `transaction_date`。

ロード スクリプト

```
SET DateFormat='MM/DD/YYYY';

Transactions:
Load * Inline [
transaction_id, transaction_year, transaction_month, transaction_amount, transaction_quantity, customer_id
3750, 2018, 08, 12423.56, 23, 2038593
3751, 2018, 09, 5356.31, 6, 203521
3752, 2018, 09, 15.75, 1, 5646471
3753, 2018, 09, 1251, 7, 3036491
3754, 2018, 09, 21484.21, 1356, 049681
3756, 2018, 09, -59.18, 2, 2038593
3757, 2018, 09, 3177.4, 21, 203521
];
```

結果

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

* `year`

* `month`

`transaction_date` を決定するには、このメジャーを作成します:

`=makedate(transaction_year,transaction_month)`

結果テーブル

| transaction\_year | transaction\_month | transaction\_date |
| --- | --- | --- |
| 2018 | 08 | 08/01/2018 |
| 2018 | 09 | 09/01/2018 |

`transaction_date` メジャーは、`makedate()` 関数を使用し、関数の引数として年と月項目を渡すことにより、チャート オブジェクトで作成されます。

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

## 例 4 – シナリオ

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

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

概要

暦年 2020 のカレンダー データセットを作成します。

ロード スクリプト

```
SET DateFormat='MM/DD/YYYY';

Calendar:
	load 
		*
    where year(date)=2022;
load
	date(recno()+makedate(2021,12,31)) as date
AutoGenerate 400;
```

結果

結果テーブル

| date |
| --- |
| 01/01/2022 |
| 01/02/2022 |
| 01/03/2022 |
| 01/04/2022 |
| 01/05/2022 |
| 01/06/2022 |
| 01/07/2022 |
| 01/08/2022 |
| 01/09/2022 |
| 01/10/2022 |
| 01/11/2022 |
| 01/12/2022 |
| 01/13/2022 |
| 01/14/2022 |
| 01/15/2022 |
| 01/16/2022 |
| 01/17/2022 |
| 01/18/2022 |
| 01/19/2022 |
| 01/20/2022 |
| 01/21/2022 |
| 01/22/2022 |
| 01/23/2022 |
| 01/24/2022 |
| 01/25/2022 |
| さらに 340 行以上 |

makedate() 関数は、2021 年 12 月 31 日の日付の値を作成します。recno() 関数は、テーブルにロードされる現行レコードのレコード番号を 1 から順に割り当てます。そのため、最初のレコードの日付は 2022 年 1 月 1 日となります。その後の各 recno() は、この日付を 1 日ずつ増やします。この数式は、値を日付に変換する date() 関数で囲まれています。この処理は autogenerate 関数により 400 回繰り返されます。最後に、先行する LOAD を使うことにより、where 条件を使って 2022 年からのみ日付をロードすることができます。このスクリプトは、2022 年のすべての日付を含むカレンダーを生成します。