monthsend - skript- och diagramfunktion
Denna funktion returnerar ett värde som motsvarar en tidsmarkör för den sista millisekunden i månaden, tvåmånadersperioden, kvartalet, fyramånadersperioden eller halvåret som innehåller ett basdatum. Det går även att hitta tidsmarkören för slutet av en föregående eller senare tidsperiod. Det förvalda utdataformatet är det DateFormat som har definierats i skriptet.
Syntax:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
Returnerad datatyp: dual
Argument | Beskrivning |
---|---|
n_months | Antalet månader som definierar perioden. Ett heltal eller uttryck vars resultat blir ett heltal som ska vara antingen: 1 (motsvaras av inmonth()-funktionen), 2 (tvåmånadersperiod), 3 (motsvaras av inquarter()-funktionen), 4 (fyramånadersperiod) eller 6 (halvår). |
date | Det datum eller den tidsmarkör som ska utvärderas. |
period_no | Periodens startpunkt kan flyttas med period_no, ett heltal, eller ett uttryck som resulterar i ett heltal, där värdet 0 anger den period som innehåller base_date. Negativa värden i period_no anger föregående perioder och positiva värden anger efterföljande perioder. |
first_month_of_year |
Om du vill arbeta med (budget)år som inte börjar i januari kan du ange ett värde mellan 2 och 12 i first_month_of_year. |
monthsend()-funktionen delar in året i segment baserat på det n_months-argument som tillhandahålls. Den utvärderar sedan vilket segment som varje tillhandahållet datum infaller och returnerar den sista millisekunden, i datumformat, för det segmentet. Funktionen kan returnera sluttidsmarkören från föregående eller följande segment och omdefiniera årets första månad.
Följande segment av året är tillgängliga i funktionen som n_month-argument:
Period | Antal månader |
---|---|
månad | 1 |
två månader | 2 |
kvartal | 3 |
fyra månader | 4 |
halvår | 6 |
Användning
monthsend()-funktionen används som en del av ett uttryck när användaren vill att beräkningen ska använda den del av månaden som har förflutit hittills. Användaren har möjlighet att välja önskad period genom att använda en variabel. monthsend() kan exempelvis tillhandahålla en inmatningsvariabel som ger användaren möjlighet att beräkna den totala räntan som ännu inte uppkommit under månaden, kvartalet eller halvåret.
Lokala inställningar
Om inget annat anges använder exemplen i detta ämne följande datumformat: MM/DD/ÅÅÅÅ. Datumformatet anges i SET DateFormat-satsen i datainläsningsskriptet. Förvald datumformatering kan vara annorlunda i ditt system, på grund av dina regionala inställningar och andra faktorer. Du kan ändra formaten i exemplen nedan så att det passar dina krav. Eller så kan du ändra formaten i ditt laddningsskript så att de matchar dessa exempel.
Standardregionalinställningar i appar baseras på de regionala systeminställningarna för datorn eller servern där Qlik Sense är installerad. Om Qlik Sense-servern du ansluter till är inställd på Sverige så kommer skriptredigeraren använda regionala inställningar för Sverige för datum, tid och valuta. Dessa regionala formatinställningar är inte relaterade till språket som visas i Qlik Sense användargränssnittet. Qlik Sense kommer att visas på samma språk som webbläsaren du använder.
Exempel | Resultat |
---|---|
monthsend(4, '07/19/2013') | Returnerar 08/31/2013. |
monthsend(4, '10/19/2013', -1) | Returnerar 08/31/2013. |
monthsend(4, '10/19/2013', 0, 2) | Returnerar 01/31/2014. Eftersom årets start blir månad 2. |
Exempel 1 – Grundläggande exempel
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
-
En datauppsättning som innehåller en uppsättning transaktioner för 2022 laddas i en tabell som heter Transactions.
-
Ett datumfält som anges i DateFormat-systemvariabeln i formatet (MM/DD/YYYY).
-
En föregående LOAD-sats som innehåller följande:
-
monthsend-funktionen som är inställd som bi_monthly_end-fält. Detta grupperar transaktioner i segment om två månader.
-
timestamp-funktionen som returnerar starttidsmarkören för segmentet för varje transaktion.
-
Laddningsskript
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
];
Resultat
Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:
-
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 |
bi_monthly_end-fältet skapas i föregående LOAD-sats med hjälp av funktionen monthsend(). Det första argumentet som tillhandahålls är 2, som delar upp året i tvåmånaderssegment. Det första argumentet som anges identifierar vilket fält som utvärderas.
Transaktion 8195 äger rum den 22 maj. monthsend()-funktionen delar initialt upp året i tvåmånaderssegment. Transaktion 8195 infaller i segmentet mellan 1 maj och 30 juni. Resultatet blir att funktionen returnerar den sista millisekunden i det här segmentet, 2022-06-30, 23:59:59.
Exempel 2 – period_no
Översikt
Samma datauppsättning och scenario som det första exemplet används.
I det här exemplet är uppgiften att skapa ett fält, prev_bi_monthly_end, som returnerar den första millisekunden i tvåmånaderssegmentet innan transaktionen ägde rum.
Laddningsskript
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
];
Resultat
Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:
-
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 |
Genom att använda -1 som period_no-argument i monthsend()-funktionen, efter att initialt ha delat upp ett år i tvåmånaderssegment, returnerar funktionen den sista millisekunden i det föregående tvåmånaderssegmentet till när en transaktion äger rum.
Transaktion 8195 faller in i segmentet mellan maj och juni. Resultatet blir att det föregående tvåmånaderssegmentet var mellan 1 mars och 30 april och att funktionen returnerar den sista millisekunden i detta segment, 2022-04-30 23:59:59.
Exempel 3 – first_month_of_year
Översikt
Samma datauppsättning och scenario som det första exemplet används.
I det här exemplet är organisationspolicyn att april är den första månaden i räkenskapsåret.
Skapa ett fält, bi_monthly_end, som grupperar transaktioner i tvåmånaderssegment och returnerar tidsmarkören för den sista millisekunden i segmentet för varje transaktion.
Laddningsskript
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
];
Resultat
Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:
-
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 |
Genom att använda 4 som first_month_of_year-argument i monthsend()-funktionen startar funktionen året den 1 april och delar sedan upp året i tvåmånaderssegment: apr-maj, jun-jul, aug-sep, okt-nov, dec-jan, feb-mar.
Transaktion 8195 ägde rum den 22 maj och faller in i segmentet mellan 1 april och 31 maj. Resultatet blir att funktionen returnerar den sista millisekunden i det här segmentet, 2022-05-31 23.59.59.
Exampel 4 – Diagramobjektexempel
Översikt
Samma datauppsättning och scenario som det första exemplet används. I det här exemplet är dock datauppsättningen oförändrad och har laddats i appen.
I det här exemplet är uppgiften att skapa en beräkning som grupperar transaktioner i tvåmånaderssegment och returnerar tidsmarkören för den sista millisekunden i segmentet för varje transaktion som ett mått i ett diagramobjekt för en app.
Laddningsskript
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
];
Resultat
Ladda data och öppna ett ark. Skapa en ny tabell och lägg till det här fältet som en dimension:
date
För att hämta tidsmarkören för den sista millisekunden i det tvåmånaderssegment då transaktionen tog plats skapar du följande mått:
-
=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 |
bi_monthly_end-fältet skapas som ett mått i diagramobjektet med hjälp av monthsend()-funktionen. Det första argumentet som tillhandahålls är 2, som delar upp året i tvåmånaderssegment. Det första argumentet som anges identifierar vilket fält som utvärderas.
Transaktion 8195 äger rum den 22 maj. monthsend()-funktionen delar initialt upp året i tvåmånaderssegment. Transaktion 8195 infaller i segmentet mellan 1 maj och 30 juni. Resultatet blir att funktionen returnerar den första millisekunden i det här segmentet, 2022-06-30 23.59.59.
Exempel 5 – Scenario
Översikt
Öppna skriptredigeraren och lägg till laddningsskriptet nedan i en ny flik.
I det här exemplet laddas en datauppsättning i en tabell som heter Employee_Expenses. Tabellen innehåller följande fält:
-
Anställnings-ID
-
Anställdas namn
-
Genomsnittliga dagliga kostnadsanspråk för varje anställd.
Slutanvändaren vill ha ett diagram som visar, efter anställnings-id och anställds namn, de beräknade kostnadsanspråken för resten av en vald period. Räkenskapsåret börjar i januari.
Laddningsskript
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
];
Resultat
Ladda data och öppna ett nytt ark.
I början av laddningsskriptet har en variabel, vPeriod, skapats som är kopplad till variabelinmatningskontrollen.
Gör följande:
-
Klicka på Anpassade objekti resurspanelen.
-
Välj Qlik instrumentpanelspaket och skapa ett variabelinmatningsobjekt.
-
Ange en titel för diagramobjektet.
-
Under Variabel väljer du vPeriod som namn och ställer in objektet så att det visas som en rullgardinsmeny.
-
Under Värden klickar du på Dynamiska värden. Ange följande:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
Skapa en ny tabell och lägg till dessa fält som dimensioner:
-
employee_id
-
employee_name
För att beräkna ackumulerad ränta skapar du detta mått:
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
Ange måttens Nummerformatering till Pengar.
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 |
monthsend()-funktionen använder användarinmatning som sitt första argument och dagens datum som sitt andra argument. Detta returnerar slutdatumet för den tidsperiod som användaren har valt. Uttrycket returnerar sedan antalet dagar som återstår i den valda perioden genom att subtrahera dagens datum från detta slutdatum.
Detta värde multipliceras sedan med det genomsnittliga dagliga kostnadsanspråket från varje anställd för att beräkna det uppskattade värdet av anspråk som varje anställd förväntas göra under de återstående dagarna i den här perioden.