# makedate 指令碼與圖表函數

此函數會傳回從年 YYYY、月 MM 及日 DD 計算而得的日期。

語法：

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

傳回的資料類型： 雙值

引數

| 引數 | 描述 |
| --- | --- |
| YYYY | 年度為整數。 |
| MM | 月份為整數。如未指定月份，則會採用 1 (1 月)。 |
| DD | 日為整數。如未指定日，則會採用 1 (1 號)。 |

## 何時使用 makedate

通常會在用於資料產生的指令碼中使用 `makedate()` 函數，以產生行事曆。若日期欄位無法直接作為日期使用，而需要一些轉換以擷取年份、月份和日期元件，也可以使用此。

這些範例使用日期格式 MM/DD/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` 陳述式中指定。由於地區設定和其他因素，您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式，以滿足您的需求。或者，您可以在載入指令碼中變更格式，以符合這些範例。如需詳細資訊，請參閱 [修改用於應用程式和指令碼的區域設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)。

應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。

若您是應用程式建立者，可以為您建立的應用程式設定預設地區。如需詳細資訊，請參閱[Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定](https://help.qlik.com/zh-TW/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/makedate.htm)

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一組 2018 年交易的資料集，這載入到稱為 `Transactions` 的表格中。

* 以 `DateFormat` 系統變數 (MM/DD/YYYY) 格式提供的日期欄位。

* 建立欄位 `transaction_date`，這以格式 MM/DD/YYYY 傳回日期。

載入指令碼

```
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 | 7 | 09/07/2018 |
| 2018 | 09 | 16 | 09/16/2018 |
| 2018 | 09 | 22 | 09/22/2018 |
| 2018 | 09 | 23 | 09/23/2018 |

`transaction_date` 欄位在前置 LOAD 陳述式中的建立方式是使用 `makedate()` 函數並傳遞年份、月份、日期欄位，作為函數引數。

然後該函數會將這些值合併並轉換為日期欄位，以 `DateFormat` 系統變數格式傳回結果。

## 範例 2 – 修改的 DateFormat

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

#### 載入指令碼和結果

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 與第一個範例相同的資料集和情境。

* 以格式 DD/MM/YYYY 建立欄位 `transaction_date` 而不修改 `DateFormat` 系統變數。

載入指令碼

```
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 | 7 | 07/09/2018 |
| 2018 | 09 | 16 | 16/09/2018 |
| 2018 | 09 | 22 | 22/09/2018 |
| 2018 | 09 | 23 | 23/09/2018 |

在此例中，`makedate()` 函數巢狀於 `date()` 函數內部。`date()` 函數的第二引數將 `makedate()` 函數結果的格式設為所需的 DD/MM/YYYY。

## 範例 3 – 圖表物件範例

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

#### 載入指令碼和圖表運算式

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 包含一組 2018 年交易的資料集，這載入到稱為 `Transactions` 的表格中。

* 跨越兩個欄位提供的交易日期：`year` 和 `month`。

建立圖表物件量值 `transaction_date`，這以格式 MM/DD/YYYY 傳回日期。

載入指令碼

```
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/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/makedate.htm)

#### 載入指令碼和圖表運算式

概述

建立 2022 曆年的行事曆資料集。

載入指令碼

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

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

結果

結果表格

| 日期 |
| --- |
| 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 次。最終，透過使用前置載入，where 條件可用來僅載入來自 2022 年的日期。此指令碼產生包含 2022 年每個日期的行事曆。