# makeweekdate Функция скрипта и диаграммы

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

Синтаксис:

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

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

Функция `makeweekdate()` доступна как функция скрипта и как функция диаграммы. Функция вычислит дату на основе переданных ей параметров.

Аргументы

| Аргумент | Описание |
| --- | --- |
| weekyear | Год, определенный функцией `WeekYear()` для конкретной даты, то есть год, к которому относится номер недели.<br><br>Примечание к информацииНедельный год в некоторых случаях может отличаться от календарного года, например если неделя 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><br>```<br>MakeWeekDate(2021,1,0,6,1)<br>```<br><br>Возвращает 'Dec 27 2020', так как этот день является первым днем (воскресенье) указанной недели. 1 января 2021 года было пятницей. |
| first\_week\_day | Указывает день начала недели. Если не указано, используется значение переменной FirstWeekDay.<br><br>Возможные значения first\_week\_day: 0 — понедельник, 1 — вторник, 2 — среда, 3 — четверг, 4 — пятница, 5 — суббота и 6 — воскресенье.<br><br>Для получения дополнительной информации о системной переменной см. [FirstWeekDay](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm). |
| broken\_weeks | Если параметр broken\_weeks не указан, значение переменной BrokenWeeks используется для определения, какими должны быть недели: полными или неполными.<br><br>Для получения дополнительной информации о системной переменной см. [BrokenWeeks](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/BrokenWeeks.htm) |
| reference\_day | Если параметр reference\_day не указан, значение переменной ReferenceDay используется для определения, какой день в январе должен быть задан в качестве дня ссылки, чтобы определить неделю 1.<br><br>Для получения дополнительной информации о системной переменной см. [ReferenceDay](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/ReferenceDay.htm) |

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

Функция `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` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.

Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому вы обращаетесь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в Qlik Sense интерфейсе пользователя. Qlik Sense будет отображаться на том же языке, что и используемый вами браузер.

## Пример 1. День указан

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

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

Обзор

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

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

* Набор данных, содержащий еженедельные общие продажи за 2022 год, в таблице под именем `Sales`.

* Даты транзакций, предоставленные в виде трех полей: `year`, `week` и `sales`.

* Предшествующая загрузка, используемая для создания меры `end_of_week` с помощью функции `makeweekdate()`, которая возвращает дату для пятницы этой недели в формате MM/DD/YYYY.

Чтобы подтвердить, что возвращаемая дата выпадает на пятницу, в функцию `weekday()` также помещается выражение `end_of_week`, которое отображает день недели.

Скрипт загрузки

```
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`

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

| год\_транзакции | неделя\_транзакции | конец\_недели | week\_day |
| --- | --- | --- | --- |
| 2022 | 01 | 01/07/2022 | Fri |
| 2022 | 02 | 01/14/2022 | Fri |
| 2022 | 03 | 21.01.2022 | Fri |
| 2022 | 04 | 01/28/2022 | Fri |
| 2022 | 05 | 04.02.2022 | Fri |
| 2022 | 06 | 11.02.2022 | Fri |
| 2022 | 07 | 18.02.2022 | Fri |

Поле `end_of_week` создано в предшествующем операторе load с помощью функции `makeweekdate()`. Поля `transaction_year`, `transaction_week` передаются функции в качестве аргументов года и недели. В качестве аргумента дня используется значение 4.

Затем функция объединяет и преобразует эти значения в поле даты, возвращая результаты в формате системной переменной `DateFormat`.

Функция `makeweekdate()` и ее аргументы также помещаются в функцию `weekday()` с целью возвращения поля `week_day`. Как показано в таблице выше, поле `week_day` показывает, что эти даты выпадают на пятницу.

## Пример 2. День не указан

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

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

Обзор

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

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

* Набор данных, содержащий еженедельные продажи за 2022 год, в таблице под именем Sales.

* Даты транзакций, предоставленные в виде трех полей: year, week и sales.

* Предыдущая загрузка, которая используется для создания меры first\_day\_of\_week с помощью функции makeweekdate(). Будет возвращена дата для понедельника этой недели в формате MM/DD/YYYY.

Чтобы подтвердить, что возвращаемая дата выпадает на понедельник, в функцию weekday() также помещается выражение first\_day\_of\_week, которое отображает день недели.

Скрипт загрузки

```
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

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

| год\_транзакции | неделя\_транзакции | первый\_день\_недели | week\_day |
| --- | --- | --- | --- |
| 2022 | 01 | 01/03/2022 | Mon |
| 2022 | 02 | 01/10/2022 | Mon |
| 2022 | 03 | 01/17/2022 | Mon |
| 2022 | 04 | 01/24/2022 | Mon |
| 2022 | 05 | 01/31/2022 | Mon |
| 2022 | 06 | 02/07/2022 | Mon |
| 2022 | 07 | 02/14/2022 | Mon |

Поле first\_day\_of\_week создано в предыдущем операторе load с помощью функции makeweekdate(). Параметры transaction\_year и transaction\_week передаются в качестве аргументов функции, а параметр day остается пустым.

Затем функция объединяет и преобразует эти значения в поле даты, возвращая результаты в формате системной переменной DateFormat.

Функция makeweekdate() и ее аргументы также помещаются в функцию weekday(), в результате чего возвращается поле week\_day. Как видно из приведенной выше таблицы, во всех случаях поле week\_day возвращает понедельник, поскольку этот параметр был оставлен пустым в функции makeweekdate(), которая по умолчанию имеет значение 0 (первый день недели), а первый день недели установлен на понедельник системной переменной FirstWeekDay.

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

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

#### Скрипт загрузки и выражение диаграммы

Обзор

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

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

* Набор данных, содержащий еженедельные продажи за 2022 год, в таблице под именем Sales.

* Даты транзакций, предоставленные в виде трех полей: year, week и sales.

В этом примере объект диаграммы используется для создания меры, эквивалентной вычислению end\_of\_week из первого примера. Эта мера будет использовать функцию makeweekdate(), чтобы вернуть дату для пятницы этой недели в формате MM/DD/YYYY.

Для подтверждения того, что возвращаемая дата выпадает на пятницу, создается вторая мера, которая возвращает день недели.

Скрипт загрузки

```
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))

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

| год\_транзакции | неделя\_транзакции | =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 | 21.01.2022 | Fri |
| 2022 | 04 | 01/28/2022 | Fri |
| 2022 | 05 | 04.02.2022 | Fri |
| 2022 | 06 | 02/11/2022 | Fri |
| 2022 | 07 | 18.02.2022 | Fri |

Поле, эквивалентное полю end\_of\_week, создается как мера в объекте диаграммы с помощью функции makeweekdate(). Поля transaction\_year и transaction\_week передаются функции в качестве аргументов года и недели. В качестве аргумента дня используется значение 4.

Затем функция объединяет и преобразует эти значения в поле даты, возвращая результаты в формате системной переменной DateFormat.

Функция makeweekdate() и ее аргументы также помещаются в функцию weekday(), в результате чего возвращается вычисление, эквивалентное вычислению поля week\_day из первого примера. Как видно по таблице выше, в последнем столбце справа показано, что эти даты выпадают на пятницу.

## Пример 4. Сценарий

[](https://help.qlik.com/en-US/sense/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 | будний день |
| --- | --- |
| 01/07/2022 | Fri |
| 01/14/2022 | Fri |
| 21.01.2022 | Fri |
| 01/28/2022 | Fri |
| 04.02.2022 | Fri |
| 02/11/2022 | Fri |
| 18.02.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 году. Использование параметра week = -2 позволяет предотвратить пропуски дат. В заключение предыдущая загрузка создает дополнительное поле weekday для уточнения, что каждое значение date попадает на пятницу.