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

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

Синтаксис:

InMonths(n\_months, timestamp, base\_date, period\_no [, first\_month\_of\_year])

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

В Qlik Sense логическое значение «истина» представлено как -1, а «ложь» — как 0.

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

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

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

Функция `inmonths()` делит год на сегменты на основе предоставленного аргумента `n_months`. Затем она определяет, относится ли каждая оцениваемая метка времени к тому же сегменту, что аргумент `base_date`. Однако если передан аргумент `period_no`, функция определяет, попадают ли метки времени в предыдущий или следующий период относительно `base_date`.

В качестве аргументов `n_month` в функции доступны следующие отрезки года.

Аргументы `n_month`n\_month

| Период | Количество месяцев |
| --- | --- |
| месяц | 1 |
| два месяца | 2 |
| квартал | 3 |
| четыре месяца | 4 |
| полгода | 6 |

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

Функция `inmonths()` возвращает результат в виде булева значения. Обычно этот тип функции используется в качестве условия в `if expression`. Используя функцию `inmonths()`, можно выбрать период, который требуется оценить. Например, это дает возможность идентифицировать продукты, произведенные в месяце, квартале или полугодии определенного периода.

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

В Qlik Sense логическое значение «истина» представлено как -1, а «ложь» — как 0.

Аргументы

| Аргумент | Описание |
| --- | --- |
| n\_months | Число месяцев, обозначающее период. Целое число или выражение, определяемое по целому числу, которое должно быть одним из следующих значений: 1 (эквивалентно функции inmonth()), 2 (двухмесячный период), 3 (эквивалентно функции inquarter()), 4 (четыре месяца) или 6 (полугодие). |
| timestamp | Дата, которую необходимо сравнить со значением, указанным в поле base\_date. |
| base\_date | Дата, использующаяся для оценки периода. |
| period\_no | Период можно сместить, задав значение в поле period\_no, целом числе или выражении, определяемом по целому числу, где 0 обозначает период, включающий значение, указанное в поле base\_date. Отрицательные значения, заданные в поле period\_no, означают предшествующие периоды, положительные — последующие. |
| first\_month\_of\_year | Если необходимо работать с годами (финансовыми), которые начинаются не в январе, задайте значение от 2 до 12 в поле first\_month\_of\_year. |

Можно использовать следующие значения, чтобы задать первый месяц года в аргументе `first_month_of_year`:

значения first\_month\_of\_year

| Месяц | Значение |
| --- | --- |
| Февраль | 2 |
| Март | 3 |
| Апрель | 4 |
| May | 5 |
| Июнь | 6 |
| Июль | 7 |
| Август | 8 |
| Сентябрь | 9 |
| Октябрь | 10 |
| Ноябрь | 11 |
| Декабрь | 12 |

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

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе `SET DateFormat` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.

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

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

| Пример | Результат |
| --- | --- |
| `inmonths(4, '01/25/2013', '04/25/2013', 0)` | Возвращает TRUE. Поскольку значение timestamp, 01/25/2013, находится в четырехмесячном периоде с 01/01/2013 по 04/30/2013, в котором находится значение `base_date`, 04/25/2013. |
| `inmonths(4, '05/25/2013', '04/25/2013', 0)` | Возвращает FALSE. Поскольку 05/25/2013 находится за пределами периода, указанного в предыдущем примере. |
| `inmonths(4, '11/25/2012', '02/01/2013', -1 )` | Возвращает TRUE. Поскольку значение `period_no`, `-1`, сдвигает период поиска на один период из четырех месяцев назад (значение n-months), вследствие чего период поиска будет составлять промежуток с 09/01/2012 по 12/31/2012. |
| `inmonths(4, '05/25/2006', '03/01/2006', 0, 3)` | Возвращает TRUE. Возвращает `first_month_of_year`, так как значение равно `3`, в результате чего период поиска длится с 03/01/2006 по 07/30/2006, а не с 01/01/2006 по 04/30/2006. |

## Пример 1. Без дополнительных аргументов

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

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

Обзор

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

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

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

* Предшествующая загрузка с дополнительной переменной '`in_months`', которая определяет, совершены ли транзакции в том же квартале, к которому относится 15 мая 2022 года.

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

```
SET DateFormat='MM/DD/YYYY'; 
						
Transactions: 
    Load 
       *, 
       inmonths(3,date,'05/15/2022', 0) as in_months 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,'2/19/2022',37.23 
8189,'3/7/2022',17.17 
8190,'3/30/2022',88.27 
8191,'4/5/2022',57.42 
8192,'4/16/2022',53.80 
8193,'5/1/2022',82.06 
8194,'5/7/2022',40.39 
8195,'5/22/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`
* `in_months`

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

| date | in\_months |
| --- | --- |
| 2/19/2022 | 0 |
| 3/7/2022 | 0 |
| 3/30/2022 | 0 |
| 4/5/2022 | -1 |
| 4/16/2022 | -1 |
| 5/1/2022 | -1 |
| 5/7/2022 | -1 |
| 5/22/2022 | -1 |
| 6/15/2022 | -1 |
| 6/26/2022 | -1 |
| 7/9/2022 | 0 |
| 7/22/2022 | 0 |
| 7/23/2022 | 0 |
| 7/27/2022 | 0 |
| 8/2/2022 | 0 |
| 8/8/2022 | 0 |
| 8/19/2022 | 0 |
| 9/26/2022 | 0 |
| 10/14/2022 | 0 |
| 10/29/2022 | 0 |

Поле `in_months` создано в предшествующем операторе load с помощью функции `inmonths()`. Первым предоставлен аргумент `3`, который делит год на квартальные сегменты. Второй аргумент определяет, какое поле оценивается. В данном примере это поле даты. Третий аргумент — это жестко закодированная дата 15 мая, которая является `base_date`, а `period_no` = `0` является заключительным аргументом.

Диаграмма функции `inmonths()` с квартальными сегментами

Диаграмма функции `inmonths()` с квартальными сегментами

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

Май попадает во второй квартал года. Поэтому все транзакции, которые совершаются с 1 апреля по 30 июня будут возвращать булев результат TRUE. Это можно проверить в таблице результатов.

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

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

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

Обзор

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

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

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

* Предыдущая загрузка с дополнительной переменной '`previous_quarter`', которая определяет, совершены ли транзакции в квартале до 15 мая 2022 года.

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

```
SET DateFormat='MM/DD/YYYY'; 
						
Transactions: 
    Load 
       *, 
       inmonths(3,date,'05/15/2022', -1) as previous_quarter 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,'2/19/2022',37.23 
8189,'3/7/2022',17.17 
8190,'3/30/2022',88.27 
8191,'4/5/2022',57.42 
8192,'4/16/2022',53.80 
8193,'5/1/2022',82.06 
8194,'5/7/2022',40.39 
8195,'5/22/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_quarter`

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

| date | revious quarter |
| --- | --- |
| 2/19/2022 | -1 |
| 3/7/2022 | -1 |
| 3/30/2022 | -1 |
| 4/5/2022 | 0 |
| 4/16/2022 | 0 |
| 5/1/2022 | 0 |
| 5/7/2022 | 0 |
| 5/22/2022 | 0 |
| 6/15/2022 | 0 |
| 6/26/2022 | 0 |
| 7/9/2022 | 0 |
| 7/22/2022 | 0 |
| 7/23/2022 | 0 |
| 7/27/2022 | 0 |
| 8/2/2022 | 0 |
| 8/8/2022 | 0 |
| 8/19/2022 | 0 |
| 9/26/2022 | 0 |
| 10/14/2022 | 0 |
| 10/29/2022 | 0 |

Функция оценивает, совершены ли транзакции в первый квартал года, используя `-1` в качестве аргумента `period_no` в функции `inmonths()`. 15 мая является `base_date` и попадает во второй квартал года (апрель-июнь).

Диаграмма функции `inmonths()` с квартальными сегментами и `period_no` = `-1`

Диаграмма функции `inmonths()` с квартальными сегментами и `period_no` = `-1`

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

Таким образом, любая транзакция, совершенная в период с января по март, возвращает булев результат TRUE.

## Пример 3. Аргумент first\_month\_of\_year

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

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

Обзор

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

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

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

* Предыдущая загрузка с дополнительной переменной '`in_months`', которая определяет, совершены ли транзакции в том же квартале, к которому относится 15 мая 2022 года.

В этом примере политика организации устанавливает март в качестве первого месяца финансового года.

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

```
SET DateFormat='MM/DD/YYYY'; 
						
Transactions: 
    Load 
       *, 
       inmonths(3,date,'05/15/2022', 0, 3) as in_months 
       ; 
Load 
* 
Inline  
[ 
id,date,amount 
8188,'2/19/2022',37.23 
8189,'3/7/2022',17.17 
8190,'3/30/2022',88.27 
8191,'4/5/2022',57.42 
8192,'4/16/2022',53.80 
8193,'5/1/2022',82.06 
8194,'5/7/2022',40.39 
8195,'5/22/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`
* `in_months`

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

| date | in\_months |
| --- | --- |
| 2/19/2022 | 0 |
| 3/7/2022 | -1 |
| 3/30/2022 | -1 |
| 4/5/2022 | -1 |
| 4/16/2022 | -1 |
| 5/1/2022 | -1 |
| 5/7/2022 | -1 |
| 5/22/2022 | -1 |
| 6/15/2022 | 0 |
| 6/26/2022 | 0 |
| 7/9/2022 | 0 |
| 7/22/2022 | 0 |
| 7/23/2022 | 0 |
| 7/27/2022 | 0 |
| 8/2/2022 | 0 |
| 8/8/2022 | 0 |
| 8/19/2022 | 0 |
| 9/26/2022 | 0 |
| 10/14/2022 | 0 |
| 10/29/2022 | 0 |

Так как `3` является значением аргумента `first_month_of_year` в функции `inmonths()`, год начинается 1 марта. Функция `inmonths()` делит год на кварталы: мар-май, июн-авг, сен-ноя, дек-фев. Таким образом, 15 мая попадает в первый квартал года (март-май).

Диаграмма функции `inmonths()`, где в качестве первого месяца года задан март.

Диаграмма функции `inmonths()`, где в качестве первого месяца года задан март.

Диаграмма функции `inmonths()`inmonths(), где в качестве первого месяца года задан март.![Диаграмма, на которой показан диапазон времени, оцениваемый функцией inmonths() с базовой датой 15 мая и с разделением года на кварталы при том, что первым месяцем года является март.](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-inmonths-example3-diagram.png)

Любая транзакция, совершенная в эти месяцы, будет возвращать булев результат TRUE.

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

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

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

Обзор

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

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

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

```
SET DateFormat='MM/DD/YYYY'; 
						
Transactions: 
Load 
* 
Inline  
[ 
id,date,amount 
8188,'2/19/2022',37.23 
8189,'3/7/2022',17.17 
8190,'3/30/2022',88.27 
8191,'4/5/2022',57.42 
8192,'4/16/2022',53.80 
8193,'5/1/2022',82.06 
8194,'5/7/2022',40.39 
8195,'5/22/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`

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

`=inmonths(3,date,'05/15/2022', 0)`

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

| date | =inmonths(3,date,'05/15/2022', 0) |
| --- | --- |
| 2/19/2022 | 0 |
| 3/7/2022 | 0 |
| 3/30/2022 | 0 |
| 4/5/2022 | -1 |
| 4/16/2022 | -1 |
| 5/1/2022 | -1 |
| 5/7/2022 | -1 |
| 5/22/2022 | -1 |
| 6/15/2022 | -1 |
| 6/26/2022 | -1 |
| 7/9/2022 | 0 |
| 7/22/2022 | 0 |
| 7/23/2022 | 0 |
| 7/27/2022 | 0 |
| 8/2/2022 | 0 |
| 8/8/2022 | 0 |
| 8/19/2022 | 0 |
| 9/26/2022 | 0 |
| 10/14/2022 | 0 |
| 10/29/2022 | 0 |

Поле `in_months` создается в диаграмме с помощью функции `inmonths()`. Первым предоставлен аргумент `3`, который делит год на кварталы. Второй аргумент определяет, какое поле оценивается. В данном примере это поле даты. Третий аргумент — это жестко закодированная дата 15 мая, которая является `base_date`, а `period_no` = `0` является заключительным аргументом.

Диаграмма функции `inmonths()` с квартальными сегментами

Диаграмма функции `inmonths()` с квартальными сегментами

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

Май попадает во второй квартал года. Поэтому все транзакции, которые совершаются с 1 апреля по 30 июня будут возвращать булев результат TRUE. Это можно проверить в таблице результатов.

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

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

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

Обзор

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

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

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

* Данная таблица содержит следующие поля:

  * product ID (ИД продукта)

  * product type (тип продукта)

  * manufacture date (дата изготовления)

  * cost price (себестоимость)

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

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

```
SET vPeriod = 1; 

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

Результаты

Загрузите данные и откройте лист.

В начале скрипта загрузки создана переменная vPeriod, которая будет привязана к элементу управления вводом переменной.

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

1. На панели ресурсов щелкните Пользовательские объекты.

2. Выберите Qlik Dashboard bundle и создайте объект Ввод переменной.

3. Введите заголовок для объекта диаграммы.

4. В разделе Переменная выберите vPeriod в качестве имени и задайте для отображения объект Раскрывающийся список.

5. В списке Значения выберите Динамическое. Введите следующее:

   ```
   ='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
   ```

6. Добавьте на лист новую таблицу.

7. На панели свойств в разделе Данные можно добавить измерение product\_type.

8. Добавьте следующее выражение в качестве меры:

   =sum(if(inmonths($(vPeriod),manufacture\_date,makedate(2022,01,01),0),cost\_price,0))

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

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

| product\_type | =sum(if(inmonths($(vPeriod),manufacture\_date,makedate(2022,01,01),0),cost\_price,0)) |
| --- | --- |
| Продукт A | $88.27 |
| Продукт B | $37.23 |
| Продукт C | $17.17 |
| Продукт D | $0.00 |

Функция inmonths() использует пользовательский ввод в качестве аргумента для определения размера начального сегмента года. Функция передает дату изготовления каждого продукта в качестве второго аргумента функции inmonths(). Так как 1 января используется в качестве третьего аргумента функции inmonths(), продукты, дата изготовления которых попадает в начальный сегмент года, возвращают булево значение TRUE и поэтому функция sum будет суммировать стоимость этих продуктов.