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

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

Синтаксис:

MonthStart(date[, period\_no])

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

Схема функции `monthstart()`

Схема функции `monthstart()`

Схема функции `monthstart()`monthstart() ![Диаграмма с примером комбинированного использования элементов функции для получения результата.](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthstart-general.png)

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

Аргументы

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

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

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

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

| Пример | Результат |
| --- | --- |
| `monthstart('10/19/2001')` | Возвращает 10/01/2001. |
| `monthstart('10/19/2001', -1)` | Возвращает 09/01/2001. |

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

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

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

Обзор

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

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

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

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

* Создание поля `start_of_month`, возвращающего метку времени начала месяца, в течение которого совершены транзакции.

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

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

Transactions:
    Load
        *,
        monthstart(date) as start_of_month,
        timestamp(monthstart(date)) as start_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
];
```

Результаты

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

* `date`

* `start_of_month`

* `start_of_month_timestamp`

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

| date | начало\_месяца | начало\_месяца\_метка\_времени |
| --- | --- | --- |
| 1/7/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 1/19/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 2/5/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 2/28/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 3/16/2022 | 03/01/2022 | 01.03.2022 00:00:00 |
| 4/1/2022 | 01.04.2022 | 01.04.2022 00:00:00 |
| 5/7/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 5/16/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 6/15/2022 | 06/01/2022 | 01.06.2022 00:00:00 |
| 6/26/2022 | 07/01/2022 | 01.06.2022 00:00:00 |
| 7/9/2022 | 07/01/2022 | 01.07.2022 00:00:00 |
| 7/22/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/23/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/27/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 8/2/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 8/8/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 8/19/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 9/26/2022 | 01.09.2022 | 01.09.2022 00:00:00 |
| 10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
| 10/29/2022 | 10/01/2022 | 01.10.2022 12:00:00 AM |

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

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

Диаграмма функции `monthstart()`, пример без дополнительных аргументов

Диаграмма функции `monthstart()`, пример без дополнительных аргументов

Диаграмма функции `monthstart()`monthstart(), пример без дополнительных аргументов ![Диаграмма, демонстрирующая результаты использования функции monthstart для определения месяца, в котором совершена транзакция.](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthstart-example-no-add-arg.png)

Транзакция 8192 совершена 16 марта. Функция `monthstart()` возвращает первую миллисекунду этого месяца, то есть 00:00:00 (12:00:00 AM) 1 марта.

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

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

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

Обзор

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

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

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

* Создание поля `previous_month_start`, которое возвращает метку времени начала месяца, предшествующего месяцу совершения транзакции.

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

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

Transactions:
    Load
        *,
        monthstart(date,-1) as previous_month_start,
        timestamp(monthstart(date,-1)) as previous_month_start_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
];
```

Результаты

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

* `date`

* `previous_month_start`

* `previous_month_start_timestamp`

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

| date | Начало предыдущего месяца | Метка времени начала предыдущего месяца |
| --- | --- | --- |
| 1/7/2022 | 01.12.2021 | 01.12.2021 00:00:00 |
| 1/19/2022 | 01.12.2021 | 01.12.2021 00:00:00 |
| 2/5/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 2/28/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 3/16/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 4/1/2022 | 01.03.2022 | 01.03.2022 00:00:00 |
| 5/7/2022 | 04/01/2022 | 01.04.2022 00:00:00 |
| 5/16/2022 | 01.04.2022 | 4/1/2022 12:00:00 AM |
| 6/15/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 6/26/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 7/9/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 7/22/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 7/23/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 7/27/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 8/2/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 8/8/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 8/19/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 9/26/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 10/14/2022 | 01.09.2022 | 9/1/2022 12:00:00 AM |
| 10/29/2022 | 09/01/2022 | 01.09.2022 00:00:00 |

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

Диаграмма функции `monthstart()`, пример с аргументом period\_no

Диаграмма функции `monthstart()`, пример с аргументом period\_no

Диаграмма функции `monthstart()`monthstart(), пример с аргументом period\_no ![Диаграмма, демонстрирующая результаты использования функции monthstart для определения месяца, в котором совершена транзакция.](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthstart-example-period-no.png)

Транзакция 8192 совершена 16 марта. Функция `monthstart()` определяет, что месяцем, предшествующим транзакции, является февраль. Затем она возвращает первую миллисекунду этого месяца, 1 февраля в 00:00:00 (12:00:00 AM).

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

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

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

Обзор

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

Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.

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

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

```

SET DateFormat='MM/DD/YYYY';
 
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`.

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

* `=monthstart(date)`

* `=timestamp(monthstart(date))`

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

| date | =началомесяца(дата) | =Меткавремени(началомесяца(дата)) |
| --- | --- | --- |
| 10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
| 10/29/2022 | 10/01/2022 | 01.10.2022 00:00:00 |
| 9/26/2022 | 01.09.2022 | 01.09.2022 00:00:00 |
| 8/2/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 8/8/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 8/19/2022 | 01.08.2022 | 01.08.2022 12:00:00 AM |
| 7/9/2022 | 07/01/2022 | 01.07.2022 00:00:00 |
| 7/22/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/23/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/27/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 6/15/2022 | 06/01/2022 | 01.06.2022 00:00:00 |
| 6/26/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 5/7/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 5/16/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 4/1/2022 | 01.04.2022 | 4/1/2022 12:00:00 AM |
| 3/16/2022 | 03/01/2022 | 01.03.2022 00:00:00 |
| 2/5/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 2/28/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 1/7/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 1/19/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |

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

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

Диаграмма функции `monthstart()`, пример с объектом диаграммы

Диаграмма функции `monthstart()`, пример с объектом диаграммы

Диаграмма функции `monthstart()`monthstart(), пример с объектом диаграммы ![Диаграмма, демонстрирующая результаты использования функции monthstart для определения месяца, в котором совершена транзакция.](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-monthstart-example-chart-object.png)

Транзакция 8192 совершена 16 марта. Функция `monthstart()` определяет, что транзакция совершена в марте и возвращает первую миллисекунду этого месяца, то есть 00:00:00 (12:00:00 AM) 1 марта.

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

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

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

Обзор

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

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

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

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

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

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

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

Loans:
Load
*
Inline
[
loan_id,start_balance,rate
8188,$10000.00,0.024
8189,$15000.00,0.057
8190,$17500.00,0.024
8191,$21000.00,0.034
8192,$90000.00,0.084
];
```

Результаты

Выполните следующие действия.

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

   * loan\_id

   * start\_balance

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

   =start\_balance\*(rate\*(today(1)-monthstart(today(1)))/365)

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

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

| loan\_id | начальный\_баланс | =начальный\_баланс\*(ставка\*(сегодня(1)-начало\_месяца(сегодня(1)))/365) |
| --- | --- | --- |
| 8188 | $10 000,00 | $16.44 |
| 8189 | $15000.00 | $58.56 |
| 8190 | $17500.00 | $28.77 |
| 8191 | $21000.00 | $48.90 |
| 8192 | $90000.00 | $517.81 |

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

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