monthsend - funzione dello script e del grafico
Questa funzione restituisce un valore corrispondente a un timestamp recante l'ultimo millisecondo del mese, del bimestre, del trimestre, del quadrimestre o del semestre contenente una data di base. È inoltre possibile individuare il timestamp per la fine di un periodo di tempo precedente o successivo. Il formato di output predefinito è il formato DateFormat impostato nello script.
Sintassi:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
Tipo di dati restituiti: duale
Argomento | Descrizione |
---|---|
n_months | Il numero di mesi che definisce il periodo. Un numero intero o un'espressione la cui risoluzione è un numero intero corrispondente a: 1 (equivalente alla funzione inmonth()), 2 (bimestre), 3 (equivalente alla funzione inquarter()), 4 (quadrimestre) o 6 (semestre). |
date | La data o la data e ora da valutare. |
period_no | Il periodo può essere differito mediante period_no, un numero intero, o un'espressione la cui risoluzione è un numero intero, in cui il valore 0 indica il periodo che contiene base_date. I valori negativi di period_no indicano i periodi precedenti, mentre i valori positivi indicano i periodi successivi. |
first_month_of_year |
Se si intende utilizzare anni (fiscali) che non iniziano a gennaio, indicare un valore compreso tra 2 e 12 in first_month_of_year. |
La funzione monthsend() divide l'anno in segmenti in base all'argomento n_months fornito. Quindi valuta in quale segmento rientra ogni data fornita e restituisce l'ultimo millisecondo, in formato data, di quel segmento. La funzione può restituire il timestamp finale dei segmenti precedenti o successivi e ridefinire il primo mese dell'anno.
I seguenti segmenti dell'anno sono disponibili nella funzione come argomenti di n_month.
Periodo | Numero di mesi |
---|---|
mese | 1 |
bimestre | 2 |
trimestre | 3 |
quattro mesi | 4 |
semestre | 6 |
Casi di utilizzo
La funzione monthsend() viene utilizzata come parte di un'espressione quando l'utente desidera che il calcolo utilizzi la frazione di mese trascorsa fino a quel momento. L'utente ha la possibilità, tramite una variabile, di selezionare il periodo di sua scelta. Ad esempio, il monthsend() può fornire una variabile di input che consenta all'utente di calcolare il totale degli interessi non ancora maturati durante il mese, il trimestre o il semestre.
Impostazioni locali
Se non diversamente specificato, gli esempi di questo argomento utilizzano il seguente formato di data: MM/GG/AAAA. Il formato della data viene specificato nell'istruzione SET DateFormat nello script di caricamento dei dati. La formattazione predefinita della data potrebbe essere diversa nel proprio sistema, a causa delle impostazioni regionali e di altri fattori. È possibile modificare i formati degli esempi seguenti in base alle proprie esigenze. In alternativa, è possibile modificare i formati nel proprio script di caricamento per adattarli a questi esempi.
Le impostazioni regionali predefinite delle app si basano sulle impostazioni regionali del sistema del computer o del server in cui risulta installato Qlik Sense. Se il server Qlik Sense a cui si accede è impostato in Svezia, l'editor caricamento dati utilizzerà le impostazioni regionali svedesi per date, ora e valuta. Queste impostazioni di formato regionale non riguardano la lingua visualizzata nell'interfaccia utente Qlik Sense. Qlik Sense verrà visualizzato nella stessa lingua del browser utilizzato.
Esempio | Risultato |
---|---|
monthsend(4, '07/19/2013') | Restituisce 08/31/2013. |
monthsend(4, '10/19/2013', -1) | Restituisce 08/31/2013. |
monthsend(4, '10/19/2013', 0, 2) | Restituisce 01/31/2014. Poiché l'inizio dell'anno corrisponde al mese 2. |
Esempio 1 - Esempio di base
Panoramica
Aprire l'editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.
Lo script di caricamento contiene:
-
Un set di dati contenente un insieme di transazioni per il 2022 viene caricato in una tabella denominata 'Transactions'.
-
Un campo data fornito nel formato (MM/DD/YYYY) della variabile di sistema DateFormat.
-
Un'istruzione di caricamento precedente contenente:
-
La funzione monthsend impostata come campo, ‘bi_monthly_end’. Questo raggruppa le transazioni in segmenti bimestrali.
-
La funzione timestamp che restituisce il timestamp iniziale del segmento per ogni transazione.
-
Script di caricamento
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
];
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:
-
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 |
Il campo 'bi_monthly_end' viene creato nell'istruzione di caricamento precedente utilizzando la funzione monthsend(). Il primo argomento fornito è 2, dividendo l'anno in segmenti bimestrali. Il primo argomento identifica il campo da valutare.
La transazione 8195 avviene il 22 maggio. La funzione monthsend() divide inizialmente l'anno in segmenti bimestrali. La transazione 8195 rientra nel segmento tra il 1 maggio e il 30 giugno. Di conseguenza, la funzione restituisce l'ultimo millisecondo di questo segmento, il 30/06/2022 alle 23:59:59.
Esempio 2 - period_no
Panoramica
Vengono utilizzati lo stesso set di dati e lo stesso scenario del primo esempio.
In questo esempio, il compito è quello di creare un campo, 'prev_bi_monthly_end', che restituisca il primo millisecondo del segmento bimestrale prima che avvenga la transazione.
Script di caricamento
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
];
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:
-
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 |
Utilizzando -1 come argomento period_no della funzione monthsend(), dopo aver inizialmente diviso un anno in segmenti bimestrali, la funzione restituisce l'ultimo millisecondo del segmento bimestrale precedente al momento in cui avviene una transazione.
La transazione 8195 è stata effettuata nel segmento tra maggio e giugno. Di conseguenza, il segmento bimestrale precedente era compreso tra il 1° marzo e il 30 aprile e quindi la funzione restituisce l'ultimo millisecondo di questo segmento, il 30/04/2022 alle 23:59:59.
Esempio 3 – first_month_of_year
Panoramica
Vengono utilizzati lo stesso set di dati e lo stesso scenario del primo esempio.
In questo esempio, il criterio organizzativo prevede che aprile sia il primo mese dell'anno finanziario.
Creare un campo, bi_monthly_end, che raggruppa le transazioni in segmenti bimestrali e restituisce il timestamp dell'ultimo millisecondo di quel segmento per ogni transazione.
Script di caricamento
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
];
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:
-
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 |
Utilizzando 4 come argomento first_month_of_year nella funzione monthsend(), la funzione inizia l'anno il 1° aprile, quindi divide l'anno in segmenti bimestrali: Apr-Mag, Giu-Lug, Ago-Set, Ott-Nov, Dic-Gen, Feb-Mar.
La transazione 8195 è avvenuta il 22 maggio e rientra nel segmento tra il 1 aprile e il 31 maggio. Di conseguenza, la funzione restituisce l'ultimo millisecondo di questo segmento, il 31/05/2022 alle 23:59:59.
Esempio 4 - Esempio di oggetto grafico
Panoramica
Vengono utilizzati lo stesso set di dati e lo stesso scenario del primo esempio. Tuttavia, in questo esempio, il set di dati è invariato e viene caricato nell'app.
In questo esempio, si tratta di creare un calcolo che raggruppi le transazioni in segmenti bimestrali e restituisca il timestamp dell'ultimo millisecondo del segmento per ciascuna transazione come misura in un oggetto grafico di un'app.
Script di caricamento
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
];
Risultati
Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere questo campo come dimensione:
date
Per ottenere il timestamp dell'ultimo millisecondo del segmento bimestrale in cui è avvenuta la transazione, creare le seguenti misure:
-
=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 |
Il campo 'bi_monthly_end' viene creato come misura nell'oggetto grafico mediante l'utilizzo della funzione monthsend(). Il primo argomento fornito è 2, che divide l'anno in segmenti bimestrali. Il primo argomento identifica il campo da valutare.
La transazione 8195 avviene il 22 maggio. La funzione monthsend() divide inizialmente l'anno in segmenti bimestrali. La transazione 8195 rientra nel segmento tra il 1 maggio e il 30 giugno. Di conseguenza, la funzione restituisce il primo millisecondo di questo segmento, il 30/06/2022 alle 23:59:59.
Esempio 5 – Scenario
Panoramica
Aprire l'editor di caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.
In questo esempio, un set di dati è caricato in una tabella denominata "Employee_Expenses". La tabella contiene i seguenti campi:
-
ID dipendenti
-
Nomi dipendenti
-
La media delle richieste di rimborso spese giornaliero di ciascun dipendente.
L'utente finale desidera un grafico che visualizzi, in base all'id e al nome del dipendente, la spesa stimata per il resto di un periodo di propria scelta. L'esercizio finanziario inizia a gennaio.
Script di caricamento
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
];
Risultati
Caricare i dati e aprire un nuovo foglio.
All'inizio dello script di caricamento, viene creata una variabile vPeriod, legata al controllo dell'input variabile.
Procedere come segue:
-
Nel pannello delle risorse, fare clic su Oggetti personalizzati.
-
Selezionare Qlik Dashboard bundle e creare un oggetto Input variabile.
-
Immettere un titolo per l'oggetto grafico.
-
In Variabile, selezionare vPeriod come nome e impostare l'oggetto in modo che venga visualizzato come Elenco a discesa.
-
Sotto Valori, fare clic sui valori Dinamici. Inserire quanto segue:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
Creare una nuova tabella con tali campi come dimensioni:
-
employee_id
-
employee_name
Per calcolare gli interessi accumulati, creare questa misura:
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
Impostare la misura Formattazione numero su Denaro.
employee_id | employee_name | =floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Contrassegno | $1410.00 |
183 | Deryck | $1175.00 |
184 | Dexter | $1175.00 |
185 | Sydney | $2538.00 |
186 | Agatha | $1692.00 |
La funzione monthsend() utilizza l'input dell'utente come primo argomento e la data odierna come secondo argomento. Restituisce la data di fine del periodo di tempo selezionato dall'utente. Quindi, l'espressione restituisce il numero di giorni che rimangono nel periodo di tempo selezionato, sottraendo la data odierna da questa data finale.
Questo valore viene quindi moltiplicato per la media delle richieste di rimborso spese giornaliere di ciascun dipendente per calcolare il valore stimato delle richieste che ogni dipendente dovrebbe presentare durante i giorni rimanenti di questo periodo.