monthstart Функция скрипта и диаграммы
Эта функция возвращает значение, соответствующее метке времени, включающей первую миллисекунду первого дня месяца, содержащего значение, указанное в поле date. По умолчанию для вывода используется формат DateFormat, установленный в скрипте.
Синтаксис:
MonthStart(date[, period_no])
Возвращаемые типы данных: двойное значение
Схема функции monthstart()

Функция monthstart() определяет, на какой месяц приходится дата. Затем она возвращает метку времени в формате даты для первой миллисекунды этого месяца.
| Аргумент | Описание |
|---|---|
| date | Дата или метка времени для вычисления. |
| period_no | period_no является целым числом, значение 0 которого или отсутствие значения означает месяц, содержащий значение, указанное в поле date. Отрицательные значения, заданные в поле period_no, означают предшествующие месяцы, положительные — последующие. |
Когда использовать monthstart
Функция monthstart() широко используется в составе выражения, когда пользователю требуется учитывать в расчетах часть месяца, которая уже прошла. Например, можно ее использовать, если требуется рассчитать проценты, накопленные в течение месяца до определенной даты.
| Пример | Результат |
|---|---|
| monthstart('10/19/2001') | Возвращает 10/01/2001. |
| monthstart('10/19/2001', -1) | Возвращает 09/01/2001. |
Региональные настройки
Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе SET DateFormat скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами. Для получения дополнительной информации см. Изменение региональных настроек для создания приложений и скриптов.
Региональные настройки по умолчанию в приложениях основаны на профиле пользователя. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Cloud. Qlik Cloud будет отображаться на языке, который используется в браузере.
Если вы — разработчик приложений, то можете задать регион по умолчанию для создаваемых приложений. Для получения дополнительной информации см. Установка предпочтительных региональных настроек для создания приложений и скриптов в Qlik Cloud Analytics.
Пример 1. Без дополнительных аргументов
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор транзакций за 2022 год, который загружается в таблицу под именем Transactions.
-
Поле даты было предоставлено в формате системной переменной DateFormat (MM/DD/YYYY).
-
Создание поля start_of_month, возвращающего метку времени начала месяца, в течение которого совершены транзакции.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthstart(date) as start_of_month,
timestamp(monthstart(date)) as start_of_month_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
date
-
start_of_month
-
start_of_month_timestamp
| date | начало_месяца | начало_месяца_метка_времени |
|---|---|---|
| 1/7/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 1/19/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 2/5/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 2/28/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 3/16/2022 | 03/01/2022 | 01.03.2022 00:00:00 |
| 4/1/2022 | 01.04.2022 | 01.04.2022 00:00:00 |
| 5/7/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 5/16/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 6/15/2022 | 06/01/2022 | 01.06.2022 00:00:00 |
| 6/26/2022 | 07/01/2022 | 01.06.2022 00:00:00 |
| 7/9/2022 | 07/01/2022 | 01.07.2022 00:00:00 |
| 7/22/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/23/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/27/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 8/2/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 8/8/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 8/19/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 9/26/2022 | 01.09.2022 | 01.09.2022 00:00:00 |
| 10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
| 10/29/2022 | 10/01/2022 | 01.10.2022 12:00:00 AM |
Поле start_of_month создано предшествующим оператором load с использованием функции monthstart(), где в качестве аргумента функции передано поле даты.
Функция monthstart() определяет, к какому месяцу относится значение даты, и возвращает метку времени для первой миллисекунды этого месяца.
Диаграмма функции monthstart(), пример без дополнительных аргументов

Транзакция 8192 совершена 16 марта. Функция monthstart() возвращает первую миллисекунду этого месяца, то есть 00:00:00 (12:00:00 AM) 1 марта.
Пример 2. Скрипт period_no
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
-
Используется тот же набор данных и сценарий, что в первом примере.
-
Создание поля previous_month_start, которое возвращает метку времени начала месяца, предшествующего месяцу совершения транзакции.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthstart(date,-1) as previous_month_start,
timestamp(monthstart(date,-1)) as previous_month_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:
-
date
-
previous_month_start
-
previous_month_start_timestamp
| date | Начало предыдущего месяца | Метка времени начала предыдущего месяца |
|---|---|---|
| 1/7/2022 | 01.12.2021 | 01.12.2021 00:00:00 |
| 1/19/2022 | 01.12.2021 | 01.12.2021 00:00:00 |
| 2/5/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 2/28/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 3/16/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 4/1/2022 | 01.03.2022 | 01.03.2022 00:00:00 |
| 5/7/2022 | 04/01/2022 | 01.04.2022 00:00:00 |
| 5/16/2022 | 01.04.2022 | 4/1/2022 12:00:00 AM |
| 6/15/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 6/26/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 7/9/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 7/22/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 7/23/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 7/27/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 8/2/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 8/8/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 8/19/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 9/26/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 10/14/2022 | 01.09.2022 | 9/1/2022 12:00:00 AM |
| 10/29/2022 | 09/01/2022 | 01.09.2022 00:00:00 |
В этом случае, так как в качестве аргумента смещения в функции monthstart() использовалось period_no = -1, функция сначала определяет месяц, в котором совершаются транзакции. Затем она возвращается на месяц назад и определяет первую миллисекунду этого месяца.
Диаграмма функции monthstart(), пример с аргументом period_no

Транзакция 8192 совершена 16 марта. Функция monthstart() определяет, что месяцем, предшествующим транзакции, является февраль. Затем она возвращает первую миллисекунду этого месяца, 1 февраля в 00:00:00 (12:00:00 AM).
Пример 3. Пример объекта диаграммы
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.
Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.
Однако в этом примере в приложение загружается неизмененный набор данных. Расчет, возвращающий метку времени начала месяца, в котором совершены транзакции, создается как мера в объекте диаграммы в приложении.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];Результаты
Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: date.
Чтобы рассчитать дату начала месяца, когда была совершена транзакция, создайте следующие меры:
-
=monthstart(date)
- =timestamp(monthstart(date))
| date | =началомесяца(дата) | =Меткавремени(началомесяца(дата)) |
|---|---|---|
| 10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
| 10/29/2022 | 10/01/2022 | 01.10.2022 00:00:00 |
| 9/26/2022 | 01.09.2022 | 01.09.2022 00:00:00 |
| 8/2/2022 | 01.08.2022 | 01.08.2022 00:00:00 |
| 8/8/2022 | 08/01/2022 | 8/1/2022 12:00:00 AM |
| 8/19/2022 | 01.08.2022 | 01.08.2022 12:00:00 AM |
| 7/9/2022 | 07/01/2022 | 01.07.2022 00:00:00 |
| 7/22/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/23/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 7/27/2022 | 01.07.2022 | 01.07.2022 00:00:00 |
| 6/15/2022 | 06/01/2022 | 01.06.2022 00:00:00 |
| 6/26/2022 | 01.06.2022 | 01.06.2022 00:00:00 |
| 5/7/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 5/16/2022 | 01.05.2022 | 01.05.2022 00:00:00 |
| 4/1/2022 | 01.04.2022 | 4/1/2022 12:00:00 AM |
| 3/16/2022 | 03/01/2022 | 01.03.2022 00:00:00 |
| 2/5/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 2/28/2022 | 01.02.2022 | 01.02.2022 00:00:00 |
| 1/7/2022 | 01/01/2022 | 01.01.2022 00:00:00 |
| 1/19/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
Мера start_of_month создана в объекте диаграммы с использованием функции monthstart(), где в качестве аргумента функции передано поле даты.
Функция monthstart() определяет, к какому месяцу относится значение даты, и возвращает метку времени для первой миллисекунды этого месяца.
Диаграмма функции monthstart(), пример с объектом диаграммы

Транзакция 8192 совершена 16 марта. Функция monthstart() определяет, что транзакция совершена в марте и возвращает первую миллисекунду этого месяца, то есть 00:00:00 (12:00:00 AM) 1 марта.
Пример 4. Сценарий
Обзор
Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.
Скрипт загрузки содержит следующее:
-
Набор данных, содержащий набор остатков по кредитам, загруженный в таблицу под именем Loans.
-
Данные, включая идентификаторы кредитов, остаток на начало месяца и простая процентная ставка, взимаемая по каждому кредиту за год.
Конечному пользователю требуется объект диаграммы, который будет отображать по идентификатору кредита текущий процент, начисленный по каждому кредиту за год до текущей даты.
Скрипт загрузки
SET DateFormat='MM/DD/YYYY';
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)-monthstart(today(1)))/365)
-
Задайте параметру меры Формат чисел значение Денежный.
| loan_id | начальный_баланс | =начальный_баланс*(ставка*(сегодня(1)-начало_месяца(сегодня(1)))/365) |
|---|---|---|
| 8188 | $10 000,00 | $16.44 |
| 8189 | $15000.00 | $58.56 |
| 8190 | $17500.00 | $28.77 |
| 8191 | $21000.00 | $48.90 |
| 8192 | $90000.00 | $517.81 |
Используя сегодняшнюю дату в качестве единственного аргумента, функция monthstart() возвращает дату начала текущего месяца. Вычитая этот результат из текущей даты, выражение возвращает количество дней, прошедших до сих пор в течение этого месяца.
Затем это значение умножается на процентную ставку и делится на 365, чтобы получить эффективную процентную ставку начисленную за этот период. После этого результат умножается на начальный остаток кредита, чтобы вернуть проценты, начисленные до сих пор в течение этого месяца.