weekname — функция скриптa и диаграммы
Эта функция возвращает значение года и номер недели с базовым числовым значением, соответствующим метке времени, включающей первую миллисекунду первого дня недели, содержащего значение, указанное в поле date.
Синтаксис:
WeekName(date[, period_no[,first_week_day]])
Функция weekname() определяет, на какую неделю приходится дата, и возвращает номер недели и год этой недели. Первый день недели определяется системной переменной FirstWeekDay. Однако также можно изменить первый день недели, используя аргумент first_week_day в функции weekname().
По умолчанию приложения Qlik Sense используют неполные недели (определяемые системной переменной BrokenWeeks), поэтому отсчет номера недели начинается с 1 января и заканчивается за день до системной переменной FirstWeekDay независимо от того, сколько дней прошло.
Однако если в приложении используются непрерывные недели, неделя 1 может начинаться в предыдущем году или в первые несколько дней января. Это зависит от того, как используются системные переменные ReferenceDay и FirstWeekDay.
Когда это следует использовать
Функция weekname() полезна, когда требуется сравнить агрегации по неделям.
Например, если требуется увидеть общий объем продаж продуктов по неделям. Чтобы не допустить противоречия с перемененной среды BrokenWeeks в приложении, используйте weekname() вместо lunarweekname(). Если приложение использует полные недели, неделя 1 может содержать даты декабря предыдущего года или исключать даты января текущего года. Если приложение использует неполные недели, неделя 1 может содержать менее семи дней.
Возвращаемые типы данных: двойное значение
Аргумент | Описание |
---|---|
date | Дата или метка времени для вычисления. |
period_no | shift — целое число, где 0 обозначает неделю, включающую значение, указанное в поле date. Отрицательные значения, заданные в поле shift, означают предшествующие недели, положительные — последующие. |
first_week_day |
Указывает день начала недели. Если не указано, используется значение переменной FirstWeekDay. Возможные значения first_week_day: 0 — понедельник, 1 — вторник, 2 — среда, 3 — четверг, 4 — пятница, 5 — суббота и 6 — воскресенье. Для получения дополнительной информации о системной переменной см. FirstWeekDay. |
Можно использовать следующие значения, чтобы задать первый день недели в аргументе first_week_day:
День | Значение |
---|---|
Понедельник | 0 |
Вторник | 1 |
Среда | 2 |
Четверг | 3 |
Пятница | 4 |
Суббота | 5 |
Воскресенье | 6 |
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.
Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.
Пример | Результат |
---|---|
weekname('01/12/2013') | Возвращает 2013/02. |
weekname('01/12/2013', -1) | Returns 2013/01. |
weekname('01/12/2013', 0, 1) | Возвращает 2013/02. |
Пример 1. Дата без дополнительных аргументов
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за последнюю неделю 2021 года, загружается в таблицу под именем Transactions.
-
Системная переменная DateFormat, для которой задан формат MM/DD/YYYY.
-
Системная переменная BrokenWeeks, для которой задан формат 1.
-
Системная переменная FirstWeekDay, для которой задан формат 6.
-
Предыдущая загрузка, которая содержит следующее:
-
Функция weekday(), заданная как поле week_number, возвращающая год и номер недели, когда были совершены транзакции.
-
Функция weekname(), заданная как поле с именем week_day, для отображения значения дня недели для каждой даты транзакции.
-
Скрипт загрузки
SET BrokenWeeks=1;
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
Transactions:
Load
*,
WeekDay(date) as week_day,
Weekname(date) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
week_day
-
week_number
id | date | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | Mon | 2021/53 |
8184 | 12/28/2021 | Tue | 2021/53 |
8185 | 12/29/2021 | Wed | 2021/53 |
8186 | 12/30/2021 | Thu | 2021/53 |
8187 | 12/31/2021 | Fri | 2021/53 |
8188 | 01/01/2022 | Sat | 2022/01 |
8189 | 01/02/2022 | Sun | 2022/02 |
8190 | 01/03/2022 | Mon | 2022/02 |
8191 | 01/04/2022 | Tue | 2022/02 |
8192 | 01/05/2022 | Wed | 2022/02 |
8193 | 01/06/2022 | Thu | 2022/02 |
8194 | 01/07/2022 | Fri | 2022/02 |
8195 | 01/08/2022 | Sat | 2022/02 |
8196 | 01/09/2022 | Sun | 2022/03 |
8197 | 01/10/2022 | Mon | 2022/03 |
8198 | 01/11/2022 | Tue | 2022/03 |
8199 | 01/12/2022 | Wed | 2022/03 |
8200 | 01/13/2022 | Thu | 2022/03 |
8201 | 01/14/2022 | Fri | 2022/03 |
Поле week_number создано предшествующим оператором load с использованием функции weekname(), где в качестве аргумента функции передано поле даты.
Функция weekname() изначально определяет, на какую неделю приходится значение даты, и возвращает номер недели и год, когда была совершена транзакция.
Системная переменная FirstWeekDay задает воскресенье как первый день недели. Системная переменная BrokenWeeks задает для приложения использование неполных недель, что означает, что неделя 1 начнется 1 января.
Неделя 1 начинается 1 января, то есть в субботу, поэтому транзакции, совершенные в этот день, возвращают значение 2022/01 (год и номер недели).
Поскольку приложение использует неполные недели, а первый день недели — воскресенье, транзакции, совершенные со 2 по 8 января, возвращают значение 2022/02 (номер недели 2 в 2022 году). Примером этого может быть транзакция 8192, которая совершена 5 января и возвращает значение 2022/02 для поля week_number.
Пример 2. Скрипт period_no
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере задача состоит в том, чтобы создать поле previous_week_number, которое возвращает год и номер недели, предшествующей той, на которой были совершены транзакции.
Откройте Редактор загрузки данных и добавьте следующий скрипт загрузки на новую вкладку.
Скрипт загрузки
SET BrokenWeeks=1;
SET FirstWeekDay=6;
Transactions:
Load
*,
weekname(date,-1) as previous_week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
week_day
-
week_number
id | date | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | Mon | 2021/52 |
8184 | 12/28/2021 | Tue | 2021/52 |
8185 | 12/29/2021 | Wed | 2021/52 |
8186 | 12/30/2021 | Thu | 2021/52 |
8187 | 12/31/2021 | Fri | 2021/52 |
8188 | 01/01/2022 | Sat | 2021/52 |
8189 | 01/02/2022 | Sun | 2021/53 |
8190 | 01/03/2022 | Mon | 2021/53 |
8191 | 01/04/2022 | Tue | 2021/53 |
8192 | 01/05/2022 | Wed | 2021/53 |
8193 | 01/06/2022 | Thu | 2021/53 |
8194 | 01/07/2022 | Fri | 2021/53 |
8195 | 01/08/2022 | Sat | 2022/01 |
8196 | 01/09/2022 | Sun | 2022/02 |
8197 | 01/10/2022 | Mon | 2022/02 |
8198 | 01/11/2022 | Tue | 2022/02 |
8199 | 01/12/2022 | Wed | 2022/02 |
8200 | 01/13/2022 | Thu | 2022/02 |
8201 | 01/14/2022 | Fri | 2022/02 |
Так как в качестве аргумента смещения в функции weekname() использовалось period_no = -1, функция сначала определяет неделю, в течение которой совершены транзакции. Затем она возврващается на неделю назад и определяет первую миллисекунду этой недели.
Транзакция 8192 совершена 5 января 2022 года. Функция weekname() возвращается на неделю назад к 30 декабря 2021 года и возвращает номер недели и год для этой даты — 2021/53.
Пример 3. Аргумент first_week_day
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере политика компании такова, что рабочая неделя начинается во вторник.
Откройте Редактор загрузки данных и добавьте следующий скрипт загрузки на новую вкладку.
Скрипт загрузки
SET BrokenWeeks=1;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekday(date) as week_day,
weekname(date,0,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
week_day
-
week_number
id | date | week_day | week_number |
---|---|---|---|
8183 | 12/27/2021 | Mon | 2021/52 |
8184 | 12/28/2021 | Tue | 2021/53 |
8185 | 12/29/2021 | Wed | 2021/53 |
8186 | 12/30/2021 | Thu | 2021/53 |
8187 | 12/31/2021 | Fri | 2021/53 |
8188 | 01/01/2022 | Sat | 2022/01 |
8189 | 01/02/2022 | Sun | 2022/01 |
8190 | 01/03/2022 | Mon | 2022/01 |
8191 | 01/04/2022 | Tue | 2022/02 |
8192 | 01/05/2022 | Wed | 2022/02 |
8193 | 01/06/2022 | Thu | 2022/02 |
8194 | 01/07/2022 | Fri | 2022/02 |
8195 | 01/08/2022 | Sat | 2022/02 |
8196 | 01/09/2022 | Sun | 2022/02 |
8197 | 01/10/2022 | Mon | 2022/02 |
8198 | 01/11/2022 | Tue | 2022/03 |
8199 | 01/12/2022 | Wed | 2022/03 |
8200 | 01/13/2022 | Thu | 2022/03 |
8201 | 01/14/2022 | Fri | 2022/03 |
Поскольку аргумент first_week_date функции 1 используется в функции weekname(), в качестве первого дня недели используется вторник. Таким образом, функция определяет, что 53-я неделя 2021 года начинается во вторник, 28 декабря; и, поскольку в приложении используются неполные недели, неделя 1 начинается 1 января 2022 г. и заканчивается в последнюю миллисекунду понедельника, 3 января 2022 г.
Транзакция 8192 совершена 5 января 2022 года. Таким образом, используя для параметра first_week_day значение «вторник», функция weekname() возвращает значение 2022/02 для поля week_number.
Пример 4. Пример объекта диаграммы
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, который возвращает номер года для недели, когда была совершена транзакция, создается как мера в объекте диаграммы в приложении.
Скрипт загрузки
SET BrokenWeeks=1;
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
=week_day (date)
Чтобы рассчитать начало недели, когда была совершена транзакция, создайте следующую меру:
=weekname(date)
id | date | =weekday(date) | =weekname(date) |
---|---|---|---|
8183 | 12/27/2021 | Mon | 2021/53 |
8184 | 12/28/2021 | Tue | 2021/53 |
8185 | 12/29/2021 | Wed | 2021/53 |
8186 | 12/30/2021 | Thu | 2021/53 |
8187 | 12/31/2021 | Fri | 2021/53 |
8188 | 01/01/2022 | Sat | 2022/01 |
8189 | 01/02/2022 | Sun | 2022/02 |
8190 | 01/03/2022 | Mon | 2022/02 |
8191 | 01/04/2022 | Tue | 2022/02 |
8192 | 01/05/2022 | Wed | 2022/02 |
8193 | 01/06/2022 | Thu | 2022/02 |
8194 | 01/07/2022 | Fri | 2022/02 |
8195 | 01/08/2022 | Sat | 2022/02 |
8196 | 01/09/2022 | Sun | 2022/03 |
8197 | 01/10/2022 | Mon | 2022/03 |
8198 | 01/11/2022 | Tue | 2022/03 |
8199 | 01/12/2022 | Wed | 2022/03 |
8200 | 01/13/2022 | Thu | 2022/03 |
8201 | 01/14/2022 | Fri | 2022/03 |
Поле week_number создано как мера в объекте диаграммы с использованием функции weekname(), где в качестве аргумента функции передано поле даты.
Функция weekname() изначально определяет, на какую неделю приходится значение даты, и возвращает номер недели и год, когда была совершена транзакция.
Системная переменная FirstWeekDay задает воскресенье как первый день недели. Системная переменная BrokenWeeks задает для приложения использование неполных недель, что означает, что неделя 1 начинается 1 января.
Поскольку приложение использует неполные недели, а первый день недели — воскресенье, транзакции, совершенные со 2 по 8 января, возвращают значение 2022/02, то есть неделя 2 в 2022 году. Обратите внимание, что транзакция 8192 совершена 5 января и возвращает значение 2022/02 для поля week_number.
Пример 5. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за последнюю неделю 2019 года, загружается в таблицу под именем Transactions.
-
Системная переменная BrokenWeeks, для которой задан формат 0.
-
Системная переменная ReferenceDay, для которой задан формат 2.
-
Системная переменная DateFormat, для которой задан формат MM/DD/YYYY.
Скрипт загрузки
SET BrokenWeeks=0;
SET ReferenceDay=2;
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2019,58.27
8184,12/28/2019,67.42
8185,12/29/2019,23.80
8186,12/30/2019,82.06
8187,12/31/2019,40.56
8188,01/01/2020,37.23
8189,01/02/2020,17.17
8190,01/03/2020,88.27
8191,01/04/2020,57.42
8192,01/05/2020,53.80
8193,01/06/2020,82.06
8194,01/07/2020,40.56
8195,01/08/2020,53.67
8196,01/09/2020,26.63
8197,01/10/2020,72.48
8198,01/11/2020,18.37
8199,01/12/2020,45.26
8200,01/13/2020,58.23
8201,01/14/2020,18.52
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу.
Создайте вычисляемое измерение, используя следующее выражение:
=weekname(date)
Чтобы рассчитать общий объем продаж, создайте следующую меру агрегирования:
=sum(amount)
Задайте параметру Формат чисел меры значение Денежный.
weekname(date) | =sum(amount) |
---|---|
2019/52 | $125.69 |
2020/01 | $346.51 |
2020/02 | $347.57 |
2020/03 | $122.01 |
Чтобы продемонстрировать результаты использования функции weekname() в этом сценарии, добавьте следующее поле в качестве измерения:
date
weekname(date) | date | =sum(amount) |
---|---|---|
2019/52 | 12/27/2019 | $58.27 |
2019/52 | 12/28/2019 | $67.42 |
2020/01 | 12/29/2019 | $23.80 |
2020/01 | 12/30/2019 | $82.06 |
2020/01 | 12/31/2019 | $40.56 |
2020/01 | 01/01/2020 | $37.23 |
2020/01 | 01/02/2020 | $17.17 |
2020/01 | 01/03/2020 | $88.27 |
2020/01 | 01/04/2020 | $57.42 |
2020/02 | 01/05/2020 | $53.80 |
2020/02 | 01/06/2020 | $82.06 |
2020/02 | 01/07/2020 | $40.56 |
2020/02 | 01/08/2020 | $53.67 |
2020/02 | 01/09/2020 | $26.63 |
2020/02 | 01/10/2020 | $72.48 |
2020/02 | 01/11/2020 | $18.37 |
2020/03 | 01/12/2020 | $45.26 |
2020/03 | 01/13/2020 | $58.23 |
2020/03 | 01/14/2020 | $18.52 |
Поскольку в приложении используются непрерывные недели, а для первой недели требуется как минимум два дня в январе из-за системной переменной ReferenceDay, неделя 1 2020 года включает транзакции с 29 декабря 2019 года.