monthsend - función de script y de gráfico
Esta función devuelve un valor correspondiente a la marca de tiempo del último milisegundo del periodo mensual, bimensual, trimestral, cuatrimestral o semestral que contiene una fecha base. También es posible hallar la marca de tiempo del final de un periodo anterior o posterior. El formato de salida predefinido es el DateFormat definido en el script.
Sintaxis:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
Tipo de datos que devuelve: dual
Argumento | Descripción |
---|---|
n_months | El número de meses que define el periodo. Un entero o expresión que devuelve un entero que debe ser uno de los siguientes: 1 (equivalente a la función inmonth() ), 2 (bimestral), 3 (equivalente a la función inquarter()), 4 (cuatrimestral) o 6 (medio año). |
date | La fecha o marca de tiempo para evaluar. |
period_no | El período se puede desplazar mediante period_no, un entero o una expresión que devuelve un entero, donde el valor 0 indica el período que contiene a base_date. Los valores negativos en period_no indican períodos precedentes y los valores positivos indican períodos subsiguientes. |
first_month_of_year |
Si desea trabajar con años (fiscales) que no comiencen en enero, indique un valor entre 2 y 12 en first_month_of_year. |
La función monthsend() divide el año en segmentos basándose en el argumento n_months proporcionado. Después evalúa en qué segmento cae cada fecha proporcionada y devuelve el último milisegundo, en formato de fecha, de ese segmento. La función puede devolver la marca de tiempo de finalización de los segmentos anteriores o posteriores, así como redefinir el primer mes del año.
Los siguientes segmentos del año están disponibles en la función n_month como argumentos.
Periodo | Número de meses |
---|---|
mes | 1 |
bimestre | 2 |
trimestre | 3 |
cuatrimestre | 4 |
semestre | 6 |
Cuándo se utiliza
La función monthsend() se utiliza como parte de una expresión cuando el usuario desea que el cálculo utilice la fracción del mes que ha transcurrido hasta el momento. El usuario tiene la oportunidad, mediante el uso de una variable, de seleccionar el período de su elección. Por ejemplo, monthsend() puede proporcionar una variable de entrada para permitir que el usuario calcule el interés total aún no devengado durante el mes, trimestre o semestre.
Configuraciones regionales
A menos que se especifique algo distinto, los ejemplos de este tema utilizan el siguiente formato de fecha: MM/DD/YYYY. El formato de fecha se especifica en la sentencia SET DateFormat de su script de carga de datos. El formato de fecha predeterminado puede ser diferente en su sistema, debido a su configuración regional y otros factores. Puede cambiar el formato en los ejemplos a continuación para ajustarlo a sus necesidades. O puede cambiar los formatos en su script de carga para que coincidan con estos ejemplos. Para más información, vea Modificar la configuración regional para aplicaciones y scripts.
La configuración regional predeterminada en las aplicaciones se basa en el perfil de usuario. Estos ajustes de formato regional no están relacionados con el idioma mostrado en la interfaz de usuario de Qlik Cloud. Qlik Cloud se mostrará en el mismo idioma que esté utilizando su navegador.
Si es un creador de aplicaciones, puede establecer la región por defecto para las apps que cree. Para más información, vea Establecer sus configuraciones regionales preferidas para crear apps y scripts en Analítica de Qlik Cloud.
Ejemplo | Resultado |
---|---|
monthsend(4, '07/19/2013') | Devuelve 08/31/2013. |
monthsend(4, '10/19/2013', -1) | Devuelve 08/31/2013. |
monthsend(4, '10/19/2013', 0, 2) | Devuelve 01/31/2014. Porque el inicio del año se convierte en el mes 2. |
Ejemplo 1: ejemplo básico
Vista general
Abra el editor de carga de datos y agregue el script de carga a continuación a una nueva pestaña.
El script de carga contiene:
-
Un conjunto de datos que contiene un conjunto de transacciones de 2022 se carga en una tabla llamada "Transactions".
-
Un campo de fecha proporcionado en el formato (MM/DD/YYYY) de la variable del sistema DateFormat.
-
Una instrucción load anterior que contiene lo siguiente:
-
La función monthsend que está definida como el campo "bi_monthly_end". Esto agrupa las transacciones en segmentos bimensuales.
-
La función timestamp que devuelve la marca de tiempo inicial del segmento de cada transacción.
-
Script de carga
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
Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:
-
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 |
El campo "bi_monthly_end" se crea en la instrucción load anterior, mediante el uso de la función monthsend(). El primer argumento proporcionado es 2, dividiendo el año en segmentos bimensuales. El segundo argumento identifica qué campo se está evaluando.
La transacción 8195 tuvo lugar el 22 de mayo. La función monthsend() inicialmente divide el año en segmentos bimensuales. La transacción 8195 cae en el segmento entre el 1 de mayo y el 30 de junio. Como resultado, la función devuelve el último milisegundo de este segmento, 30/06/2022 a las 23:59:59.
Ejemplo 2: period_no
Vista general
Se utilizan el mismo conjunto de datos y el mismo escenario que en el primer ejemplo.
En este ejemplo, la tarea es crear un campo, "prev_bi_monthly_end'', que devuelva el primer milisegundo del segmento bimensual anterior a la transacción.
Script de carga
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
Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:
-
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 de period_no en la función monthsend(), después de dividir inicialmente un año en segmentos bimensuales, la función devuelve el último milisegundo del segmento bimensual anterior al momento en que se realiza una transacción.
La transacción 8195 ocurre en el segmento entre el mayo y junio. Como resultado, el segmento bimensual anterior ocurrió entre el 1 de marzo y el 30 de abril, por lo que la función devuelve el último milisegundo de este segmento, 30/04/2022, 23:59:59.
Ejemplo 3: first_month_of_year
Vista general
Se utilizan el mismo conjunto de datos y el mismo escenario que en el primer ejemplo.
En este ejemplo, la política de la organización es que abril sea el primer mes del año fiscal.
Cree un campo, "bi_monthly_end", que agrupe las transacciones en segmentos bimensuales y devuelva la marca de tiempo del último milisegundo del segmento de cada transacción.
Script de carga
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
Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:
-
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 |
Al usar 4 como argumento de first_month_of_year en la función monthsend(), la función comienza el año el 1 de abril. Luego divide el año en segmentos bimensuales: Abr-May, Jun-Jul, Ago-Sep, Oct-Nov, Dic-Ene, Feb-Mar.
La transacción 8195 tuvo lugar el 22 de mayo y cae en el segmento entre el 1 de abril y el 31 de mayo. Como resultado, la función devuelve el último milisegundo de este segmento, 31/05/2022 23:59:59.
Ejemplo 4: ejemplo de objeto gráfico
Vista general
Se utilizan el mismo conjunto de datos y el mismo escenario que en el primer ejemplo. Sin embargo, en este ejemplo el conjunto de datos está sin modificar y cargado en la app.
En este ejemplo, la tarea es crear un cálculo que agrupe las transacciones en segmentos bimensuales y devuelva la marca de tiempo del último milisegundo del segmento de cada transacción como una medida en un objeto gráfico de una aplicación.
Script de carga
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
Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión:
date
Para obtener la marca de tiempo del último milisegundo del segmento bimensual en que se realizó la transacción, cree las siguientes 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 |
El campo "bi_monthly_end" se crea como una medida en el objeto gráfico usando la función monthsend(). El primer argumento proporcionado es 2, que divide el año en segmentos bimensuales. El segundo argumento identifica qué campo se está evaluando.
La transacción 8195 tuvo lugar el 22 de mayo. La función monthsend() inicialmente divide el año en segmentos bimensuales. La transacción 8195 cae en el segmento entre el 1 de mayo y el 30 de junio. Como resultado, la función devuelve el primer milisegundo de este segmento, 30/06/2022 23:59:59.
Ejemplo 5: escenario
Vista general
Abra el editor de carga de datos y agregue el script de carga a continuación en una nueva pestaña.
En este ejemplo, un conjunto de datos se carga en una tabla denominada "Employee_Expenses". La tabla contiene los siguientes campos:
-
Employee IDs
-
Employee names
-
Las reclamaciones de gastos diarios promedio de cada empleado.
Al usuario final le gustaría tener un gráfico que muestre, por ID y nombre de empleado, la declaración de gastos estimada para el resto de un período de su elección. El año fiscal comienza en enero.
Script de carga
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
Cargue los datos y abra una nueva hoja.
Al comienzo del script de carga se crea una variable, vPeriod, que se vinculará al control de entrada de la variable.
Haga lo siguiente:
-
En el panel de activos, haga clic en Objetos personalizados.
-
Seleccione Qlik Dashboard bundle, cree un objeto Entrada de variables.
-
Escriba un título para el objeto gráfico.
-
En Variable, seleccione vPeriod como nombre y configure el objeto para que se muestre como un Menú desplegable.
-
En Valores, haga clic en Valores dinámicos. Escriba lo siguiente:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
Cree una nueva tabla y estos campos como dimensiones:
-
employee_id
-
employee_name
Para calcular el interés acumulado, cree esta medida:
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
Defina el Formato numérico de la medida en Moneda.
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 |
La función monthsend() utiliza lo que ha introducido el usuario como primer argumento y la fecha de hoy como segundo argumento. Esto devuelve la fecha de finalización del período de tiempo seleccionado por el usuario. Luego, la expresión devuelve el número de días que quedan del período de tiempo seleccionado al restar la fecha de hoy de esta fecha de finalización.
Luego, este valor se multiplica por la reclamación de gastos diaria promedio de cada empleado, para calcular el valor estimado de las reclamaciones que se espera que haga cada empleado en los días restantes de ese período.