Эта функция возвращает значение, которое соответствует метке времени, равной первой миллисекунде первого дня календарной недели, и содержит date. По умолчанию для вывода используется формат DateFormat, заданный в скрипте.
Функция weekstart() определяет, на какой день недели приходится дата. Затем она возвращает метку времени в формате даты для первой миллисекунды этой недели. Первый день недели определяется переменной среды FirstWeekDay. Однако ее можно переопределить с помощью аргумента first_week_day в функции weekstart().
Аргументы
Аргумент
Описание
timestamp
Дата или метка времени для вычисления.
period_no
shift — целое число, где 0 обозначает неделю, включающую значение, указанное в поле date. Отрицательные значения, заданные в поле shift, означают предшествующие недели, положительные — последующие.
first_week_day
Указывает день начала недели. Если не указано, используется значение переменной FirstWeekDay.
Для получения дополнительной информации о системной переменной см. FirstWeekDay.
Когда это следует использовать
Функция weekstart() широко используется в составе выражения, когда пользователю требуется учитывать в расчетах часть недели, которая уже прошла. Например, с ее помощью можно вычислить совокупную заработную плату, заработанную сотрудниками за эту неделю по состоянию на текущий момент.
В следующих примерах используется:
SET FirstWeekDay=0;
Примеры функции
Пример
Результат
weekstart('01/12/2013')
Возвращает 01/07/2013.
weekstart('01/12/2013', -1 )
Возвращает 11/31/2012.
weekstart('01/12/2013', 0, 1)
Возвращает 01/08/2013.
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами. Для получения дополнительной информации см. Изменение региональных настроек для создания приложений и скриптов.
Региональные настройки по умолчанию в приложениях основаны на профиле пользователя. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Cloud. Qlik Cloud будет отображаться на языке, который используется в браузере.
Если требуется использовать параметры ISO для недель и номеров недель, убедитесь, что в скрипте содержится следующее:
Set DateFormat ='YYYY-MM-DD';
Set FirstWeekDay =0; // Monday as first week day
Set BrokenWeeks =0; //(use unbroken weeks)
Set ReferenceDay =4; // Jan 4th is always in week 1
Если требуется использовать параметры US, убедитесь, что в скрипте содержится следующее:
Set DateFormat ='M/D/YYYY';
Set FirstWeekDay =6; // Sunday as first week day
Set BrokenWeeks =1; //(use broken weeks)
Set ReferenceDay =1; // Jan 1st is always in week 1
Приведенные выше примеры дают следующие результаты функции weekstart():
Пример функции Weekstart
Date
Начало недели ISO
Начало недели US
Sat 2020 Dec 26
2020-12-21
12/20/2020
Sun 2020 Dec 27
2020-12-21
12/27/2020
Mon 2020 Dec 28
2020-12-28
12/27/2020
Tue 2020 Dec 29
2020-12-28
12/27/2020
Wed 2020 Dec 30
2020-12-28
12/27/2020
Thu 2020 Dec 31
2020-12-28
12/27/2020
Fri 2021 Jan 1
2020-12-28
12/27/2020
Sat 2021 Jan 2
2020-12-28
12/27/2020
Sun 2021 Jan 3
2020-12-28
1/3/2021
Mon 2021 Jan 4
2021-01-04
1/3/2021
Tue 2021 Jan 5
2021-01-04
1/3/2021
Примечание к информацииНачало недели выпадает на понедельник в столбце ISO и на воскресенье в столбце US.
Пример 1. Без дополнительных аргументов
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, содержащий набор транзакций за 2022 год, который загружается в таблицу под именем Transactions.
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
Создание поля start_of_week, возвращающего метку времени начала недели, в течение которой совершены транзакции.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
start_of_week
start_of_week_timestamp
Результирующая таблица
date
start_of_week
start_of_week_timestamp
1/7/2022
01/02/2022
1/2/2022 12:00:00 AM
1/19/2022
01/16/2022
1/16/2022 12:00:00 AM
2/5/2022
01/30/2022
1/30/2022 12:00:00 AM
2/28/2022
02/27/2022
2/27/2022 12:00:00 AM
3/16/2022
03/13/2022
3/13/2022 12:00:00 AM
4/1/2022
03/27/2022
3/27/2022 12:00:00 AM
5/7/2022
05/01/2022
5/1/2022 12:00:00 AM
5/16/2022
05/15/2022
5/15/2022 12:00:00 AM
6/15/2022
06/12/2022
6/12/2022 12:00:00 AM
6/26/2022
06/26/2022
6/26/2022 12:00:00 AM
7/9/2022
07/03/2022
7/3/2022 12:00:00 AM
7/22/2022
07/17/2022
7/17/2022 12:00:00 AM
7/23/2022
07/17/2022
7/17/2022 12:00:00 AM
7/27/2022
07/24/2022
7/24/2022 12:00:00 AM
8/2/2022
07/31/2022
7/31/2022 12:00:00 AM
8/8/2022
08/07/2022
8/7/2022 12:00:00 AM
8/19/2022
08/14/2022
8/14/2022 12:00:00 AM
9/26/2022
09/25/2022
9/25/2022 12:00:00 AM
10/14/2022
10/09/2022
10/9/2022 12:00:00 AM
10/29/2022
10/23/2022
10/23/2022 12:00:00 AM
Поле start_of_week создано предшествующим оператором load с использованием функции weekstart(), где в качестве аргумента функции передано поле даты.
Функция weekstart() определяет, к какой неделе относится значение даты, и возвращает метку времени для первой миллисекунды этой недели.
Транзакция 8191 совершена 5 февраля. Системная переменная FirstWeekDay задает в качестве первого дня недели воскресенье. Функция weekstart() определяет, что первой субботой перед 5 февраля и, следовательно, первым днем недели, является 30 января. Таким образом, значение start_of_week для этой транзакции возвращает первую миллисекунду этого дня, то есть 00:00:00 (12:00:00 AM) 30 января.
Пример 2. Скрипт period_no
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Используется тот же набор данных и сценарий, что в первом примере.
Создание поля previous_week_start, возвращающего метку времени начала квартала, который предшествует совершению транзакции.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
previous_week_start
previous_week_start_timestamp
Результирующая таблица
date
previous_week_start
previous_week_start_timestamp
1/7/2022
12/26/2021
12/26/2021 12:00:00 AM
1/19/2022
01/09/2022
1/9/2022 12:00:00 AM
2/5/2022
01/23/2022
1/23/2022 12:00:00 AM
2/28/2022
02/20/2022
2/20/2022 12:00:00 AM
3/16/2022
03/06/2022
3/6/2022 12:00:00 AM
4/1/2022
03/20/2022
3/20/2022 12:00:00 AM
5/7/2022
04/24/2022
4/24/2022 12:00:00 AM
5/16/2022
05/08/2022
5/8/2022 12:00:00 AM
6/15/2022
06/05/2022
6/5/2022 12:00:00 AM
6/26/2022
06/19/2022
6/19/2022 12:00:00 AM
7/9/2022
06/26/2022
6/26/2022 12:00:00 AM
7/22/2022
07/10/2022
7/10/2022 12:00:00 AM
7/23/2022
07/10/2022
7/10/2022 12:00:00 AM
7/27/2022
07/17/2022
7/17/2022 12:00:00 AM
8/2/2022
07/24/2022
7/24/2022 12:00:00 AM
8/8/2022
07/31/2022
7/31/2022 12:00:00 AM
8/19/2022
08/07/2022
8/7/2022 12:00:00 AM
9/26/2022
09/18/2022
9/18/2022 12:00:00 AM
10/14/2022
10/02/2022
10/2/2022 12:00:00 AM
10/29/2022
10/16/2022
10/16/2022 12:00:00 AM
В этом случае, так как в качестве аргумента смещения в функции weekstart() использовалось period_no = -1, функция сначала определяет неделю, в течение которой совершаются транзакции. Затем она возврващается на неделю назад и определяет первую миллисекунду этой недели.
Транзакция 8196 совершена 15 июня. Функция weekstart() определяет, что неделя начинается 12 июня. Таким образом, предыдущая неделя началась 5 июня в 00:00:00 (12:00:00 AM). Именно это значение возвращается для поля previous_week_start.
Пример 3. Аргумент first_week_day
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере. Однако в этом примере требуется задать вторник в качестве первого дня недели.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
start_of_week
start_of_week_timestamp
Результирующая таблица
date
start_of_week
start_of_week_timestamp
1/7/2022
01/04/2022
1/4/2022 12:00:00 AM
1/19/2022
01/18/2022
1/18/2022 12:00:00 AM
2/5/2022
02/01/2022
2/1/2022 12:00:00 AM
2/28/2022
02/22/2022
2/22/2022 12:00:00 AM
3/16/2022
03/15/2022
3/15/2022 12:00:00 AM
4/1/2022
03/29/2022
3/29/2022 12:00:00 AM
5/7/2022
05/03/2022
5/3/2022 12:00:00 AM
5/16/2022
05/10/2022
5/10/2022 12:00:00 AM
6/15/2022
06/14/2022
6/14/2022 12:00:00 AM
6/26/2022
06/21/2022
6/21/2022 12:00:00 AM
7/9/2022
07/05/2022
7/5/2022 12:00:00 AM
7/22/2022
07/19/2022
7/19/2022 12:00:00 AM
7/23/2022
07/19/2022
7/19/2022 12:00:00 AM
7/27/2022
07/26/2022
7/26/2022 12:00:00 AM
8/2/2022
08/02/2022
8/2/2022 12:00:00 AM
8/8/2022
08/02/2022
8/2/2022 12:00:00 AM
8/19/2022
08/16/2022
8/16/2022 12:00:00 AM
9/26/2022
09/20/2022
9/20/2022 12:00:00 AM
10/14/2022
10/11/2022
10/11/2022 12:00:00 AM
10/29/2022
10/25/2022
10/25/2022 12:00:00 AM
В этом случае, поскольку аргумент first_week_date =1 используется в функции weekstart(), в качестве первого дня недели задан вторник.
Транзакция 8191 совершена 5 февраля. Функция weekstart() определяет, что первым вторником перед этой датой и, следовательно, первым днем недели является 1 февраля, и возвращается значение 00:00:00 (12:00:00 AM) 6 февраля.
Пример 4. Пример объекта диаграммы
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, возвращающий метку времени начала недели, в течение которой совершены транзакции, создается как мера в объекте диаграммы в приложении.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: date.
Чтобы рассчитать начало недели, когда совершена транзакция, добавьте следующие меры:
=weekstart(date)
=timestamp(weekstart(date))
Результирующая таблица
date
start_of_week
start_of_week_timestamp
1/7/2022
01/02/2022
1/2/2022 12:00:00 AM
1/19/2022
01/16/2022
1/16/2022 12:00:00 AM
2/5/2022
01/30/2022
1/30/2022 12:00:00 AM
2/28/2022
02/27/2022
2/27/2022 12:00:00 AM
3/16/2022
03/13/2022
3/13/2022 12:00:00 AM
4/1/2022
03/27/2022
3/27/2022 12:00:00 AM
5/7/2022
05/01/2022
5/1/2022 12:00:00 AM
5/16/2022
05/15/2022
5/15/2022 12:00:00 AM
6/15/2022
06/12/2022
6/12/2022 12:00:00 AM
6/26/2022
06/26/2022
6/26/2022 12:00:00 AM
7/9/2022
07/03/2022
7/3/2022 12:00:00 AM
7/22/2022
07/17/2022
7/17/2022 12:00:00 AM
7/23/2022
07/17/2022
7/17/2022 12:00:00 AM
7/27/2022
07/24/2022
7/24/2022 12:00:00 AM
8/2/2022
07/31/2022
7/31/2022 12:00:00 AM
8/8/2022
08/07/2022
8/7/2022 12:00:00 AM
8/19/2022
08/14/2022
8/14/2022 12:00:00 AM
9/26/2022
09/25/2022
9/25/2022 12:00:00 AM
10/14/2022
10/09/2022
10/9/2022 12:00:00 AM
10/29/2022
10/23/2022
10/23/2022 12:00:00 AM
Мера start_of_week создана в объекте диаграммы с использованием функции weekstart(), где в качестве аргумента функции передано поле date.
Функция weekstart() определяет, к какой неделе относится значение даты, и возвращает метку времени для первой миллисекунды этой недели.
Транзакция 8191 совершена 5 февраля. Системная переменная FirstWeekDay задает в качестве первого дня недели воскресенье. Функция weekstart() определяет, что первым воскресеньем перед 5 февраля и, следовательно, первым днем недели является 30 января. Поэтому значение start_of_week для этой транзакции возвращает первую миллисекунду этого дня, то есть 00:00:00 (12:00:00 AM) 30 января.
Пример 5. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, который загружается в таблицу под именем Payroll
Данные, включающие идентификаторы сотрудников, имена сотрудников и среднюю дневную заработную плату каждого сотрудника.
Сотрудники приступают к работе в понедельник и работают 6 дней в неделю. Системную переменную FirstWeekDay изменять нельзя.
Конечному пользователю требуется объект диаграммы, который по идентификатору и имени сотрудника отображает заработную плату, заработанную в течение недели до текущей даты.
Функция weekstart(), используя сегодняшнюю дату в качестве первого аргумента и 0 в качестве третьего аргумента, задает понедельник в качестве первого дня недели и возвращает дату начала текущей недели. Вычитая этот результат из текущей даты, выражение затем возвращает количество дней, прошедших до сих пор в течение этой недели.
Затем условие снова проверяет, прошло ли больше 6 дней на этой неделе. Если да, то day_rate сотрудника умножается на 6 дней. В противном случае day_rate умножается на количество дней этой недели, которые уже прошли.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!