lunarweekname — функция скриптa и диаграммы
Эта функция возвращает значение года и номер лунной недели, соответствующие метке времени первой миллисекунды первого дня лунной недели, содержащего значение, указанное в поле date. При определении лунных недель в Qlik Sense первым днем первой недели считается 1 января. Все недели, кроме последней, будут содержать ровно 7 дней.
Синтаксис:
LunarWeekName(date [, period_no[, first_week_day]])
Возвращаемые типы данных: двойное значение
Функция 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. |
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе 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 | lunar_week_name |
---|---|
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() определяет, к какой лунной неделе относится значение даты, и возвращает год и номер луной недели для этой даты.
Транзакция 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 | previous_lunar_week_name |
---|---|
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, функция сначала определяет лунную неделю, в течение которой совершены транзакции. Затем она возвращает год и номер предыдущей недели.
Транзакция 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 | lunar_week_name |
---|---|
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 |
В этом примере используется аргумент 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 | =lunarweekname(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() определяет, к какой лунной неделе относится значение даты, и возвращает год и номер луной недели для этой даты.
Транзакция 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)
-
Задайте параметру меры Формат чисел значение Денежный.
=lunarweekname(date) | =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 |