yearstart — функция скриптa и диаграммы
Эта функция возвращает метку времени, соответствующую началу первого дня года, содержащего значение date. По умолчанию для вывода используется формат DateFormat, установленный в скрипте.
Синтаксис:
YearStart(date[, period_no[, first_month_of_year]])
Другими словами, функция yearstart() определяет, на какой год приходится дата. Затем она возвращает метку времени в формате даты для первой миллисекунды этого года. По умолчанию первым месяцем года является январь. Однако первый месяц можно изменить, используя аргумент first_month_of_year в функции yearstart().
Когда это следует использовать
Функция yearstart() используется в составе выражения, когда требуется использовать в расчетах часть года, которая уже прошла, например, если требуется рассчитать проценты, накопленные за год до настоящего времени.
Возвращаемые типы данных: двойное значение
Аргумент | Описание |
---|---|
date | Дата или метка времени для вычисления. |
period_no | period_no — целое число, где 0 обозначает год, включающий значение, указанное в поле date. Отрицательные значения, заданные в поле period_no, означают предшествующие годы, положительные — последующие. |
first_month_of_year | Если необходимо работать с годами (финансовыми), которые начинаются не в январе, задайте значение от 2 до 12 в поле first_month_of_year. |
Следующие месяцы можно использовать в first_month_of_year argument:
Месяц | Значение |
---|---|
February | 2 |
Март | 3 |
Апрель | 4 |
May | 5 |
Июнь | 6 |
Июль | 7 |
Август | 8 |
Сентябрь | 9 |
Октябрь | 10 |
November | 11 |
Декабрь | 12 |
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.
Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.
Пример | Результат |
---|---|
yearstart('10/19/2001') | Возвращает 01/01/2001 00:00:00. |
yearstart('10/19/2001',-1) | Возвращает 01/01/2000 00:00:00. |
yearstart('10/19/2001',0,4) | Возвращает 04/01/2001 00:00:00. |
Пример 1. Базовый пример
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций с 2020 по 2022 год, загружается в таблицу под именем Transactions.
-
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
-
Предшествующий оператор load, который содержит следующее:
-
Функция yearstart(), заданная как поле year_start.
-
Функция Timestamp(), заданная как поле year_start_timestamp.
-
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearstart(date) as year_start,
timestamp(yearstart(date)) as year_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
year_start
-
year_start_timestamp
id | date | year_start | year_start_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8189 | 02/26/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8190 | 03/27/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8191 | 04/16/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8192 | 05/21/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8193 | 08/14/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8194 | 10/07/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8195 | 12/05/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8196 | 01/22/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8197 | 02/03/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8198 | 03/17/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8199 | 04/23/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8200 | 05/04/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8201 | 06/30/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8202 | 07/26/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8203 | 12/27/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8204 | 06/06/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8205 | 07/18/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8206 | 11/14/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8207 | 12/12/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
Поле year_start создано предшествующим оператором load с использованием функции yearstart(), где в качестве аргумента функции передано поле даты.
Функция yearstart() первоначально определяет, к какому году относится значение даты, и возвращает метку времени для первой миллисекунды этого года.
Транзакция 8199 совершена 23 апреля 2021 года. Функция yearstart() возвращает первую миллисекунду этого года, то есть 1 января в 00:00 (12:00:00 AM).
Пример 2. Скрипт period_no
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере задача состоит в том, чтобы создать поле «previous_year_start», которое возвращает метку времени даты начала года, предшествующего тому, в котором совершена транзакция.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearstart(date,-1) as previous_year_start,
timestamp(yearstart(date,-1)) as previous_year_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
previous_year_start
-
previous_ year_start_timestamp
id | date | previous_year_start | previous_year_start_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8189 | 02/26/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8190 | 03/27/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8191 | 04/16/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8192 | 05/21/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8193 | 08/14/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8194 | 10/07/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8195 | 12/05/2020 | 01/01/2019 | 1/1/2019 12:00:00 AM |
8196 | 01/22/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8197 | 02/03/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8198 | 03/17/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8199 | 04/23/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8200 | 05/04/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8201 | 06/30/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8202 | 07/26/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8203 | 12/27/2021 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8204 | 06/06/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8205 | 07/18/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8206 | 11/14/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8207 | 12/12/2022 | 01/01/2021 | 1/1/2021 12:00:00 AM |
Поскольку в данном примере в качестве аргумента смещения в функции yearstart() используется period_no = -1, функция сначала определяет год, в течение которого совершены транзакции. Затем она возвращается на год назад и определяет первую миллисекунду этого года.
Транзакция 8199 совершена 23 апреля 2021 года. Функция yearstart() возвращает первую миллисекунду предыдущего года, то есть 1 января 2020 года в 00:00 (12:00:00 AM), для поля previous_year_start.
Пример 3. Аргумент first_month_of_year
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере политика компании такова, что год начинается 1 апреля.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
yearstart(date,0,4) as year_start,
timestamp(yearstart(date,0,4)) as year_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
-
year_start
-
year_start_timestamp
id | date | year_start | year_start_timestamp |
---|---|---|---|
8188 | 01/13/2020 | 04/01/2019 | 4/1/2019 12:00:00 AM |
8189 | 02/26/2020 | 04/01/2019 | 4/1/2019 12:00:00 AM |
8190 | 03/27/2020 | 04/01/2019 | 4/1/2019 12:00:00 AM |
8191 | 04/16/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8192 | 05/21/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8193 | 08/14/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8194 | 10/07/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8195 | 12/05/2020 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8196 | 01/22/2021 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8197 | 02/03/2021 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8198 | 03/17/2021 | 04/01/2020 | 4/1/2020 12:00:00 AM |
8199 | 04/23/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
8200 | 05/04/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
8201 | 06/30/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
8202 | 07/26/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
8203 | 12/27/2021 | 04/01/2021 | 4/1/2021 12:00:00 AM |
8204 | 06/06/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
8205 | 07/18/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
8206 | 11/14/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
8207 | 12/12/2022 | 04/01/2022 | 4/1/2022 12:00:00 AM |
Поскольку в этом примере аргумент first_month_of_year = 4 используется в функции yearstart(), в качестве первого дня года задается 1 апреля, а в качестве последнего дня года — 31 марта.
Транзакция 8199 совершена 23 апреля 2021 года. Поскольку функция yearstart() задает в качестве начала года 1 апреля, она возвращает эту дату в качестве значения year_start для транзакции.
Пример 4. Пример объекта диаграммы
Обзор
Используется тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, который возвращает метку даты начала года, в котором совершены транзакции, создается как мера в объекте диаграммы в приложении.
Скрипт загрузки
Transactions:
Load
*
Inline
[
id,date,amount
8188,01/13/2020,37.23
8189,02/26/2020,17.17
8190,03/27/2020,88.27
8191,04/16/2020,57.42
8192,05/21/2020,53.80
8193,08/14/2020,82.06
8194,10/07/2020,40.39
8195,12/05/2020,87.21
8196,01/22/2021,95.93
8197,02/03/2021,45.89
8198,03/17/2021,36.23
8199,04/23/2021,25.66
8200,05/04/2021,82.77
8201,06/30/2021,69.98
8202,07/26/2021,76.11
8203,12/27/2021,25.12
8204,06/06/2022,46.23
8205,07/18/2022,84.21
8206,11/14/2022,96.24
8207,12/12/2022,67.67
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
id
-
date
Чтобы рассчитать год, в котором совершена транзакция, создайте следующие меры:
-
=yearstart(date)
-
=timestamp(yearstart(date))
id | date | =yearstart(date) | =timestamp(yearstart(date)) |
---|---|---|---|
8188 | 06/06/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8189 | 07/18/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8190 | 11/14/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8191 | 12/12/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
8192 | 01/22/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8193 | 02/03/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8194 | 03/17/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8195 | 04/23/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8196 | 05/04/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8197 | 06/30/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8198 | 07/26/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8199 | 12/27/2021 | 01/01/2021 | 1/1/2021 12:00:00 AM |
8200 | 01/13/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8201 | 02/26/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8202 | 03/27/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8203 | 04/16/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8204 | 05/21/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8205 | 08/14/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8206 | 10/07/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
8207 | 12/05/2020 | 01/01/2020 | 1/1/2020 12:00:00 AM |
Мера start_of_year создана в объекте диаграммы с использованием функции yearstart(), где в качестве аргумента функции передано поле даты.
Функция yearstart() первоначально определяет, к какому году относится значение даты, и возвращает метку времени для первой миллисекунды этого года.
Транзакция 8199 совершена 23 апреля 2021 года. Функция yearstart() возвращает первую миллисекунду этого года, то есть 1 января в 00:00 (12:00:00 AM).
Пример 5. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
-
Набор данных загружается в таблицу под именем Loans. Данная таблица содержит следующие поля:
-
Идентификаторы кредита.
-
Остаток на начало года.
-
Простая процентная ставка, начисляемая по каждому кредиту в год.
-
Конечному пользователю требуется объект диаграммы, который будет отображать по идентификатору кредита текущий процент, начисленный по каждому кредиту за год до текущей даты.
Скрипт загрузки
Loans:
Load
*
Inline
[
loan_id,start_balance,rate
8188,$10000.00,0.024
8189,$15000.00,0.057
8190,$17500.00,0.024
8191,$21000.00,0.034
8192,$90000.00,0.084
];
Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
loan_id
-
start_balance
Чтобы рассчитать накопленный процент, создайте следующую меру:
=start_balance*(rate*(today(1)-yearstart(today(1)))/365)
Задайте параметру Формат чисел меры значение Денежный.
loan_id | start_balance | =start_balance*(rate*(today(1)-yearstart(today(1)))/365) |
---|---|---|
8188 | $10000.00 | $39.73 |
8189 | $15000.00 | $339.66 |
8190 | $17500.00 | $166.85 |
8191 | $21000.00 | $283.64 |
8192 | $90000.00 | $3003.29 |
Используя сегодняшнюю дату в качестве единственного аргумента, функция yearstart() возвращает дату начала текущего года. Вычитая этот результат из текущей даты, выражение возвращает количество дней, прошедших до сих пор в этом году.
Затем это значение умножается на процентную ставку и делится на 365, чтобы получить эффективную процентную ставку за период. После этого эффективная процентная ставка за период умножается на начальный остаток кредита, чтобы вернуть проценты, начисленные до сих пор в этом году.