Эта функция возвращает значение, которое соответствует метке времени, равной первой миллисекунде первого дня календарной недели, и содержит date. По умолчанию для вывода используется формат DateFormat, заданный в скрипте.
Функция weekstart() определяет, на какой день недели приходится дата. Затем она возвращает метку времени в формате даты для первой миллисекунды этой недели. Первый день недели определяется переменной среды FirstWeekDay. Однако ее можно переопределить с помощью аргумента first_week_day в функции weekstart().
Аргументы
Аргумент
Описание
timestamp
Дата или метка времени для вычисления.
period_no
shift — целое число, где 0 обозначает неделю, включающую значение, указанное в поле date. Отрицательные значения, заданные в поле shift, означают предшествующие недели, положительные — последующие.
first_week_day
Указывает день начала недели. Если не указано, используется значение переменной FirstWeekDay.
Для получения дополнительной информации о системной переменной см. FirstWeekDay.
Когда использовать weekstart
Функция 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
Дата
Начало недели ISO
Начало недели US
Sat 2020 Dec 26
2020-12-21
12/20/2020
Sun 2020 Dec 27
21.12.2020
12/27/2020
Mon 2020 Dec 28
2020-12-28
27.12.2020
Tue 2020 Dec 29
28.12.2020
27.12.2020
Wed 2020 Dec 30
28.12.2020
27.12.2020
Thu 2020 Dec 31
28.12.2020
27.12.2020
Fri 2021 Jan 1
28.12.2020
27.12.2020
Sat 2021 Jan 2
28.12.2020
27.12.2020
Sun 2021 Jan 3
28.12.2020
1/3/2021
Mon 2021 Jan 4
2021-01-04
03.01.2021
Tue 2021 Jan 5
04.01.2021
1/3/2021
Примечание к информацииНачало недели выпадает на понедельник в столбце ISO и на воскресенье в столбце US.
Пример 1. Без дополнительных аргументов
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
Набор данных, содержащий набор транзакций за 2022 год, который загружается в таблицу под именем Transactions.
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
Создание поля start_of_week, возвращающего метку времени начала недели, в течение которой совершены транзакции.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
start_of_week
start_of_week_timestamp
Результирующая таблица
date
начало_недели
метка_времени_начала_недели
1/7/2022
01/02/2022
1/2/2022 12:00:00 AM
1/19/2022
01/16/2022
16.01.2022 00:00:00
2/5/2022
01/30/2022
30.01.2022 00:00:00
2/28/2022
02/27/2022
27.02.2022 00:00:00
3/16/2022
03/13/2022
13.03.2022 00:00:00
4/1/2022
03/27/2022
27.03.2022 00:00:00
5/7/2022
05/01/2022
01.05.2022 00:00:00
5/16/2022
05/15/2022
15.05.2022 00:00:00
6/15/2022
06/12/2022
12.06.2022 00:00:00
6/26/2022
06/26/2022
26.06.2022 00:00:00
7/9/2022
07/03/2022
3.7.2022 00:00:00
7/22/2022
07/17/2022
17.7.2022 00:00:00
7/23/2022
17.07.2022
17.07.2022 00:00:00
7/27/2022
07/24/2022
24.07.2022 00:00:00
8/2/2022
07/31/2022
31.07.2022 00:00:00
8/8/2022
08/07/2022
07.08.2022 00:00:00
8/19/2022
08/14/2022
14.08.2022 00:00:00
9/26/2022
09/25/2022
25.09.2022 00:00:00
10/14/2022
10/09/2022
09.10.2022 00:00:00
10/29/2022
10/23/2022
23.10.2022 00:00:00
Поле start_of_week создано предшествующим оператором load с использованием функции weekstart(), где в качестве аргумента функции передано поле даты.
Функция 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
начало_предыдущей_недели
Метка времени начала предыдущей недели
1/7/2022
12/26/2021
26.12.2021 12:00:00 AM
1/19/2022
01/09/2022
09.01.2022 12:00:00 AM
2/5/2022
01/23/2022
23.01.2022 00:00:00
2/28/2022
02/20/2022
20.02.2022 00:00:00
3/16/2022
03/06/2022
06.03.2022 00:00:00
4/1/2022
03/20/2022
20.03.2022 00:00:00
5/7/2022
04/24/2022
24.04.2022 00:00:00
5/16/2022
05/08/2022
08.05.2022 00:00:00
6/15/2022
06/05/2022
05.06.2022 00:00:00
6/26/2022
06/19/2022
19.06.2022 00:00:00
7/9/2022
26.06.2022
26.06.2022 00:00:00
7/22/2022
07/10/2022
10.07.2022 00:00:00
7/23/2022
10.07.2022
10.07.2022 00:00:00
7/27/2022
17.07.2022
17.07.2022 00:00:00
8/2/2022
24.07.2022
24.07.2022 00:00:00
8/8/2022
07/31/2022
31.07.2022 00:00:00
8/19/2022
07.08.2022
07.08.2022 00:00:00
9/26/2022
09/18/2022
18.09.2022 00:00:00
10/14/2022
10/02/2022
02.10.2022 00:00:00
10/29/2022
10/16/2022
16.10.2022 00:00:00
В этом случае, так как в качестве аргумента смещения в функции weekstart() использовалось period_no = -1, функция сначала определяет неделю, в течение которой совершаются транзакции. Затем она возврващается на неделю назад и определяет первую миллисекунду этой недели.
Диаграмма функции weekstart(), пример с аргументом period_no
Транзакция 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
начало недели
метка времени начала недели
1/7/2022
01/04/2022
04.01.2022 00:00:00
1/19/2022
01/18/2022
18.01.2022 00:00:00
2/5/2022
02/01/2022
01.02.2022 00:00:00
2/28/2022
02/22/2022
22.02.2022 00:00:00
3/16/2022
03/15/2022
15.03.2022 00:00:00
4/1/2022
03/29/2022
29.03.2022 00:00:00
5/7/2022
05/03/2022
03.05.2022 00:00:00
5/16/2022
05/10/2022
10.05.2022 00:00:00
6/15/2022
06/14/2022
14.06.2022 00:00:00
6/26/2022
06/21/2022
21.06.2022 00:00:00
7/9/2022
07/05/2022
05.07.2022 00:00:00
7/22/2022
07/19/2022
19.07.2022 00:00:00
7/23/2022
19.07.2022
19.07.2022 00:00:00
7/27/2022
07/26/2022
26.07.2022 00:00:00
8/2/2022
08/02/2022
02.08.2022 00:00:00
8/8/2022
02.08.2022
2.8.2022 00:00:00
8/19/2022
08/16/2022
16.8.2022 00:00:00
9/26/2022
09/20/2022
20.9.2022 00:00:00
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(), в качестве первого дня недели задан вторник.
Диаграмма функции weekstart() , пример с аргументом first_week_day
Транзакция 8191 совершена 5 февраля. Функция weekstart() определяет, что первым вторником перед этой датой и, следовательно, первым днем недели является 1 февраля, и возвращается значение 00:00:00 (12:00:00 AM) 6 февраля.
Пример 4. Пример объекта диаграммы
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, возвращающий метку времени начала недели, в течение которой совершены транзакции, создается как мера в объекте диаграммы в приложении.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: date.
Чтобы рассчитать начало недели, когда совершена транзакция, добавьте следующие меры:
=weekstart(date)
=timestamp(weekstart(date))
Результирующая таблица
date
начало_недели
Метка времени начала недели
1/7/2022
01/02/2022
1/2/2022 12:00:00 AM
1/19/2022
01/16/2022
16.01.2022 00:00:00
2/5/2022
30.01.2022
30.01.2022 00:00:00
2/28/2022
27.02.2022
27.02.2022 00:00:00
3/16/2022
13.03.2022
13.03.2022 00:00:00
4/1/2022
27.03.2022
27.03.2022 00:00:00
5/7/2022
01.05.2022
01.05.2022 00:00:00
5/16/2022
15.05.2022
15.05.2022 00:00:00
6/15/2022
12.06.2022
12.06.2022 00:00:00
6/26/2022
26.06.2022
26.06.2022 12:00:00 AM
7/9/2022
03.07.2022
03.07.2022 00:00:00
7/22/2022
17.07.2022
17.07.2022 00:00:00
7/23/2022
17.07.2022
17.07.2022 00:00:00
7/27/2022
24.07.2022
24.07.2022 00:00:00
8/2/2022
07/31/2022
31.07.2022 00:00:00
8/8/2022
07.08.2022
07.08.2022 00:00:00
8/19/2022
14.08.2022
14.08.2022 00:00:00
9/26/2022
25.09.2022
25.09.2022 00:00:00
10/14/2022
09.10.2022
09.10.2022 00:00:00
10/29/2022
23.10.2022
23.10.2022 00:00:00
Мера start_of_week создана в объекте диаграммы с использованием функции weekstart(), где в качестве аргумента функции передано поле date.
Функция weekstart() определяет, к какой неделе относится значение даты, и возвращает метку времени для первой миллисекунды этой недели.
Диаграмма функции 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 умножается на количество дней этой недели, которые уже прошли.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице или с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом!