# makedate — функция скриптa и диаграммы

Эта функция возвращает дату, рассчитанную в формате год YYYY, месяц MM и день DD.

Синтаксис:

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

Возвращаемые типы данных: двойное значение

Аргументы

| Аргумент | Описание |
| --- | --- |
| YYYY | Год — целое число. |
| MM | Месяц — целое число. Если месяц не задан, используется 1 (январь). |
| DD | День — целое число. Если день не задан, используется 1 (1-е число). |

## Когда это следует использовать

Функция `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. |

## Региональные настройки

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе `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)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, содержащий набор транзакций за 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 | 07 | 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/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/makedate.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Используется тот же набор данных и сценарий, что в первом примере.

* Создание поля `transaction_date` в формате DD/MM/YYYY без изменения системной переменной `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 | 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()` задает формат для результатов функции `makedate()` — DD/MM/YYYY.

## Пример 3. Пример объекта диаграммы

[](https://help.qlik.com/en-US/sense/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/sense/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;
```

Результаты

Результирующая таблица

| 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() создает значение даты для 31 декабря 2021 года. Функция recno() предоставляет номер для текущей записи, загружаемой в таблицу, начиная от 1. Таким образом первая запись имеет дату 1 января 2022 года. Каждый последующий recno() будет увеличивать дату на 1. Это выражение помещается в функцию date() для преобразования значения в дату. Функция autogenerate повторяет этот процесс 400 раз. В завершение, с помощью предыдущей загрузки можно использовать условие where, чтобы загрузить даты только из 2022 года. Этот скрипт создает календарь, содержащий все даты 2022 года.