week — функция скриптa и диаграммы
Эта функция возвращает целое число, представляющее номер недели, соответствующий введенной дате.
Синтаксис:
week(timestamp [, first_week_day [, broken_weeks [, reference_day]]])
Возвращаемые типы данных: целое
Аргумент | Описание |
---|---|
timestamp | Дата или метка времени для вычисления. |
first_week_day |
Указывает день начала недели. Если не указано, используется значение переменной FirstWeekDay. Возможные значения first_week_day: 0 — понедельник, 1 — вторник, 2 — среда, 3 — четверг, 4 — пятница, 5 — суббота и 6 — воскресенье. Для получения дополнительной информации о системной переменной см. FirstWeekDay. |
broken_weeks |
Если параметр broken_weeks не указан, значение переменной BrokenWeeks будет использовано для определения, какими должны быть недели: целыми или разбитыми. Для получения дополнительной информации о системной переменной см. BrokenWeeks |
reference_day |
Если параметр reference_day не указан, значение переменной ReferenceDay будет использовано для определения, какой день в январе должен быть задан в качестве дня ссылки, чтобы определить неделю 1. По умолчанию в функциях Qlik Sense используется 4 как день ссылки. Это значит, что неделя 1 должна содержать значение «январь 4» , или, другими словами, в неделе 1 всегда должно быть не меньше 4 дней в январе. Для получения дополнительной информации о системной переменной см. ReferenceDay |
Функция week() определяет, на какую неделю приходится дата, и возвращает номер этой недели.
В Qlik Sense региональные настройки извлекаются при создании приложения, и соответствующие параметры хранятся в скрипте как переменные среды. Они используются для определения номера недели.
Это означает, что большинство европейских разработчиков приложений получают следующие переменные среды в соответствии с определением ISO 8601:
Североамериканские разработчики приложений часто получают следующие переменные среды:
Первый день недели определяется системной переменной FirstWeekDay. Также можно изменить первый день недели, используя аргумент first_week_day в функции week().
Если приложение использует неполные недели, отсчет номера недели начинается с 1 января и заканчивается за день до системной переменной FirstWeekDay независимо от того, сколько дней прошло.
Если в приложении используются непрерывные недели, неделя 1 может начинаться в предыдущем году или в первые несколько дней января. Это зависит от того, как используются переменные среды FirstWeekDay и ReferenceDay.
Когда это следует использовать
Функция The week() полезна, когда требуется сравнить агрегирования по неделям. Например, ее можно использовать, если требуется увидеть общий объем продаж продуктов по неделям. Функции week() отдается предпочтение перед weekname(), когда пользователю требуется, чтобы в вычислении не всегда использовались системные переменные приложения: BrokenWeeks, FirstWeekDay или ReferenceDay.
Например, если требуется увидеть общий объем продаж продуктов по неделям.
Если приложение использует полные недели, неделя 1 может содержать даты декабря предыдущего года или исключать даты января текущего года. Если приложение использует неполные недели, неделя 1 может содержать менее семи дней.
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.
Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.
В приведенных ниже примерах используется
Пример | Результат |
---|---|
week('12/28/2021') |
Возвращает 52. |
week(44614) | Возвращает 8, так как это порядковый номер для 02/22/2022. |
week('01/03/2021') | Возвращает 53. |
week('01/03/2021',6) | Возвращает 1. |
Пример 1. Системные переменные по умолчанию
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за последнюю неделю 2021 года, загруженный в таблицу под именем Transactions.
-
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
-
Создание поля week_number, возвращающего год и номер недели, в течение которой совершены транзакции.
-
Создание поля с именем week_day, которое отображает день недели для каждой даты транзакции.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(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 | 53 |
8184 | 12/28/2021 | Tue | 53 |
8185 | 12/29/2021 | Wed | 53 |
8186 | 12/30/2021 | Thu | 53 |
8187 | 12/31/2021 | Fri | 53 |
8188 | 01/01/2022 | Sat | 1 |
8189 | 01/02/2022 | Sun | 2 |
8190 | 01/03/2022 | Mon | 2 |
8191 | 01/04/2022 | Tue | 2 |
8192 | 01/05/2022 | Wed | 2 |
8193 | 01/06/2022 | Thu | 2 |
8194 | 01/07/2022 | Fri | 2 |
8195 | 01/08/2022 | Sat | 2 |
8196 | 01/09/2022 | Sun | 3 |
8197 | 01/10/2022 | Mon | 3 |
8198 | 01/11/2022 | Tue | 3 |
8199 | 01/12/2022 | Wed | 3 |
8200 | 01/13/2022 | Thu | 3 |
8201 | 01/14/2022 | Fri | 3 |
Поле «week_number» создано предшествующим оператором load с использованием функции week(), где в качестве аргумента функции передано поле date.
Другие параметры не передаются, поэтому следующие переменные по умолчанию оказывают влияние на выполнение функции week():
-
BrokenWeeks: Отсчет недель начинается с 1 января
-
FirstWeekDay: первым днем недели является воскресенье
Так как приложение использует системную переменную BrokenWeeks по умолчанию, неделя 1 начинается в субботу 1 января.
Из-за системной переменной FirstWeekDay по умолчанию неделя начинается в воскресенье. Первое воскресенье после 1 января выпадает на 2 января, это первый день недели 2.
Пример 2. Аргумент first_week_day
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Создание поля week_number, возвращающего год и номер недели, в течение которой совершены транзакции.
-
Создание поля с именем week_day, которое отображает день недели для каждой даты транзакции.
В этом примере нам нужно задать вторник в качестве первого дня рабочей недели.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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 | 52 |
8184 | 12/28/2021 | Tue | 53 |
8185 | 12/29/2021 | Wed | 53 |
8186 | 12/30/2021 | Thu | 53 |
8187 | 12/31/2021 | Fri | 53 |
8188 | 01/01/2022 | Sat | 1 |
8189 | 01/02/2022 | Sun | 1 |
8190 | 01/03/2022 | Mon | 1 |
8191 | 01/04/2022 | Tue | 2 |
8192 | 01/05/2022 | Wed | 2 |
8193 | 01/06/2022 | Thu | 2 |
8194 | 01/07/2022 | Fri | 2 |
8195 | 01/08/2022 | Sat | 2 |
8196 | 01/09/2022 | Sun | 2 |
8197 | 01/10/2022 | Mon | 2 |
8198 | 01/11/2022 | Tue | 3 |
8199 | 01/12/2022 | Wed | 3 |
8200 | 01/13/2022 | Thu | 3 |
8201 | 01/14/2022 | Fri | 3 |
Приложение по-прежнему использует неполные недели. Однако аргументу first_week_day задано значение 1 в функции week(). В результате этого первым днем недели становится вторник.
Приложение использует системную переменную BrokenWeeks по умолчанию, поэтому неделя 1 начинается в субботу 1 января.
Аргумент first_week_day функции week() устанавливает в качестве первого дня недели вторник. Таким образом, неделя 53 начинается 28 декабря 2021 года.
Однако поскольку функция по-прежнему использует неполные недели, неделя 1 будет включать только 2 дня, так как первый вторник после 1 января выпадает на 3 января.
Пример 3. Аргумент unbroken_weeks
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
В этом примере используются полные недели.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,6,0) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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 | 52 |
8184 | 12/28/2021 | Tue | 52 |
8185 | 12/29/2021 | Wed | 52 |
8186 | 12/30/2021 | Thu | 52 |
8187 | 12/31/2021 | Fri | 52 |
8188 | 01/01/2022 | Sat | 52 |
8189 | 01/02/2022 | Sun | 1 |
8190 | 01/03/2022 | Mon | 1 |
8191 | 01/04/2022 | Tue | 1 |
8192 | 01/05/2022 | Wed | 1 |
8193 | 01/06/2022 | Thu | 1 |
8194 | 01/07/2022 | Fri | 1 |
8195 | 01/08/2022 | Sat | 1 |
8196 | 01/09/2022 | Sun | 2 |
8197 | 01/10/2022 | Mon | 2 |
8198 | 01/11/2022 | Tue | 2 |
8199 | 01/12/2022 | Wed | 2 |
8200 | 01/13/2022 | Thu | 2 |
8201 | 01/14/2022 | Fri | 2 |
Параметру first_week_date задано значение 1, в результате чего первым днем недели становится вторник. Параметру broken_weeks задано значение 0, в результате чего функция использует полные недели. В заключение третий параметр задает reference_day = 2.
Параметру first_week_date задано значение 6, в результате чего первым днем недели становится воскресенье. Параметру broken_weeks задано значение 0, в результате чего функция использует полные недели.
При использовании полных недель неделя 1 необязательно начинается 1 января, но она должна содержать не меньше 4 дней января. Таким образом, в наборе данных неделя 52 заканчивается в субботу, 1 января 2022 года. В таком случае неделя 1 начинается с системой переменной FirstWeekDay, то есть в воскресенье, 2 января. Эта неделя заканчивается в следующую субботу, 8 января.
Пример 4. Аргумент reference_day
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Используется тот же набор данных и сценарий, что в третьем примере.
-
Создание поля week_number, возвращающего год и номер недели, в течение которой совершены транзакции.
-
Создание поля с именем week_day, которое отображает день недели для каждой даты транзакции.
Кроме того, должны соблюдаться следующие условия:
-
Рабочая неделя начинается во вторник.
-
Компания использует полные недели.
-
Для reference_day задано значение 2. Другими словами, минимальное количество дней января в неделе 1 должно быть 2.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1,0,2) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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 | 52 |
8184 | 12/28/2021 | Tue | 1 |
8185 | 12/29/2021 | Wed | 1 |
8186 | 12/30/2021 | Thu | 1 |
8187 | 12/31/2021 | Fri | 1 |
8188 | 01/01/2022 | Sat | 1 |
8189 | 01/02/2022 | Sun | 1 |
8190 | 01/03/2022 | Mon | 1 |
8191 | 01/04/2022 | Tue | 2 |
8192 | 01/05/2022 | Wed | 2 |
8193 | 01/06/2022 | Thu | 2 |
8194 | 01/07/2022 | Fri | 2 |
8195 | 01/08/2022 | Sat | 2 |
8196 | 01/09/2022 | Sun | 2 |
8197 | 01/10/2022 | Mon | 2 |
8198 | 01/11/2022 | Tue | 3 |
8199 | 01/12/2022 | Wed | 3 |
8200 | 01/13/2022 | Thu | 3 |
8201 | 01/14/2022 | Fri | 3 |
Параметру first_week_date задано значение 1, в результате чего первым днем недели становится вторник. Параметру broken_weeks задано значение 0, в результате чего функция использует полные недели. В заключение, третий параметр задает параметр reference_day = 2.
Так как функция использует полные недели и reference_day = 2 в качестве параметра, неделя 1 должна включать хотя бы два дня января. Так как первым днем недели является вторник, неделя 1 начинается 28 декабря 2021 года и заканчивается в понедельник, 3 января 2022 года.
Пример 5. Пример объекта диаграммы
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, возвращающий номер недели, создается в качестве меры в объекте диаграммы.
Скрипт загрузки
Transactions:
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,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 (date)
-
Создайте меру , week_day, чтобы для каждой даты транзакции отображался день недели:
=weekday(date)
id | date | =week(date) | =weekday(date) |
---|---|---|---|
8183 | 12/27/2021 | 53 | Mon |
8184 | 12/28/2021 | 53 | Tue |
8185 | 12/29/2021 | 53 | Wed |
8186 | 12/30/2021 | 53 | Thu |
8187 | 12/31/2021 | 53 | Fri |
8188 | 01/01/2022 | 1 | Sat |
8189 | 01/02/2022 | 2 | Sun |
8190 | 01/03/2022 | 2 | Mon |
8191 | 01/04/2022 | 2 | Tue |
8192 | 01/05/2022 | 2 | Wed |
8193 | 01/06/2022 | 2 | Thu |
8194 | 01/07/2022 | 2 | Fri |
8195 | 01/08/2022 | 2 | Sat |
8196 | 01/09/2022 | 3 | Sun |
8197 | 01/10/2022 | 3 | Mon |
8198 | 01/11/2022 | 3 | Tue |
8199 | 01/12/2022 | 3 | Wed |
8200 | 01/13/2022 | 3 | Thu |
8201 | 01/14/2022 | 3 | Fri |
Поле «week_number» создано предшествующим оператором load с использованием функции week(), где в качестве аргумента функции передано поле date.
Другие параметры не передаются, поэтому следующие переменные по умолчанию оказывают влияние на выполнение функции week():
-
BrokenWeeks: Отсчет недель начинается с 1 января
-
FirstWeekDay: Первым днем недели является воскресенье
Так как приложение использует системную переменную BrokenWeeks по умолчанию, неделя 1 начинается в субботу 1 января.
Из-за системной переменной FirstWeekDay по умолчанию неделя начинается в воскресенье. Первое воскресенье после 1 января выпадает на 2 января, это первый день недели 2.
Пример 6. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за последнюю неделю 2019 года и первые две недели 2020 года, загруженный в таблицу под именем Transactions.
- Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
Приложение в основном использует неполные недели на информационной панели. Однако конечному пользователю нужен объект диаграммы, на котором представлены общие продажи по неделям с использованием полных недель. В качестве дня ссылки следует задать 2 января, а неделя должна начинаться со вторника. Этого можно добиться, даже если это измерение недоступно в модели данных, используя в диаграмме функцию week() в качестве вычисляемого измерения.
Скрипт загрузки
SET BrokenWeeks=1;
SET ReferenceDay=0;
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
];
Результаты
Выполните следующие действия.
-
Загрузите данные и откройте лист. Создайте новую таблицу.
-
Создайте следующее вычисляемое измерение:
=week(date)
-
Затем создайте следующую меру агрегирования:
=sum(amount)
-
Задайте параметру меры Формат чисел значение Денежный.
-
Выберите меню Сортировка и для вычисляемого изменения удалите пользовательскую сортировку.
-
Отмените выбор параметров Сортировка по численным значениям и Сортировка по алфавиту.
week(date) | sum(amount) |
---|---|
52 | $125.69 |
53 | $146.42 |
1 | $200.09 |
2 | $347.57 |
3 | $122.01 |