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

Эта функция возвращает значение, соответствующее метке времени, включающей последнюю миллисекунду последнего дня месяца, содержащего значение, указанное в поле `date`. По умолчанию для вывода используется формат `DateFormat`, установленный в скрипте.

Синтаксис:

MonthEnd(date[, period\_no])

Другими словами, функция `monthend()` определяет, на какой месяц приходится дата. Затем она возвращает метку времени в формате даты для последней миллисекунды этого месяца.

Схема функции `monthend`.

Схема функции `monthend`.

Схема функции `monthend`monthend. ![Диаграмма, демонстрирующая использование функции monthend для идентификации последней метки времени выбранного месяца.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthend-diagram1.png)

Когда использовать monthend

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

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| date | Дата или метка времени для вычисления. |
| period\_no | period\_no является целым числом, значение 0 которого или отсутствие значения означает месяц, содержащий значение, указанное в поле date. Отрицательные значения, заданные в поле period\_no, означают предшествующие месяцы, положительные — последующие. |

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

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: MM/DD/YYYY. Формат даты указан в операторе `SET DateFormat` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами. Для получения дополнительной информации см. раздел [Изменение региональных настроек для приложений и скриптов](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm).

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

Если вы — разработчик приложений, то можете задать регион по умолчанию для создаваемых приложений. Для получения дополнительной информации см. раздел [Установка предпочтительных региональных настроек для создания приложений и скриптов в Аналитика Qlik Cloud](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting).

Примеры функции

| Пример | Результат |
| --- | --- |
| `monthend('02/19/2012')` | Возвращает 02/29/2012 23:59:59. |
| `monthend('02/19/2001', -1)` | Возвращает 01/31/2001 23:59:59. |

## Пример 1. Базовый пример

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

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

Обзор

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

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

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

* Поле даты, предоставленное в формате системной переменной `DateFormat` (`MM/DD/YYYY`).

* Предшествующий оператор load, который содержит следующее:

  * Функция `monthend()`, заданная как поле `end_of_month`.

  * Функция `timestamp`, заданная как поле `end_of_month_timestamp`.

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

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

Transactions: 
    Load 
    *, 
    monthend(date) as end_of_month, 
    timestamp(monthend(date)) as end_of_month_timestamp 
    ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,1/7/2022,17.17 
8189,1/19/2022,37.23 
8190,2/28/2022,88.27 
8191,2/5/2022,57.42 
8192,3/16/2022,53.80 
8193,4/1/2022,82.06 
8194,5/7/2022,40.39 
8195,5/16/2022,87.21 
8196,6/15/2022,95.93 
8197,6/26/2022,45.89 
8198,7/9/2022,36.23 
8199,7/22/2022,25.66 
8200,7/23/2022,82.77 
8201,7/27/2022,69.98 
8202,8/2/2022,76.11 
8203,8/8/2022,25.12 
8204,8/19/2022,46.23 
8205,9/26/2022,84.21 
8206,10/14/2022,96.24 
8207,10/29/2022,67.67 
]; 
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `id`
* `date`
* `end_of_month`
* `end_of_month_timestamp`

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

| id | date | end\_of\_month | end\_of\_month\_timestamp |
| --- | --- | --- | --- |
| 8188 | 1/7/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
| 8189 | 1/19/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
| 8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
| 8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
| 8192 | 3/16/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
| 8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
| 8194 | 5/7/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
| 8195 | 5/16/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
| 8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8198 | 7/9/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8199 | 7/22/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8200 | 7/23/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8201 | 7/27/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8205 | 9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
| 8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
| 8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |

Поле `end_of_month` создано предшествующим оператором load с использованием функции `monthend()`, где в качестве аргумента функции передано поле даты.

Функция `monthend()` определяет, к какому месяцу относится значение даты, и возвращает метку времени для последней миллисекунды этого месяца.

Диаграмма функции `monthend`, выбранный месяц — март.

Диаграмма функции `monthend`, выбранный месяц — март.

Диаграмма функции `monthend`monthend, выбранный месяц — март. ![Диаграмма, демонстрирующая использование функции monthend для идентификации последней метки времени выбранного месяца.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthend-example1-diagram.png)

Транзакция 8192 совершена 16 марта. Функция `monthend()` возвращает последнюю миллисекунду этого месяца, то есть 23:59:59 (11:59:59 PM) 31 марта.

## Пример 2. Скрипт period\_no

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

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

Обзор

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

В этом примере стоит задача создать поле `previous_month_end`, которое возвращает метку времени окончания месяца, предшествующего совершению транзакции.

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

```
SET DateFormat='MM/DD/YYYY'; 
						
Transactions: 
    Load 
    *, 
    monthend(date,-1) as previous_month_end, 
    timestamp(monthend(date,-1)) as previous_month_end_timestamp 
    ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,1/7/2022,17.17 
8189,1/19/2022,37.23 
8190,2/28/2022,88.27 
8191,2/5/2022,57.42 
8192,3/16/2022,53.80 
8193,4/1/2022,82.06 
8194,5/7/2022,40.39 
8195,5/16/2022,87.21 
8196,6/15/2022,95.93 
8197,6/26/2022,45.89 
8198,7/9/2022,36.23 
8199,7/22/2022,25.66 
8200,7/23/2022,82.77
8201,7/27/2022,69.98 
8202,8/2/2022,76.11 
8203,8/8/2022,25.12 
8204,8/19/2022,46.23 
8205,9/26/2022,84.21 
8206,10/14/2022,96.24 
8207,10/29/2022,67.67 
]; 
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `id`
* `date`
* `previous_month_end`
* `previous_month_end_timestamp`

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

| id | date | previous\_month\_end | previous\_month\_end\_timestamp |
| --- | --- | --- | --- |
| 8188 | 1/7/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
| 8189 | 1/19/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
| 8190 | 2/5/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
| 8191 | 2/28/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
| 8192 | 3/16/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
| 8193 | 4/1/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
| 8194 | 5/7/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
| 8195 | 5/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
| 8196 | 6/15/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
| 8197 | 6/26/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
| 8198 | 7/9/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8199 | 7/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8200 | 7/23/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8201 | 7/27/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8202 | 8/2/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8203 | 8/8/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8204 | 8/19/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8205 | 9/26/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8206 | 10/14/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
| 8207 | 10/29/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |

Функция `monthend()` сначала определяет месяц, в течение которого совершены транзакции, так как используется аргумент сдвига `period_no` = `-1`. Затем она возвращается на месяц назад и определяет последнюю миллисекунду предыдущего месяца.

Диаграмма функции `monthend` с переменной period\_no.

Диаграмма функции `monthend` с переменной period\_no.

Диаграмма функции `monthend`monthend с переменной period\_no. ![Диаграмма, демонстрирующая использование функции monthend с переменной period_no для идентификации самой последней метки времени за месяц до метки времени, заданной в функции monthend().](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthend-example2-diagram.png)

Транзакция 8192 совершена 16 марта. Функция `monthend()` определяет, что месяцем, предшествующим транзакции, является февраль. Затем она возвращает последнюю миллисекунду этого месяца, 23:59:59 (11:59:59 PM) 28 февраля.

## Пример 3. Пример диаграммы

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

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

Обзор

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

В этом примере набор данных остается неизменным и загружается в приложение. Задача заключается в том, чтобы создать расчет, который возвращает метку времени окончания месяца, в котором совершены транзакции, как меру в диаграмме в приложении.

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

```
Transactions: 
Load 
* 
Inline  
[ 
id,date,amount 
8188,1/7/2022,17.17 
8189,1/19/2022,37.23 
8190,2/28/2022,88.27 
8191,2/5/2022,57.42 
8192,3/16/2022,53.80 
8193,4/1/2022,82.06 
8194,5/7/2022,40.39 
8195,5/16/2022,87.21 
8196,6/15/2022,95.93 
8197,6/26/2022,45.89 
8198,7/9/2022,36.23 
8199,7/22/2022,25.66 
8200,7/23/2022,82.77 
8201,7/27/2022,69.98 
8202,8/2/2022,76.11 
8203,8/8/2022,25.12 
8204,8/19/2022,46.23 
8205,9/26/2022,84.21 
8206,10/14/2022,96.24 
8207,10/29/2022,67.67 
]; 
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `date`

* `id`

Чтобы вычислить дату окончания месяца, в течение которого была совершена транзакция, создайте следующие меры:

* `=monthend(date)`
* `=timestamp(monthend(date))`

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

| id | date | =monthend(date) | =timestamp(monthend(date)) |
| --- | --- | --- | --- |
| 8188 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
| 8189 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
| 8190 | 9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
| 8191 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8192 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8193 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
| 8194 | 7/9/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8195 | 7/22/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8196 | 7/23/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8197 | 7/27/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
| 8198 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8199 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
| 8200 | 5/7/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
| 8201 | 5/16/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
| 8202 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
| 8203 | 3/16/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
| 8204 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
| 8205 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
| 8206 | 1/7/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
| 8207 | 1/19/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |

Мера `end_of_month` создана в диаграмме с использованием функции `monthend()`, где в качестве аргумента функции передано поле даты.

Функция `monthend()` определяет, к какому месяцу относится значение даты, и возвращает метку времени для последней миллисекунды этого месяца.

Диаграмма функции `monthend` с переменной period\_no.

Диаграмма функции `monthend` с переменной period\_no.

Диаграмма функции `monthend`monthend с переменной period\_no. ![](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthend-example3-diagram.png)

Транзакция 8192 совершена 16 марта. Функция `monthend()` возвращает последнюю миллисекунду этого месяца, то есть 23:59:59 (11:59:59 PM) 31 марта.

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

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

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

Обзор

В этом примере набор данных загружается в таблицу под именем `Employee_Expenses`. Данная таблица содержит следующие поля:

* Employee IDs (Идентификаторы сотрудников)

* Employee names (Имена сотрудников)

* Средние ежедневные заявки на возмещение расходов каждого сотрудника.

Конечному пользователю требуется получить диаграмму, которая по идентификатору и имени сотрудника отображает ожидаемые расходы в течение оставшейся части месяца.

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

```
Employee_Expenses: 
Load 
* 
Inline  
[ 
employee_id,employee_name,avg_daily_claim 
182,Mark, $15 
183,Deryck, $12.5  
184,Dexter, $12.5 
185,Sydney,$27 
186,Agatha,$18 
]; 
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `employee_id`
* `employee_name`

Чтобы рассчитать накопленный процент, создайте эту меру:

`=floor(monthend(today(1),0)-today(1))*avg_daily_claim`

Примечание к информацииЭта мера является динамической и дает разные результаты в таблице в зависимости от даты загрузки данных.

Задайте параметру Формат чисел меры значение Денежный.

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

| employee\_id | employee\_name | =floor(monthend(today(1),0)-today(1))\*avg\_daily\_claim |
| --- | --- | --- |
| 182 | Mark | $30.00 |
| 183 | Deryck | $25.00 |
| 184 | Dexter | $25.00 |
| 185 | Sydney | $54.00 |
| 186 | Agatha | $36.00 |

Функция `monthend()` возвращает дату окончания текущего месяца, используя сегодняшнюю дату в качестве единственного аргумента. Выражение возвращает количество дней, оставшихся в этом месяце, вычитая сегодняшнюю дату из даты окончания месяца.

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