monthsend – função de script e gráfico
Essa função retorna um valor correspondente ao carimbo de data/hora do último milissegundo do mês, bimestre, trimestre, quadrimestre ou semestre contendo uma data base. Também é possível encontrar o carimbo de data/hora para o final de um período anterior ou seguinte. O formato de saída padrão é o DateFormat definido no script.
Sintaxe:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
Tipo de dados de retorno: dual
Diagrama da função monthsend.

Argumento | Descrição |
---|---|
n_months | O número de meses que define o período. Um inteiro ou uma expressão que se resolve como um inteiro que deve ser um dos seguintes: 1 (equivalente à função inmonth()), 2 (bimestre), 3 (equivalente à função inquarter()), 4 (quadrimestre) ou 6 (semestre). |
date | A data ou o carimbo de data/hora a ser avaliado. |
period_no | O período pode ser deslocado por period_no, um inteiro ou expressão que resolve um inteiro, no qual o valor 0 indica o período que contém base_date. Valores negativos em period_no indicam períodos precedentes e valores positivos indicam períodos sucessivos. |
first_month_of_year |
Se desejar trabalhar com anos (fiscais) que não comecem em janeiro, indique um valor entre 2 e 12 em first_month_of_year. |
A função monthsend() divide o ano em segmentos com base no argumento n_months fornecido. Em seguida, ele avalia em qual segmento cada data fornecida se encaixa e retorna o último milissegundo, em formato de data, desse segmento. A função pode retornar o carimbo de data/hora final dos segmentos anteriores ou seguintes, bem como redefinir o primeiro mês do ano.
Os seguintes segmentos do ano estão disponíveis na função como argumentos n_month.
Período | Número de meses |
---|---|
mês | 1 |
bimestre | 2 |
trimestre | 3 |
quadrimestre | 4 |
semestre | 6 |
Quando usar
A função monthsend() é usada como parte de uma expressão quando o usuário deseja que o cálculo use a fração do mês decorrido até o momento. O usuário tem a oportunidade, usando uma variável, de selecionar o período de sua escolha. Por exemplo, monthsend() pode fornecer uma variável de entrada para permitir que o usuário calcule o total de juros ainda não acumulados durante o mês, trimestre ou semestre.
Configurações regionais
A menos que especificado de outra forma, os exemplos neste tópico usam o seguinte formato de data: MM/DD/AAAA. O formato de data é especificado na instrução SET DateFormat no seu script de carregamento de dados. A formatação de data padrão pode ser diferente no seu sistema devido às suas configurações regionais e outros fatores. Você pode alterar os formatos nos exemplos abaixo para atender às suas necessidades. Ou pode alterar os formatos no seu script de carregamento para corresponder a esses exemplos. Para obter mais informações, consulte Modificando as configurações regionais do aplicativo.
As configurações regionais padrão nos aplicativos são baseadas no perfil do usuário. Essas configurações de formato regional não estão relacionadas ao idioma exibido na interface do usuário do Qlik Cloud. O Qlik Cloud será exibido no mesmo idioma do navegador que você está usando.
Se você for um criador de aplicativos, poderá definir a região padrão para os aplicativos que criar. Para obter mais informações, consulte Definindo suas configurações regionais preferidas para criar aplicativos no Qlik Cloud Analytics.
Exemplo | Resultado |
---|---|
monthsend(4, '07/19/2013') | Retorna 08/31/2013. |
monthsend(4, '10/19/2013', -1) | Retorna 08/31/2013. |
monthsend(4, '10/19/2013', 0, 2) | Retorna 01/31/2014. Porque o início do ano passa a ser o mês 2. |
Exemplo 1: Exemplo básico
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém:
-
Um conjunto de dados contendo um conjunto de transações para 2022 é carregado em uma tabela denominada "Transactions".
-
Um campo de data fornecido no formato da variável de sistema DateFormat (MM/DD/YYYY).
-
Uma instrução de carregamento anterior contendo:
-
A função monthsend que é definida como o campo, “bi_monthly_end”. Isso agrupa as transações em segmentos bimestrais.
-
A função timestamp que retorna o carimbo de data/hora inicial do segmento para cada transação.
-
Script de carregamento
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date) as bi_monthly_end,
timestamp(monthsend(2,date)) as bi_monthly_end_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/22/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
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
id
-
date
-
bi_monthly_end
-
bi_monthly_end_timestamp
id | date | bi_monthly_end | bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8189 | 1/19/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8192 | 3/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8194 | 5/7/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8205 | 9/26/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
O campo "bi_monthly_end" é criado na instrução de carregamento anterior usando a função monthsend(). O primeiro argumento fornecido é 2, dividindo o ano em segmentos bimestrais. O segundo argumento identifica qual campo está sendo avaliado.
Diagrama da função monthsend com segmentos bimestrais.

A transação 8195 ocorre em 22 de maio. A função monthsend() inicialmente divide o ano em segmentos bimestrais. A transação 8195 cai no segmento entre 1º de maio e 30 de junho. Como resultado, a função retorna o último milissegundo desse segmento, 06/30/2022 11:59:59 PM.
Exemplo 2: period_no
Visão geral
São usados o mesmo conjunto de dados e cenário do primeiro exemplo.
Neste exemplo, a tarefa é criar um campo, “prev_bi_monthly_end”, que retorna o primeiro milissegundo do segmento bimestral antes de a transação ocorrer.
Script de carregamento
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date,-1) as prev_bi_monthly_end,
timestamp(monthsend(2,date,-1)) as prev_bi_monthly_end_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/22/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
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
id
-
date
-
prev_bi_monthly_end
-
prev_bi_monthly_end_timestamp
id | date | prev_bi_monthly_end | prev_bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8189 | 1/19/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8190 | 2/5/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8191 | 2/28/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8192 | 3/16/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8193 | 4/1/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8194 | 5/7/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8199 | 7/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8200 | 7/23/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8201 | 7/27/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8202 | 8/2/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8203 | 8/8/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8204 | 8/19/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8205 | 9/26/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
Usando -1 como argumento period_no na função monthsend(), depois de dividir inicialmente um ano em segmentos bimestrais, a função retorna o último milissegundo do segmento bimestral anterior até quando uma transação ocorre.
Diagrama da função monthsend que retorna o segmento bimestral anterior.

A transação 8195 ocorre no segmento entre maio e junho. Como resultado, o segmento bimestral anterior estava entre 1º de março e 30 de abril e, portanto, a função retorna o último milissegundo desse segmento, 04/30/2022 11:59:59 PM.
Exemplo 3: first_month_of_year
Visão geral
São usados o mesmo conjunto de dados e cenário do primeiro exemplo.
Neste exemplo, a política organizacional é que abril seja o primeiro mês do exercício financeiro.
Crie um campo, "bi_monthly_end", que agrupa as transações em segmentos bimestrais e retorna o carimbo de data/hora do último milissegundo do segmento para cada transação.
Script de carregamento
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date,0,4) as bi_monthly_end,
timestamp(monthsend(2,date,0,4)) as bi_monthly_end_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/22/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
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
-
id
-
date
-
bi_monthly_end
-
bi_monthly_end_timestamp
id | date | bi_monthly_end | bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
8189 | 1/19/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
8190 | 2/5/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8191 | 2/28/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8192 | 3/16/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8193 | 4/1/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8194 | 5/7/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8195 | 5/22/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8196 | 6/15/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8197 | 6/26/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8198 | 7/9/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8203 | 8/8/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8204 | 8/19/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8205 | 9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8206 | 10/14/2022 | 11/30/2022 | 11/30/2022 11:59:59 PM |
8207 | 10/29/2022 | 11/30/2022 | 11/30/2022 11:59:59 PM |
Usando 4 como argumento first_month_of_year na função monthsend(), a função começa o ano em 1º de abril. Em seguida, ela divide o ano em segmentos bimestrais: Apr-May, Jun-Jul, Aug-Sep, Oct-Nov, Dec-Jan, Feb-Mar.
Diagrama da função monthsend com o primeiro mês do ano definido como abril

A transação 8195 ocorreu em 22 de maio e cai no segmento entre 1º de abril e 31 de maio. Como resultado, a função retorna o último milissegundo desse segmento, 05/31/2022 11:59:59 PM.
Exemplo 4: Exemplo de objeto de gráfico
Visão geral
São usados o mesmo conjunto de dados e cenário do primeiro exemplo. No entanto, neste exemplo, o conjunto de dados permanece inalterado e carregado no aplicativo.
Neste exemplo, a tarefa é criar um cálculo que agrupe as transações em segmentos bimestrais e retorne o carimbo de data/hora do último milissegundo do segmento para cada transação como uma medida em um objeto de gráfico de um aplicativo.
Script de carregamento
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/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
];
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão:
date
Para obter o carimbo de data/hora do último milissegundo do segmento bimestral quando a transação ocorreu, crie as seguintes medidas:
-
=monthsEnd(2,date)
-
=timestamp(monthsend(2,date))
id | date | =monthsend(2,date) | =timestamp(monthsend(2,date)) |
---|---|---|---|
8188 | 1/7/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8189 | 1/19/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8192 | 3/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8194 | 5/7/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8205 | 9/26/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
O campo “bi_monthly_end” é criado como uma medida no objeto de gráfico usando a função monthsend(). O primeiro argumento fornecido é 2, que divide o ano em segmentos bimestrais. O segundo argumento identifica qual campo está sendo avaliado.
Diagrama da função monthsend com segmentos bimestrais.

A transação 8195 ocorre em 22 de maio. A função monthsend() inicialmente divide o ano em segmentos bimestrais. A transação 8195 cai no segmento entre 1º de maio e 30 de junho. Como resultado, a função retorna o primeiro milissegundo desse segmento, 06/30/2022 11:59:59 PM.
Exemplo 5: Cenário
Visão geral
Abra o editor de carregamento de dados e adicione o script de carregamento abaixo em uma nova guia.
Neste exemplo, um conjunto de dados é carregado em uma tabela chamada "Employee_Expenses". A tabela contém os seguintes campos:
-
IDs de funcionários
-
Nomes de funcionários
-
As reivindicações de despesas médias diárias de cada funcionário.
O usuário final deseja um gráfico que mostre, por ID do funcionário e nome do funcionário, a declaração de despesas estimada para o restante de um período de sua escolha. O exercício financeiro começa em janeiro.
Script de carregamento
SET vPeriod = 1;
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
Resultados
Carregue os dados e abra uma nova pasta.
No início do script de carregamento, é criada uma variável vPeriod que é vinculada ao controle de entrada da variável.
Faça o seguinte:
-
No painel de ativos, clique em Objetos personalizados.
-
Selecione o pacote Qlik Dashboard, crie um objeto de Entrada de variável.
-
Insira um título para o objeto de gráfico.
-
Em Variável, selecione vPeriod como o nome e defina o objeto para ser exibido como um Menu suspenso.
-
Em Valores, clique em valores Dinâmicos. Insira o seguinte:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
Crie uma nova tabela e esses campos como dimensões:
-
employee_id
-
employee_name
Para calcular os juros acumulados, crie esta medida:
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
Defina o Formato numérico da medida como Dinheiro.
employee_id | employee_name | =floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $1410.00 |
183 | Deryck | $1175.00 |
184 | Dexter | $1175.00 |
185 | Sydney | $2538.00 |
186 | Agatha | $1692.00 |
A função monthsend() usa a entrada do usuário como primeiro argumento e a data de hoje como segundo argumento. Isso retorna a data de término do período selecionado pelo usuário. Em seguida, a expressão retorna o número de dias que permanecem no período selecionado, subtraindo a data de hoje dessa data de término.
Esse valor é então multiplicado pela média de solicitações de despesas diárias por cada funcionário para calcular o valor estimado das solicitações que cada funcionário deve fazer nos dias restantes desse período.