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

Эта функция определяет, находится ли значение timestamp в пределах части лунной недели до последней миллисекунды, указанной в поле base\_date, включительно. При определении лунных недель в Qlik Sense первым днем первой недели считается 1 января. Все недели, кроме последней будут содержать ровно 7 дней.

Синтаксис:

InLunarWeekToDate (timestamp, base\_date, period\_no [, first\_week\_day])

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

Примечание к информации

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

Диаграмма с примером функции `inlunarweektodate()`

Диаграмма с примером функции `inlunarweektodate()`

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

Функция `inlunarweektodate()` выступает в роли конечной точки лунной недели. В противоположность этому, функция `inlunarweek()` определяет, на какую лунную неделю выпадает `base_date`. Например, если `base_date` = 5 января, любая метка времени с 1 по 5 января может возвращать булев результат `TRUE`, а 6, 7 января и более поздние метки времени будут возвращать булев результат `FALSE`.

Аргументы

| Аргумент | Описание |
| --- | --- |
| timestamp | Дата, которую необходимо сравнить со значением, указанным в поле base\_date. |
| base\_date | Дата, использующаяся для оценки лунной недели. |
| period\_no | Лунную неделю можно сместить, задав значение в поле period\_no. period\_no — целое число, где 0 обозначает лунную неделю, включающую значение, указанное в поле base\_date. Отрицательные значения, заданные в поле period\_no, означают предшествующие лунные недели, положительные — последующие. |
| first\_week\_day | Смещение, которое может быть больше или меньше нуля. Оно изменяет начало года указанным количеством дней и/или десятичных значений. |

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

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

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

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

| Пример | Результат |
| --- | --- |
| `inlunarweektodate('01/12/2013', '01/13/2013',<br>						0)` | Возвращает `TRUE`, поскольку значение `timestamp`, 01/12/2013, выпадает на часть недели с 01/08/2013 по 01/13/2013. |
| `inlunarweektodate('01/12/2013', '01/11/2013',<br>						0)` | Возвращает `FALSE`, поскольку значение `timestamp` имеет более позднюю дату, чем значение `base_date`, несмотря на то что обе даты приходятся на одну и ту же лунную неделю до 01/12/2012. |
| `inlunarweektodate('01/12/2006', '01/05/2006',<br>						1)` | Возвращает `TRUE`. При указании значения 1 для `period_no` происходит сдвиг `base_date` на одну неделю вперед, таким образом, значение `timestamp` выпадает на часть лунной недели. |

Функция `inlunarweektodate()` часто используется в сочетании со следующими функциями:

Связанные функции

| Функция | Взаимодействие |
| --- | --- |
| [lunarweekname — функция скриптa и диаграммы](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lunarweekname.htm) | Эта функция позволяет определить, к какой по порядку лунной неделе года относится входная дата. |

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

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

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

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

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

Обзор

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

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

* Набор данных, содержащий набор транзакций за январь, который загружается в таблицу под именем `Transactions`. Используется системная переменная `DateFormat` со значением по умолчанию MM/DD/YYYY.

* Создайте поле `in_lunar_week_to_date`, которое определяет, какие транзакции совершены в ту же лунную неделю, к которой относится 10 января.

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

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

Transactions:
    Load
        *,
        inlunarweektodate(date,'01/10/2022', 0) as in_lunar_week_to_date
        ;
Load
*
Inline 
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
```

Результаты

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

* `date`

* `in_lunar_week_to_date`

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

| date | in\_lunar\_week\_to\_date |
| --- | --- |
| 1/1/2022 | 0 |
| 1/4/2022 | 0 |
| 1/10/2022 | -1 |
| 1/11/2022 | 0 |
| 1/12/2022 | 0 |
| 1/15/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/21/2022 | 0 |
| 1/23/2022 | 0 |
| 1/26/2022 | 0 |
| 1/27/2022 | 0 |
| 1/29/2022 | 0 |
| 1/31/2022 | 0 |

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

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

Функция `inlunarweektodate()`inlunarweektodate(), без дополнительных аргументов![Пример использования функции inlunarweektodate, демонстрирующий диапазон дат, для которого функция возвращает значение TRUE с учетом входных данных.](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-inlunarweektodate-example-no-additional-arguments.png)

Поле `in_lunar_week_to_date` создано предшествующим оператором load с использованием функции `inlunarweektodate()`, где в качестве аргументов функции переданы поле `date`, жестко запрограммированная дата 10 января в качестве `base_date` и сдвиг 0.

Так как лунная неделя начинается 1 января, 10 января относится к лунной неделе, которая начинается 8 января; и поскольку используется функция `inlunarweektodate()`, эта лунная неделя заканчивается 10 января. Поэтому все транзакции, которые совершаются между этими числами января будут возвращать булево значение `TRUE`. Это можно проверить в таблице результатов.

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

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

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

Обзор

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

Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере. Однако в этом примере стоит задача создать поле `2_lunar_weeks_later`, которое определяет, совершены ли транзакции через две недели после лунной недели, которая началась 1 января.

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

```
SET DateFormat='MM/DD/YYYY';
Transactions:
    Load
        *,
        inlunarweektodate(date,'01/10/2022', 2) as [2_lunar_weeks_later]
        ;
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
```

Результаты

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

* `date`

* `2_lunar_weeks_later`

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

| date | 2\_lunar\_weeks\_later |
| --- | --- |
| 1/1/2022 | 0 |
| 1/4/2022 | 0 |
| 1/10/2022 | 0 |
| 1/11/2022 | 0 |
| 1/12/2022 | 0 |
| 1/15/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/21/2022 | 0 |
| 1/23/2022 | -1 |
| 1/26/2022 | 0 |
| 1/27/2022 | 0 |
| 1/29/2022 | 0 |
| 1/31/2022 | 0 |

Функция `inlunarweektodate()`, пример с аргументом period\_no

Функция `inlunarweektodate()`, пример с аргументом period\_no

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

В данном примере функция `inlunarweektodate()` определяет, что лунная неделя до 10 января содержит три дня (8, 9 и 10 января). Так как в качестве аргумента сдвига использовался `period_no` = 2, эта лунная неделя сдвигается на 14 дней. Поэтому создается определение трехдневной недели, которая включает 22, 23 и 24 января. Любая транзакция, совершенная в период с 22 по 24 января, возвращает булев результат `TRUE`.

## Пример 3. Аргумент first\_week\_day

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

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

Обзор

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

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

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

* Используется системная переменная `DateFormat` со значением по умолчанию MM/DD/YYYY.

* Аргумент `first_week_date` имеет значение 3. Это задает в качестве начала лунных недель 3 января.

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

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

Transactions:
    Load
        *,
        inlunarweek(date,'01/10/2022', 0,3) as in_lunar_week_to_date
        ;
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
```

Результаты

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

* `date`

* `in_lunar_week_to_date`

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

| date | in\_lunar\_week\_to\_date |
| --- | --- |
| 1/1/2022 | 0 |
| 1/4/2022 | -1 |
| 1/10/2022 | -1 |
| 1/11/2022 | 0 |
| 1/12/2022 | 0 |
| 1/15/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/21/2022 | 0 |
| 1/23/2022 | 0 |
| 1/26/2022 | 0 |
| 1/27/2022 | 0 |
| 1/29/2022 | 0 |
| 1/31/2022 | 0 |

Функция `inlunarweektodate()`, пример с аргументом first\_week\_day

Функция `inlunarweektodate()`, пример с аргументом first\_week\_day

Функция `inlunarweektodate()`inlunarweektodate(), пример с аргументом first\_week\_day![Пример использования функции inlunarweektodate, демонстрирующий диапазон дат, для которого функция возвращает значение TRUE с учетом входных данных.](https://help.qlik.com/ru-RU/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-inlunarweektodate-example-first-week-date.png)

Так как в данном примере используется аргумент `the first_week_date` = 3 для функции `inlunarweek()`, первая лунная неделя начинается 3 января и заканчивается 10 января. Так как 10 января также является значением `base_date`, любая транзакция, которая совершается между этими датами, возвращает булево значение `TRUE`.

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

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

Обзор

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

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

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

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

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

Transactions: 
Load
*
Inline
[
id,date,amount
8188,'1/10/2022',37.23
8189,'1/17/2022',17.17
8190,'1/26/2022',88.27
8191,'1/12/2022',57.42
8192,'1/19/2022',53.80
8193,'1/21/2022',82.06
8194,'1/1/2022',40.39
8195,'1/27/2022',87.21
8196,'1/11/2022',95.93
8197,'1/29/2022',45.89
8198,'1/31/2022',36.23
8199,'1/18/2022',25.66
8200,'1/23/2022',82.77
8201,'1/15/2022',69.98
8202,'1/4/2022',76.11
];
```

Результаты

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

Создайте следующую меру:

=inlunarweektodate(date,'01/10/2022', 0)

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

| date | =inlunarweektodate(date,'01/10/2022', 0) |
| --- | --- |
| 1/1/2022 | 0 |
| 1/4/2022 | 0 |
| 1/10/2022 | -1 |
| 1/11/2022 | 0 |
| 1/12/2022 | 0 |
| 1/15/2022 | 0 |
| 1/17/2022 | 0 |
| 1/18/2022 | 0 |
| 1/19/2022 | 0 |
| 1/21/2022 | 0 |
| 1/23/2022 | 0 |
| 1/26/2022 | 0 |
| 1/27/2022 | 0 |
| 1/29/2022 | 0 |
| 1/31/2022 | 0 |

Функция inlunarweektodate(), пример с объектом диаграммы

Функция inlunarweektodate(), пример с объектом диаграммы

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

Мера in\_lunar\_week\_to\_date создана в объекте диаграммы с использованием функции inlunarweektodate(), где в качестве аргументов функции переданы поле даты, жестко запрограммированная дата 10 января в качестве base\_date и сдвиг 0.

Так как лунная неделя начинается 1 января, 10 января относится к лунной неделе, которая начинается 8 января. Кроме того, поскольку используется функция inlunarweektodate(), эта лунная неделя заканчивается 10 января. Поэтому все транзакции, которые совершаются между этими числами января будут возвращать булево значение TRUE. Это можно проверить в таблице результатов.

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

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

Обзор

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

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

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

* Информация, содержащая идентификатор продукта, дату изготовления и себестоимость.

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

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

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff]';

Products:
Load
*
Inline 
[
product_id,manufacture_date,cost_price
8188,'01/02/2022 12:22:06',37.23
8189,'01/05/2022 01:02:30',17.17
8190,'01/06/2022 15:36:20',88.27
8191,'01/08/2022 10:58:35',57.42
8192,'01/09/2022 08:53:32',53.80
8193,'01/10/2022 21:13:01',82.06
8194,'01/11/2022 00:57:13',40.39
8195,'01/12/2022 09:26:02',87.21
8196,'01/13/2022 15:05:09',95.93
8197,'01/14/2022 18:44:57',45.89
8198,'01/15/2022 06:10:46',36.23
8199,'01/16/2022 06:39:27',25.66
8200,'01/17/2022 10:44:16',82.77
8201,'01/18/2022 18:48:17',69.98
8202,'01/26/2022 04:36:03',76.11
8203,'01/27/2022 08:07:49',25.12
8204,'01/28/2022 12:24:29',46.23
8205,'01/30/2022 11:56:56',84.21
8206,'01/30/2022 14:40:19',96.24
8207,'01/31/2022 05:28:21',67.67
];
```

Результаты

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

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

2. Создайте измерение для отображения названий недель:

   =weekname(manufacture\_date)

3. Затем создайте измерение, которое использует функцию inlunarweektodate(), чтобы определить, какие из продуктов дефектные, а какие нет:

   =if(inlunarweektodate(manufacture\_date,makedate(2022,01,12),0),'Defective','Faultless')

4. Создайте меру для суммирования cost\_price продуктов:

   =sum(cost\_price)

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

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

| =lunarweekname(manufacture\_date) | =if(InLunarWeekToDate(manufacture\_date,makedate(2022,01,12),0),'Defective','Faultless') | =Sum(cost\_price) |
| --- | --- | --- |
| 2022/01 | Бездефектный | $142.67 |
| 2022/02 | Дефектный | $320.88 |
| 2022/02 | Бездефектный | $141.82 |
| 2022/03 | Бездефектный | $214.64 |
| 2022/04 | Бездефектный | $147.46 |
| 2022/05 | Бездефектный | $248.12 |

Функция inlunarweektodate() возвращает булево значение при проверке дат производства каждого продукта. Продукты, для которых возвращается булево значение TRUE, помечаются как ‘Defective’. Продукты, для которых возвращается значение FALSE и которые, следовательно, не произведены в течение лунной недели до 12 января, помечаются как ‘Faultless’.