lunarweekname Функция скрипта и диаграммы
Эта функция возвращает значение года и номер лунной недели, соответствующие метке времени первой миллисекунды первого дня лунной недели, содержащего значение, указанное в поле date. При определении лунных недель в Qlik Sense первым днем первой недели считается 1 января. Все недели, кроме последней, будут содержать ровно 7 дней.
Синтаксис:
LunarWeekName(date [, period_no[, first_week_day]])
Возвращаемые типы данных: двойное значение
Диаграмма с примером функции lunarweekname()

Функция lunarweekname() определяет, к какой лунной неделе относится дата, начиная отсчет недель с 1 января. Затем она возвращает значение, которое включает year/weekcount.
| Аргумент | Описание |
|---|---|
| date | Дата или метка времени для вычисления. |
| period_no | period_no является целым числом или выражением, определяемым по целому числу, где значение 0 означает лунную неделю, содержащую значение, указанное в поле date. Отрицательные значения, заданные в поле period_no, означают предшествующие лунные недели, положительные — последующие. |
| first_week_day | Смещение, которое может быть больше или меньше нуля. Оно изменяет начало года указанным количеством дней и/или десятичных значений. |
Когда это следует использовать
Функция lunarweekname() полезна, когда требуется сравнить агрегации по лунным неделям. Например, с помощью функции можно определить общий объем продаж продуктов по лунной неделе. Лунные недели полезны, когда требуется обеспечить, чтобы все значения в первой неделе года содержали только значения начиная с 1 января.
Эти измерения можно создать в скрипте загрузки с помощью функции создания поля в таблице основного календаря. Эту функцию также можно использовать непосредственно в диаграмме в качестве вычисляемого измерения.
| Пример | Результат |
|---|---|
| lunarweekname('01/12/2013') | Возвращает 2006/02. |
| lunarweekname('01/12/2013', -1) | Возвращает 2006/01. |
| lunarweekname('01/12/2013', 0, 1) | Возвращает 2006/02. |
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: MM/DD/YYYY. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.
Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому вы обращаетесь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в Qlik Sense интерфейсе пользователя. Qlik Sense будет отображаться на том же языке, что и используемый вами браузер.
Пример 1. Дата без дополнительных аргументов
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за 2022 год, который загружается в таблицу под именем Transactions.
-
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
-
Создание поля lunar_week_name, возвращающего год и номер лунной недели, в течение которой совершены транзакции.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekname(date) as lunar_week_name
;
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
-
lunar_week_name
| date | название_лунной_недели |
|---|---|
| 1/7/2022 | 2022/01 |
| 1/19/2022 | 2022/03 |
| 2/5/2022 | 2022/06 |
| 2/28/2022 | 2022/09 |
| 3/16/2022 | 2022/11 |
| 4/1/2022 | 2022/13 |
| 5/7/2022 | 2022/19 |
| 5/16/2022 | 2022/20 |
| 6/15/2022 | 2022/24 |
| 6/26/2022 | 2022/26 |
| 7/9/2022 | 2022/28 |
| 7/22/2022 | 2022/29 |
| 7/23/2022 | 2022/30 |
| 7/27/2022 | 2022/30 |
| 8/2/2022 | 2022/31 |
| 8/8/2022 | 2022/32 |
| 8/19/2022 | 2022/33 |
| 9/26/2022 | 2022/39 |
| 10/14/2022 | 2022/41 |
| 10/29/2022 | 2022/44 |
Поле lunar_week_name создано предшествующим оператором load с использованием функции lunarweekname(), где в качестве аргумента передано поле date.
Функция lunarweekname() определяет, к какой лунной неделе относится значение даты, и возвращает год и номер луной недели для этой даты.
Диаграмма функции lunarweekname(), пример без дополнительных аргументов

Транзакция 8189 совершена 19 января. Функция lunarweekname() определяет, что эта дата попадает в лунную неделю, которая начинается 15 января; это третья лунная неделя года. Поэтому для этой транзакции возвращается значение lunar_week_name = 2022/03.
Пример 2. Дата с аргументом period_no
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
-
Используется тот же набор данных и сценарий, что в первом примере.
-
Создание поля previous_lunar_week_name, возвращающего год и номер лунной недели, которая предшествует совершению транзакций.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekname(date,-1) as previous_lunar_week_name
;
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_lunar_week_name
| date | название_предыдущей_лунной_недели |
|---|---|
| 1/7/2022 | 2021/52 |
| 1/19/2022 | 2022/02 |
| 2/5/2022 | 2022/05 |
| 2/28/2022 | 2022/08 |
| 3/16/2022 | 2022/10 |
| 4/1/2022 | 2022/12 |
| 5/7/2022 | 2022/18 |
| 5/16/2022 | 2022/19 |
| 6/15/2022 | 2022/23 |
| 6/26/2022 | 2022/25 |
| 7/9/2022 | 2022/27 |
| 7/22/2022 | 2022/28 |
| 7/23/2022 | 2022/29 |
| 7/27/2022 | 2022/29 |
| 8/2/2022 | 2022/30 |
| 8/8/2022 | 2022/31 |
| 8/19/2022 | 2022/32 |
| 9/26/2022 | 2022/38 |
| 10/14/2022 | 2022/40 |
| 10/29/2022 | 2022/43 |
В этом случае, так как в качестве аргумента смещения в функции lunarweekname() использовалось period_no = -1, функция сначала определяет лунную неделю, в течение которой совершены транзакции. Затем она возвращает год и номер предыдущей недели.
Диаграмма функции lunarweekname(), пример с аргументом period_no

Транзакция 8189 совершена 19 января. Функция lunarweekname() определяет, что эта транзакция совершена на третьей неделе года, поэтому возвращается год и номер предыдущей недели, 2022/02, для поля previous_lunar_week_name.
Пример 3. Дата с аргументом first_week_day
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере. В этом примере лунные недели начинаются с 5 января.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekname(date,0,4) as lunar_week_name
;
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
-
lunar_week_name
| date | название_лунной_недели |
|---|---|
| 1/7/2022 | 2022/01 |
| 1/19/2022 | 2022/03 |
| 2/5/2022 | 2022/05 |
| 2/28/2022 | 2022/08 |
| 3/16/2022 | 2022/11 |
| 4/1/2022 | 2022/13 |
| 5/7/2022 | 2022/18 |
| 5/16/2022 | 2022/19 |
| 6/15/2022 | 2022/24 |
| 6/26/2022 | 2022/25 |
| 7/9/2022 | 2022/27 |
| 7/22/2022 | 2022/29 |
| 7/23/2022 | 2022/29 |
| 7/27/2022 | 2022/30 |
| 8/2/2022 | 2022/30 |
| 8/8/2022 | 2022/31 |
| 8/19/2022 | 2022/33 |
| 9/26/2022 | 2022/38 |
| 10/14/2022 | 2022/41 |
| 10/29/2022 | 2022/43 |
Диаграмма функции lunarweekname() , пример с аргументом first_week_day

В этом примере используется аргумент first_week_date = 4 в функции lunarweekname(), потому начало лунных недель переносится с 1 на 5 января.
Транзакция 8188 совершена 7 января. Так как лунные недели начинаются 5 января, функция lunarweekname() определяет, что 7 января относится к первой лунной неделе года. Поэтому для этой транзакции возвращается значение lunar_week_name = 2022/01.
Пример 4. Пример объекта диаграммы
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, который возвращает номер лунной недели и год, когда были совершены транзакции, создается как мера в объекте диаграммы в приложении.
Скрипт загрузки
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.
Чтобы рассчитать дату начала лунной недели, когда была совершена транзакция, создайте следующую меру:
=lunarweekname(date)
| date | =названиелуннойнедели(дата) |
|---|---|
| 1/7/2022 | 2022/01 |
| 1/19/2022 | 2022/03 |
| 2/5/2022 | 2022/06 |
| 2/28/2022 | 2022/09 |
| 3/16/2022 | 2022/11 |
| 4/1/2022 | 2022/13 |
| 5/7/2022 | 2022/19 |
| 5/16/2022 | 2022/20 |
| 6/15/2022 | 2022/24 |
| 6/26/2022 | 2022/26 |
| 7/9/2022 | 2022/28 |
| 7/22/2022 | 2022/29 |
| 7/23/2022 | 2022/30 |
| 7/27/2022 | 2022/30 |
| 8/2/2022 | 2022/31 |
| 8/8/2022 | 2022/32 |
| 8/19/2022 | 2022/33 |
| 9/26/2022 | 2022/39 |
| 10/14/2022 | 2022/41 |
| 10/29/2022 | 2022/44 |
Мера lunar_week_name создана в объекте диаграммы с использованием функции lunarweekname(), где в качестве аргумента функции передано поле date.
Функция lunarweekname() определяет, к какой лунной неделе относится значение даты, и возвращает год и номер луной недели для этой даты.
Диаграмма функции lunarweekname(), пример с объектом диаграммы

Транзакция 8189 совершена 19 января. Функция lunarweekname() определяет, что эта дата попадает в лунную неделю, которая начинается 15 января; это третья лунная неделя года. Таким образом, для транзакции возвращается значение lunar_week_name = 2022/03.
Пример 5. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за 2022 год, загружается в таблицу под именем Transactions.
-
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
Конечному пользователю нужен объект диаграммы, на котором представлены общие продажи по неделям для текущего года. Неделя 1 с продолжительностью семь дней должна начаться 1 января. Этого можно добиться, даже когда это измерение недоступно в модели данных, используя функцию lunarweekname() в качестве вычисляемого измерения в диаграмме.
Скрипт загрузки
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
];Результаты
Выполните следующие действия.
-
Загрузите данные и откройте лист. Создайте новую таблицу.
-
Создайте вычисляемое измерение, используя следующее выражение:
=lunarweekname(date)
-
Чтобы рассчитать общий объем продаж, создайте следующую меру агрегирования:
=sum(amount)
-
Задайте параметру меры Формат чисел значение Денежный.
| =названиелуннойнедели(дата) | sum(amount) |
|---|---|
| 2022/01 | $17.17 |
| 2022/03 | $37.23 |
| 2022/06 | $57.42 |
| 2022/09 | $88.27 |
| 2022/11 | $53.80 |
| 2022/13 | $82.06 |
| 2022/19 | $40.39 |
| 2022/20 | $87.21 |
| 2022/24 | $95.93 |
| 2022/26 | $45.89 |
| 2022/28 | $36.23 |
| 2022/29 | $25.66 |
| 2022/30 | $152.75 |
| 2022/31 | $76.11 |
| 2022/32 | $25.12 |
| 2022/33 | $46.23 |
| 2022/39 | $84.21 |
| 2022/41 | $96.24 |
| 2022/44 | $67.67 |