Эта функция возвращает значение, соответствующее метке времени первой миллисекунды месяца, двухмесячного периода, квартала, трети года (четыре месяца) или полугодия, содержащих базовую дату. Также можно найти метку времени для предыдущего или последующего временного периода.По умолчанию для вывода используется формат DateFormat, установленный в скрипте.
Функция monthsstart() делит год на сегменты на основе предоставленного аргумента n_months. Затем она проверяет, к какому сегменту относится каждая переданная дата, и возвращает первую миллисекунду этого сегмента в формате даты. Функция также предоставляет возможность возвращать метку времени начала предыдущих или следующих сегментов, а также переопределять первый месяц года.
В качестве аргументов n_month в функции доступны следующие отрезки года.
Возможные аргументы n_month
Периоды
Количество месяцев
месяц
1
два месяца
2
квартал
3
четыре месяца
4
полгода
6
Аргументы
Аргумент
Описание
n_months
Число месяцев, обозначающее период. Целое число или выражение, определяемое по целому числу, которое должно быть одним из следующих значений: 1 (эквивалентно функции inmonth()), 2 (двухмесячный период), 3 (эквивалентно функции inquarter()), 4 (четыре месяца) или 6 (полугодие).
date
Дата или метка времени для вычисления.
period_no
Период можно сместить, задав значение в поле period_no, целом числе или выражении, определяемом по целому числу, где 0 обозначает период, включающий значение, указанное в поле base_date. Отрицательные значения, заданные в поле period_no, означают предшествующие периоды, положительные — последующие.
first_month_of_year
Если необходимо работать с годами (финансовыми), которые начинаются не в январе, задайте значение от 2 до 12 в поле first_month_of_year.
Когда это следует использовать
Функция monthsstart() широко используется в составе выражения, когда пользователю требуется учитывать в расчетах часть периода, которая еще не прошла. Например, это позволяет передавать входную переменную, чтобы пользователь мог вычислить общий процент, на данный момент начисленный за месяц, квартал или полугодие.
Примеры функции
Пример
Результат
monthsstart(4, '10/19/2013')
Возвращает 09/01/2013.
monthsstart(4, '10/19/2013, -1)
Возвращает 05/01/2013.
monthsstart(4, '10/19/2013', 0, 2
)
Возвращает 10/01/2013, поскольку началом года становится месяц 2.
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.
Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.
Пример 1. Без дополнительных аргументов
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, содержащий набор транзакций за 2022 год, загружается в таблицу под именем Transactions.
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
Создание поля bi_monthly_start, которое группирует транзакции по двухмесячным сегментам и возвращает метку времени начала сегмента для каждой транзакции.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
bi_monthly_start
bi_monthly_start_timestamp
Результирующая таблица
date
bi_monthly_start
bi_monthly_start_timestamp
2/19/2022
01/01/2022
1/1/2022 12:00:00 AM
3/7/2022
03/01/2022
3/1/2022 12:00:00 AM
3/30/2022
03/01/2022
3/1/2022 12:00:00 AM
4/5/2022
03/01/2022
3/1/2022 12:00:00 AM
4/16/2022
03/01/2022
3/1/2022 12:00:00 AM
5/1/2022
05/01/2022
5/1/2022 12:00:00 AM
5/7/2022
05/01/2022
5/1/2022 12:00:00 AM
5/22/2022
05/01/2022
5/1/2022 12:00:00 AM
6/15/2022
05/01/2022
5/1/2022 12:00:00 AM
6/26/2022
05/01/2022
5/1/2022 12:00:00 AM
7/9/2022
07/01/2022
7/1/2022 12:00:00 AM
7/22/2022
07/01/2022
7/1/2022 12:00:00 AM
7/23/2022
07/01/2022
7/1/2022 12:00:00 AM
7/27/2022
07/01/2022
7/1/2022 12:00:00 AM
8/2/2022
07/01/2022
7/1/2022 12:00:00 AM
8/8/2022
07/01/2022
7/1/2022 12:00:00 AM
8/19/2022
07/01/2022
7/1/2022 12:00:00 AM
9/26/2022
09/01/2022
9/1/2022 12:00:00 AM
10/14/2022
09/01/2022
9/1/2022 12:00:00 AM
10/29/2022
09/01/2022
9/1/2022 12:00:00 AM
Поле bi_monthly_start создано в предыдущем операторе load с помощью функции monthsstart(). Первый предоставленный аргумент имеет значение 2, что делит год на двухмесячные сегменты. Второй аргумент определяет, какое поле оценивается.
Транзакция 8195 совершена 22 мая. Функция monthsstart() изначально делит год на двухмесячные сегменты. Транзакция 8195 попадает в сегмент с 1 мая по 30 июня. Таким образом, функция возвращает первую миллисекунду этого сегмента, то есть 00:00:00 (12:00:00 AM) 1 мая 2022 года.
Пример 2. Скрипт period_no
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Используется тот же набор данных и сценарий, что в первом примере.
Создание поля prev_bi_monthly_start, которое возвращает первую миллисекунду двухмесячного сегмента, предшествующего совершению транзакции.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
prev_bi_monthly_start
prev_bi_monthly_start_timestamp
Результирующая таблица
date
prev_bi_monthly_start
prev_bi_monthly_start_timestamp
2/19/2022
11/01/2021
11/1/2021 12:00:00 AM
3/7/2022
01/01/2022
1/1/2022 12:00:00 AM
3/30/2022
01/01/2022
1/1/2022 12:00:00 AM
4/5/2022
01/01/2022
1/1/2022 12:00:00 AM
4/16/2022
01/01/2022
1/1/2022 12:00:00 AM
5/1/2022
03/01/2022
3/1/2022 12:00:00 AM
5/7/2022
03/01/2022
3/1/2022 12:00:00 AM
5/22/2022
03/01/2022
3/1/2022 12:00:00 AM
6/15/2022
03/01/2022
3/1/2022 12:00:00 AM
6/26/2022
03/01/2022
3/1/2022 12:00:00 AM
7/9/2022
05/01/2022
5/1/2022 12:00:00 AM
7/22/2022
05/01/2022
5/1/2022 12:00:00 AM
7/23/2022
05/01/2022
5/1/2022 12:00:00 AM
7/27/2022
05/01/2022
5/1/2022 12:00:00 AM
8/2/2022
05/01/2022
5/1/2022 12:00:00 AM
8/8/2022
05/01/2022
5/1/2022 12:00:00 AM
8/19/2022
05/01/2022
5/1/2022 12:00:00 AM
9/26/2022
07/01/2022
7/1/2022 12:00:00 AM
10/14/2022
07/01/2022
7/1/2022 12:00:00 AM
10/29/2022
07/01/2022
7/1/2022 12:00:00 AM
Используя значение -1 для аргумента period_no, функция monthsstart() первоначально делит год на двухмесячные сегменты, а затем возвращает первую миллисекунду предыдущего двухмесячного сегмента для момента, когда происходит транзакция.
Транзакция 8195 совершена в сегменте с мая по июнь. Таким образом, предшествующий двухмесячный сегмент был с 1 марта по 30 апреля, поэтому функция возвращает первую миллисекунду этого сегмента, то есть 00:00:00 (12:00:00 AM) 1 мая 2022.
Пример 3. Аргумент first_month_of_year
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Используется тот же набор данных и сценарий, что в первом примере.
Создание поля bi_monthly_start, которое группирует транзакции по двухмесячным сегментам и возвращает метку времени начала сегмента для каждой транзакции.
Однако в этом примере нам также нужно задать апрель в качестве первого месяца финансового года.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
date
bi_monthly_start
bi_monthly_start_timestamp
Результирующая таблица
date
bi_monthly_start
bi_monthly_start_timestamp
2/19/2022
02/01/2022
2/1/2022 12:00:00 AM
3/7/2022
02/01/2022
2/1/2022 12:00:00 AM
3/30/2022
02/01/2022
2/1/2022 12:00:00 AM
4/5/2022
04/01/2022
4/1/2022 12:00:00 AM
4/16/2022
04/01/2022
4/1/2022 12:00:00 AM
5/1/2022
04/01/2022
4/1/2022 12:00:00 AM
5/7/2022
04/01/2022
4/1/2022 12:00:00 AM
5/22/2022
04/01/2022
4/1/2022 12:00:00 AM
6/15/2022
06/01/2022
6/1/2022 12:00:00 AM
6/26/2022
06/01/2022
6/1/2022 12:00:00 AM
7/9/2022
06/01/2022
6/1/2022 12:00:00 AM
7/22/2022
06/01/2022
6/1/2022 12:00:00 AM
7/23/2022
06/01/2022
6/1/2022 12:00:00 AM
7/27/2022
06/01/2022
6/1/2022 12:00:00 AM
8/2/2022
08/01/2022
8/1/2022 12:00:00 AM
8/8/2022
08/01/2022
8/1/2022 12:00:00 AM
8/19/2022
08/01/2022
8/1/2022 12:00:00 AM
9/26/2022
08/01/2022
8/1/2022 12:00:00 AM
10/14/2022
10/01/2022
10/1/2022 12:00:00 AM
10/29/2022
10/01/2022
10/1/2022 12:00:00 AM
Так как используется 4 в качестве аргумента first_month_of_year в функции monthsstart(), функция начинает год 1 апреля, а затем делит год на двухмесячные сегменты. Apr-May,Jun-Jul,Aug-Sep,Oct-Nov,Dec-Jan,Feb-Mar.
Транзакция 8195 состоялась 22 мая и попадает в сегмент с 1 апреля по 31 мая. Таким образом, функция возвращает первую миллисекунду этого сегмента, то есть в 00:00:00 (12:00:00 AM) 1 апреля 2022 года.
Пример 4. Пример объекта диаграммы
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, который группирует транзакции в двухмесячные сегменты и возвращает начальную метку времени сегмента для каждой транзакции, создается как мера в объекте диаграммы приложения.
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: date.
Создайте следующие меры:
=monthsstart(2,date)
=timestamp(monthsstart(2,date))
Эти вычисления возвращают начальную метку времени двухмесячного сегмента, в течение которого совершена каждая транзакция.
Результирующая таблица
date
=monthsstart(2,date)
=timestamp(monthsstart(2,date))
9/26/2022
09/01/2022
9/1/2022 12:00:00 AM
10/14/2022
09/01/2022
9/1/2022 12:00:00 AM
10/29/2022
09/01/2022
9/1/2022 12:00:00 AM
7/9/2022
07/01/2022
7/1/2022 12:00:00 AM
7/22/2022
07/01/2022
7/1/2022 12:00:00 AM
7/23/2022
07/01/2022
7/1/2022 12:00:00 AM
7/27/2022
07/01/2022
7/1/2022 12:00:00 AM
8/2/2022
07/01/2022
7/1/2022 12:00:00 AM
8/8/2022
07/01/2022
7/1/2022 12:00:00 AM
8/19/2022
07/01/2022
7/1/2022 12:00:00 AM
5/1/2022
05/01/2022
5/1/2022 12:00:00 AM
5/7/2022
05/01/2022
5/1/2022 12:00:00 AM
5/22/2022
05/01/2022
5/1/2022 12:00:00 AM
6/15/2022
05/01/2022
5/1/2022 12:00:00 AM
6/26/2022
05/01/2022
5/1/2022 12:00:00 AM
3/7/2022
03/01/2022
3/1/2022 12:00:00 AM
3/30/2022
03/01/2022
3/1/2022 12:00:00 AM
4/5/2022
03/01/2022
3/1/2022 12:00:00 AM
4/16/2022
03/01/2022
3/1/2022 12:00:00 AM
2/19/2022
01/01/2022
1/1/2021 12:00:00 AM
Транзакция 8195 совершена 22 мая. Функция monthsstart() изначально делит год на двухмесячные сегменты. Транзакция 8195 попадает в сегмент с 1 мая по 30 июня. Таким образом, функция возвращает первую миллисекунду этого сегмента, то есть 05/01/2022 12:00:00 AM.
Пример 5. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит следующее:
Набор данных, содержащий набор остатков по кредитам, загруженный в таблицу под именем Loans.
Данные, включая идентификаторы кредитов, остаток на начало месяца и простая процентная ставка, взимаемая по каждому кредиту за год.
Конечному пользователю требуется объект диаграммы, который будет отображать по идентификатору кредита текущий процент, начисленный по каждому кредиту за выбранный период. Финансовый год начинается в январе.
В начале скрипта загрузки создана переменная (vPeriod), которая будет привязана к элементу управления вводом переменной. Затем настройте переменную как настраиваемый объект на листе.
Выполните следующие действия.
На панели ресурсов щелкните Пользовательские объекты.
Выберите Qlik Dashboard bundleи создайте объект Ввод переменной.
Введите заголовок для объекта диаграммы.
В разделе Переменная выберите vPeriod в качестве имени и задайте для отображения объект Раскрывающийся список.
В разделе Значения настройте для объекта использование динамических значений. Введите следующее: ='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'
Затем создайте таблицу результатов.
Выполните следующие действия.
Создайте новую таблицу. Добавьте следующие поля как измерения:
employee_id
employee_name
Чтобы рассчитать накопленный процент, создайте меру:
Задайте параметру меры Формат чисел значение Денежный. Щелкните Изменение завершено. Теперь можно модифицировать данные, показанные в таблице, изменив сегмент времени в объекте переменной.
Вот как будет выглядеть таблица результатов при выборе периода month:
Функция monthsstart(), используя ввод пользователя в качестве первого аргумента и сегодняшнюю дату в качестве второго аргумента, возвращает дату начала выбранного пользователем периода. Вычитая этот результат из текущей даты, выражение возвращает количество дней, прошедших до сих пор в течение этого периода.
Затем это значение умножается на процентную ставку и делится на 365, чтобы получить эффективную процентную ставку начисленную за этот период. После этого результат умножается на начальный остаток кредита, чтобы вернуть проценты, начисленные до сих пор в течение этого периода.
Помогла ли вам эта страница?
Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!