Эта функция возвращает значение года и номер недели с базовым числовым значением, соответствующим метке времени, включающей первую миллисекунду первого дня недели, содержащего значение, указанное в поле date.
Функция weekname() определяет, на какую неделю приходится дата, и возвращает номер недели и год этой недели. Первый день недели определяется системной переменнойFirstWeekDay. Однако также можно изменить первый день недели, используя аргумент first_week_day в функции weekname().
В Qlik Sense региональные настройки извлекаются при создании приложения и соответствующие параметры хранятся в скрипте как переменные среды.
Североамериканские разработчики приложений часто получают Set BrokenWeeks=1; в скрипте, что соответствует неполным неделям. Европейские разработчики приложений часто получают Set BrokenWeeks=0; в скрипте, что соответствует полным неделям.
Если приложение использует неполные недели, отсчет номера недели начинается с 1 января и заканчивается за день до системной переменной FirstWeekDay независимо от того, сколько дней прошло.
Однако если в приложении используются непрерывные недели, неделя 1 может начинаться в предыдущем году или в первые несколько дней января. Это зависит от того, как используются системные переменные ReferenceDay и FirstWeekDay.
Пример функции Weekname
Date
Имя недели ISO
Имя недели US
Sat 2020 Dec 26
2020/52
2020/52
Sun 2020 Dec 27
2020/52
2020/53
Mon 2020 Dec 28
2020/53
2020/53
Tue 2020 Dec 29
2020/53
2020/53
Wed 2020 Dec 30
2020/53
2020/53
Thu 2020 Dec 31
2020/53
2020/53
Fri 2021 Jan 1
2020/53
2021/01
Sat 2021 Jan 2
2020/53
2021/01
Sun 2021 Jan 3
2020/53
2021/02
Mon 2021 Jan 4
2021/01
2021/02
Tue 2021 Jan 5
2021/01
2021/02
Когда это следует использовать
Функция weekname() полезна, когда требуется сравнить агрегации по неделям.
Например, если требуется увидеть общий объем продаж продуктов по неделям. Чтобы не допустить противоречия с перемененной среды BrokenWeeks в приложении, используйте weekname() вместо lunarweekname(). Если приложение использует полные недели, неделя 1 может содержать даты декабря предыдущего года или исключать даты января текущего года. Если приложение использует неполные недели, неделя 1 может содержать менее семи дней.
Возвращаемые типы данных: двойное значение
Аргументы
Аргумент
Описание
timestamp
Дата или метка времени для вычисления.
period_no
shift — целое число, где 0 обозначает неделю, включающую значение, указанное в поле date. Отрицательные значения, заданные в поле shift, означают предшествующие недели, положительные — последующие.
first_week_day
Указывает день начала недели. Если не указано, используется значение переменной FirstWeekDay.
Для получения дополнительной информации о системной переменной см. FirstWeekDay.
broken_weeks
Если параметр broken_weeks не указан, значение переменной BrokenWeeks будет использовано для определения, какими должны быть недели: целыми или разбитыми.
Для получения дополнительной информации о системной переменной см. BrokenWeeks
reference_day
Если параметр reference_day не указан, значение переменной ReferenceDay будет использовано для определения, какой день в январе должен быть задан в качестве дня ссылки, чтобы определить неделю 1. По умолчанию в функциях Qlik Sense используется 4 как день ссылки. Это значит, что неделя 1 должна содержать значение «январь 4» , или, другими словами, в неделе 1 всегда должно быть не меньше 4 дней в январе.
Для получения дополнительной информации о системной переменной см. ReferenceDay
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами. Для получения дополнительной информации см. Изменение региональных настроек для создания приложений и скриптов.
Региональные настройки по умолчанию в приложениях основаны на профиле пользователя. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Cloud. Qlik Cloud будет отображаться на языке, который используется в браузере.
Set FirstWeekDay=0;
Set BrokenWeeks=0;
Set ReferenceDay=4;
Примеры функции
Пример
Результат
weekname('01/12/2013')
Возвращает 2013/02.
weekname('01/12/2013', -1)
Возвращает 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, которое возвращает год и номер недели, предшествующей той, на которой были совершены транзакции.
Откройте Редактор загрузки данных и добавьте следующий скрипт загрузки на новую вкладку.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
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. Пример объекта диаграммы
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, который возвращает номер года для недели, когда была совершена транзакция, создается как мера в объекте диаграммы в приложении.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
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.
Загрузите данные и откройте лист. Создайте новую таблицу.
Создайте вычисляемое измерение, используя следующее выражение:
=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 года.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!