monthsend - script- en diagramfunctie
Deze functie retourneert een waarde die overeenkomt met de tijdstempel van de laatste milliseconde van de periode van een maand, twee maanden, kwartaal, vier maanden of half jaar die een basisdatum bevat. Het is tevens mogelijk om de tijdstempel voor het eind van een voorafgaande of volgende tijdsperiode te bepalen. De standaarduitvoernotatie is de DateFormat die is ingesteld in het script.
Syntaxis:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
Retourgegevenstypen: dual
Argument | Beschrijving |
---|---|
n_months | Het aantal maanden dat de periode definieert. Een geheel getal of uitdrukking die wordt herleid tot een geheel getal dat een van de volgende waarden moet hebben: 1 (equivalent aan de functie inmonth()), 2 (2 maanden), 3 (equivalent aan de functie inquarter()), 4 (tertiaal) of 6 (half jaar). |
date | De te evalueren datum of tijdstempel. |
period_no | De periode kan worden verschoven met period_no, een geheel getal of een uitdrukking die wordt herleid tot een geheel getal, waarbij de waarde 0 de periode aangeeft die base_date bevat. Negatieve waarden in period_no geven voorafgaande perioden aan en positieve waarden geven volgende perioden aan. |
first_month_of_year |
Als u wilt werken met (boek)jaren die niet in januari beginnen, geeft u een waarde op tussen 2 en 12 in first_month_of_year. |
De functie monthsend() verdeelt het jaar in segmenten op basis van het opgegeven n_months-argument. De functie bekijkt vervolgens in welk segment elke opgegeven datum valt en retourneert de laatste milliseconde van dat segment in datumnotitie. De functie kan de eindtijdstempel retourneren van voorgaande of volgende segmenten en kan de eerste maand van het jaar opnieuw instellen.
De volgende segmenten van het jaar zijn beschikbaar in de functie als n_month-argumenten:
Periode | Aantal maanden |
---|---|
maandelijks | 1 |
tweemaandelijks | 2 |
kwartaal | 3 |
tertiaal | 4 |
halfjaarlijks | 6 |
Wanneer gebruiken
De monthsend()-functie wordt gebruikt als onderdeel van een uitdrukking als de gebruiker wil dat in de berekening het deel van de maand wordt gebruikt dat al is geweest. De gebruiker heeft de mogelijkheid om met gebruik van een variabele, de gewenste periode te selecteren. De monthsend()-functie kan bijvoorbeeld een invoervariabele geven waarmee de gebruiker de totale hoeveelheid rente kan berekenen die nog niet is opgebouwd gedurende de maand, het kwartaal of het halve jaar.
Landinstellingen
Tenzij anders aangegeven, wordt in de voorbeelden in dit onderwerp de volgende datumindeling gebruikt: MM/DD/JJJJ. De datumopmaak wordt opgegeven in de opdracht SET DateFormat in uw script voor het laden van gegevens. De standaard datumindeling is mogelijk anders op uw systeem vanwege landinstellingen en andere factoren. U kunt de indelingen in de voorbeelden wijzigen zodat deze aansluiten op uw behoeften. Of u kunt de indelingen in uw load-script wijzigen zodat ze overeenkomen met deze voorbeelden.
Standaard landinstellingen in apps zijn gebaseerd op de regionale systeeminstellingen van de computer of server waarop Qlik Sense is geïnstalleerd. Als de Qlik Sense-server die u gebruikt is ingesteld op Zweden, gebruikt de editor voor laden van gegevens de Zweedse landinstellingen voor datums, tijd en valuta. Deze landinstellingen voor indelingen zijn niet gerelateerd aan de taal die wordt weergegeven in de gebruikersinterface van Qlik Sense. Qlik Sense wordt weergegeven in dezelfde taal als de browser die u gebruikt.
Voorbeeld | Resultaat |
---|---|
monthsend(4, '07/19/2013') | Retourneert 08/31/2013. |
monthsend(4, '10/19/2013', -1) | Retourneert 08/31/2013. |
monthsend(4, '10/19/2013', 0, 2) | Retourneert 01/31/2014. Omdat het begin van het jaar maand 2 wordt. |
Voorbeeld 1 – Basisvoorbeeld
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat:
-
Een gegevensverzameling met een set transacties voor 2022 wordt in de tabel Transactions geladen.
-
Een datumveld dat wordt weergegeven in de DateFormat-systeemvariabele met de datumnotitie (MM/DD/YYYY).
-
Een voorgaande load-instructie met:
-
De monthsend-functie die is ingesteld als het veld bi_monthly_end. De transacties van deze groep in tweemaandelijkse segmenten.
-
De timestamp-functie die de begintijdstempel van het segment voor iedere transactie retourneert.
-
Load-script
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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
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 |
Het veld bi_monthly_end wordt gemaakt in de vorige load-instructie met behulp van de functie monthsend(). Het eerste opgegeven argument is 2, waarbij het jaar wordt verdeeld in tweemaandelijkse segmenten. Het tweede argument geeft aan welk veld wordt geëvalueerd.
Transactie 8195 vindt plaats op 22 mei. De functie monthsend() verdeelt het jaar in eerste instantie in tweemaandelijkse segmenten. Transactie 8195 valt in het segment tussen 1 mei en 30 juni. Het resultaat is dat de functie de laatste milliseconde van dit segment retourneert: 06/30/2022 11:59:59 PM.
Voorbeeld 2 – period_no
Overzicht
Dezelfde gegevensverzameling en het scenario uit het eerste voorbeeld worden gebruikt.
In dit voorbeeld wordt een veld gemaakt, prev_bi_monthly_end, dat de eerste milliseconde retourneert van het tweemaandelijkse segment voordat de transactie plaatsvond.
Load-script
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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
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 |
Door -1 als het period_no-argument in de monthsend()-functie te gebruiken, nadat een jaar eerst in tweemaandelijkse segmenten is verdeeld, retourneert de functie de laatste milliseconde van het vorige tweemaandelijkse segment ten opzichte van wanneer een transactie plaatsvindt.
Transactie 8195 vindt plaats in het segment tussen mei en juni. Het resultaat is dat het vorige tweemaandelijkse segment tussen 1 maart en 30 april ligt en de functie daarom de laatste milliseconde van dit segment retourneert: 04/30/2022 11:59:59 PM.
Voorbeeld 3 – first_month_of_year
Overzicht
Dezelfde gegevensverzameling en het scenario uit het eerste voorbeeld worden gebruikt.
In dit voorbeeld is april volgens het organisatiebeleid de eerste maand van het financiële boekjaar.
Maak een veld, bi_monthly_end, dat transacties groepeert in tweemaandelijkse segmenten en de laatste milliseconde-tijdstempel van het segment voor elke transactie retourneert.
Load-script
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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
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 |
Door 4 te gebruiken als het first_month_of_year-argument in de monthsend()-functie, begint de functie het jaar op 1 april. Het verdeelt vervolgens het jaar in tweemaandelijkse segmenten: Apr-mei, jun-jul, aug-sep, okt-nov, dec-jan, feb-maa.
Transactie 8195 vond plaats op 22 mei en valt in het segment tussen 1 april en 31 mei. Het resultaat is dat de functie de laatste milliseconde van dit segment retourneert: 05/31/2022 11:59:59 PM.
Voorbeeld 4 – Diagramobjectvoorbeeld
Overzicht
Dezelfde gegevensverzameling en het scenario uit het eerste voorbeeld worden gebruikt. In dit voorbeeld is de gegevensverzameling echter niet gewijzigd en wordt in de app geladen.
In dit voorbeeld is de taak om een berekening te maken die transacties groepeert in tweemaandelijkse segmenten en de laatste milliseconde-tijdstempel van het segment voor iedere transactie retourneert als een meting in een diagramobject van een app.
Load-script
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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg dit veld toe als dimensie:
date
Maak de volgende metingen om de laatste milliseconde-tijdstempel van het tweemaandelijkse segment waarin de transactie plaatsvond op te halen:
-
=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 |
Het veld bi_monthly_end wordt in een diagramobject gemaakt als een meting met behulp van de functie monthsend(). Het eerste opgegeven argument is 2, dat het jaar verdeelt in tweemaandelijkse segmenten. Het tweede argument geeft aan welk veld wordt geëvalueerd.
Transactie 8195 vindt plaats op 22 mei. De functie monthsend() verdeelt het jaar in eerste instantie in tweemaandelijkse segmenten. Transactie 8195 valt in het segment tussen 1 mei en 30 juni. Het resultaat is dat de functie de eerste milliseconde van dit segment retourneert: 06/30/2022 11:59:59 PM.
Voorbeeld 5 – Scenario
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
In dit voorbeeld wordt een gegevensset geladen in de tabel ‘Employee_Expenses’. De tabel bevat de volgende velden:
-
Werknemers-id's
-
Werknemersnamen
-
De gemiddelde dagelijkse onkostendeclaraties van elke werknemer.
De eindgebruiker wil graag een diagram dat per werknemer-id en werknemersnaam de geschatte onkostendeclaraties voor de rest van een periode naar keuze weergeeft. Het boekjaar begint in januari.
Load-script
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
];
Resultaten
Laad de gegevens en open een nieuw werkblad.
Aan het begin van het load-script is een variabele, vPeriod, gemaakt die wordt gekoppeld aan het besturingselement voor variabeleninvoer.
Doe het volgende:
-
Klik in het bedrijfsmiddelenvenster op Aangepaste objecten.
-
Selecteer Qlik Dashboard-bundel en maak een Variabeleninvoer-object.
-
Voer een titel in voor het diagramobject.
-
Selecteer onder Variabele de optie vPeriod als de naam en stel het object in om als een Vervolgkeuzelijst te worden weergegeven.
-
Klik onder Waarden op Dynamische waarden. Voer het volgende in:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
Maak een nieuwe tabel en deze velden als dimensies:
-
employee_id
-
employee_name
Maak deze meting om de opgebouwde rente te berekenen:
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
Stel de Getalnotatie van de meting in op Geld.
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 |
De monthsend()-functie gebruikt de invoer van de gebruiker als het eerste argument en de datum van vandaag als het tweede argument. Dit retourneert de einddatum voor de door de gebruiker geselecteerde tijdperiode. De uitdrukking retourneert vervolgens het aantal dagen dat nog resteert in de geselecteerde periode door de datum van vandaag af te trekken van deze einddatum.
Deze waarde wordt vervolgens vermenigvuldigd met de gemiddelde dagelijkse onkostendeclaratie van elke werknemer om de geschatte waarde te berekenen van de declaraties die elke werknemer naar verwachting in de resterende dagen van deze periode zal indienen.