lunarweekstart - skript- och diagramfunktion
Denna funktion returnerar ett värde som motsvarar en tidsmarkör för den första millisekunden för den första dagen i den sjudagarsperiod som innehåller date. Sjudagarsperioder i Qlik Sense definieras genom att räkna 1 januari som den första dagen i veckan. Bortsett från årets sista vecka kommer varje vecka att ha exakt sju dagar.
Syntax:
LunarweekStart(date[, period_no[, first_week_day]])
Returnerad datatyp: dual
lunarweekstart()-funktionen avgör vilken sjudagarsperiod date infaller i. Den returnerar sedan en tidsstämpel, i datumformat, för den första millisekunden av den veckan.
Argument | Beskrivning |
---|---|
date | Det datum eller den tidsmarkör som ska utvärderas. |
period_no | period_no är ett heltal, eller ett uttryck som resulterar i ett heltal, där värdet 0 anger den sjudagarsperiod som innehåller date. Negativa värden i period_no anger föregående sjudagarsperioder och positiva värden anger efterföljande sjudagarsperioder. |
first_week_day | En förflyttning av startpunkten som kan vara större eller mindre än noll. Detta flyttar början på året med det angivna antalet dagar och/eller delar av en dag. |
Användning
lunarweekstart()-funktionen används vanligtvis som en del av ett uttryck när användaren vill att beräkningen ska använda den del av veckan som har förflutit hittills. Till skillnad från weekstart()-funktionen börjar veckan 1 januari varje nytt kalenderår och varje efterföljande vecka börjar sju dagar senare. lunarweekstart()-funktionen påverkas inte av systemvariabeln FirstWeekDay.
lunarweekstart() kan exempelvis användas för att beräkna den ränta som har ackumulerats under en vecka hittills.
Exempel | Resultat |
---|---|
lunarweekstart('01/12/2013') | Returnerar 01/08/2013. |
lunarweekstart('01/12/2013', -1) | Returnerar 01/01/2013. |
lunarweekstart('01/12/2013', 0, 1 ) | Returnerar 01/09/2013, eftersom inställningen first_week_day till 1 innebär att början av året ändras till 01/02/2013. |
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 1 – inga ytterligare argument
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
-
En datauppsättning som innehåller transaktioner för 2022 som läses in i en tabell som heter Transactions.
- Datumfältet tillhandahålls i formatet (ÅÅÅÅ-MM-DD) i systemvariabeln DateFormat.
-
Ett fält start_of_week skapas som returnerar en tidsmarkör för början av den sjudagarsperiod då transaktionen ägde rum.
Laddningsskript
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date) as start_of_week,
timestamp(lunarweekstart(date)) as start_of_week_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/16/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:
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
1/19/2022 | 01/15/2022 | 1/15/2022 12:00:00 AM |
2/5/2022 | 02/05/2022 | 2/5/2022 12:00:00 AM |
2/28/2022 | 02/26/2022 | 2/26/2022 12:00:00 AM |
3/16/2022 | 03/12/2022 | 3/12/2022 12:00:00 AM |
4/1/2022 | 03/26/2022 | 3/26/2022 12:00:00 AM |
5/7/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
5/16/2022 | 05/14/2022 | 5/14/2022 12:00:00 AM |
6/15/2022 | 06/11/2022 | 6/11/2022 12:00:00 AM |
6/26/2022 | 06/25/2022 | 6/25/2022 12:00:00 AM |
7/9/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/22/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/23/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
7/27/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/2/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/8/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
8/19/2022 | 08/13/2022 | 8/13/2022 12:00:00 AM |
9/26/2022 | 09/24/2022 | 9/24/2022 12:00:00 AM |
10/14/2022 | 10/08/2022 | 10/8/2022 12:00:00 AM |
10/29/2022 | 10/29/2022 | 10/29/2022 12:00:00 AM |
start_of_week-fältet skapades i den föregående load-satsen genom att använda lunarweekstart()-funktionen och skicka date-fältet som funktionens argument.
lunarweekstart()-funktionen identifierar vilken sjudagarsperiod datumvärdet infaller och returnerar en tidsstämpel för den första millisekunden av den veckan.
Transaktion 8189 ägde rum 19 januari. lunarweekstart()-funktionen identifierar att sjudagarsperioden börjar 15 januari. Därför returnerar start_of_week-värdet för denna transaktion den första millisekunden denna dag, vilket är 15 januari 12:00:00 AM.
Exempel 2 – period_no
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
-
Samma datauppsättning och scenario som i det första exemplet.
-
Ett fält previous_lunar_week_start skapas som returnerar tidsmarkören för början av sjudagarsperioden innan transaktionen ägde rum.
Laddningsskript
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date,-1) as previous_lunar_week_start,
timestamp(lunarweekstart(date,-1)) as previous_lunar_week_start_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/16/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
date | previous_lunar_week_start | previous_lunar_week_start_timestamp |
---|---|---|
1/7/2022 | 12/24/2021 | 12/24/2021 12:00:00 AM |
1/19/2022 | 01/08/2022 | 1/8/2022 12:00:00 AM |
2/5/2022 | 01/29/2022 | 1/29/2022 12:00:00 AM |
2/28/2022 | 02/19/2022 | 2/19/2022 12:00:00 AM |
3/16/2022 | 03/05/2022 | 3/5/2022 12:00:00 AM |
4/1/2022 | 03/19/2022 | 3/19/2022 12:00:00 AM |
5/7/2022 | 04/30/2022 | 4/30/2022 12:00:00 AM |
5/16/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
6/15/2022 | 06/04/2022 | 6/4/2022 12:00:00 AM |
6/26/2022 | 06/18/2022 | 6/18/2022 12:00:00 AM |
7/9/2022 | 07/02/2022 | 7/2/2022 12:00:00 AM |
7/22/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/23/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/27/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
8/2/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/8/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/19/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
9/26/2022 | 09/17/2022 | 9/17/2022 12:00:00 AM |
10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
10/29/2022 | 10/22/2022 | 10/22/2022 12:00:00 AM |
Eftersom ett period_no på -1 användes som förskjutningsargument i lunarweekstart()-funktionen i det här fallet, identifierar funktionen först den sjudagarsperiod då transaktionerna äger rum. Den skiftar sedan en vecka innan och identifierar den första millisekunden i den sjudagarsperioden.
Transaktion 8189 ägde rum 19 januari. lunarweekstart()-funktionen identifierar att sjudagarsperioden börjar 15 januari. Därför började den föregående sjudagarsperioden den 8 januari 12:00:00 AM; detta är det värde som returneras för previous_lunar_week_start-fältet.
Exempel 3 – first_week_day
Översikt
Öppna skriptredigeraren och lägg till laddningsskriptet nedan i en ny flik.
Laddningsskriptet innehåller samma datauppsättning och scenario som i det första exemplet. I det här exemplet ställer vi in sjudagarsperioderna till att börja 5 januari.
Laddningsskript
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date,0,4) as start_of_week,
timestamp(lunarweekstart(date,0,4)) as start_of_week_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/16/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:
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/05/2022 | 1/5/2022 12:00:00 AM |
1/19/2022 | 01/19/2022 | 1/19/2022 12:00:00 AM |
2/5/2022 | 02/02/2022 | 2/2/2022 12:00:00 AM |
2/28/2022 | 02/23/2022 | 2/23/2022 12:00:00 AM |
3/16/2022 | 03/16/2022 | 3/16/2022 12:00:00 AM |
4/1/2022 | 03/30/2022 | 3/30/2022 12:00:00 AM |
5/7/2022 | 05/04/2022 | 5/4/2022 12:00:00 AM |
5/16/2022 | 05/11/2022 | 5/11/2022 12:00:00 AM |
6/15/2022 | 06/15/2022 | 6/15/2022 12:00:00 AM |
6/26/2022 | 06/22/2022 | 6/22/2022 12:00:00 AM |
7/9/2022 | 07/06/2022 | 7/6/2022 12:00:00 AM |
7/22/2022 | 07/20/2022 | 7/20/2022 12:00:00 AM |
7/23/2022 | 07/20/2022 | 7/20/2022 12:00:00 AM |
7/27/2022 | 07/27/2022 | 7/27/2022 12:00:00 AM |
8/2/2022 | 07/27/2022 | 7/27/2022 12:00:00 AM |
8/8/2022 | 08/03/2022 | 8/3/2022 12:00:00 AM |
8/19/2022 | 08/17/2022 | 8/17/2022 12:00:00 AM |
9/26/2022 | 09/21/2022 | 9/21/2022 12:00:00 AM |
10/14/2022 | 10/12/2022 | 10/12/2022 12:00:00 AM |
10/29/2022 | 10/26/2022 | 10/26/2022 12:00:00 AM |
Eftersom first_week_date-argumentet 4 används i lunarweekstart()-funktionen i det här fallet förskjuts årets början från 1 januari till 5 januari.
Transaktion 8189 ägde rum 19 januari. Eftersom sjudagarsperioderna börjar 5 januari identifierar lunarweekstart()-funktionen att den sjudagarsperiod som innehåller 19 januari också börjar 19 januari 12:00:00 AM. Därför är detta det värde som returneras för start_of_week-fältet.
Exampel 4 – Diagramobjektexempel
Översikt
Öppna skriptredigeraren och lägg till laddningsskriptet nedan i en ny flik.
Laddningsskriptet innehåller samma datauppsättning och scenario som i det första exemplet.
I det här exemplet har dock den oförändrade datauppsättningen skickats till programmet. Beräkningen som returnerar en tidsmarkör för början av sjudagarsperioden då transaktionerna ägde rum skapas som ett mått i ett diagramobjekt för programmet.
Laddningsskript
Transactions:
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/16/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.
Lägg till följande mått:
=lunarweekstart(date)
=timestamp(lunarweekstart(date))
date | =lunarweekstart(date) | =timestamp(lunarweekstart(date)) |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
1/19/2022 | 01/15/2022 | 1/15/2022 12:00:00 AM |
2/5/2022 | 02/05/2022 | 2/5/2022 12:00:00 AM |
2/28/2022 | 02/26/2022 | 2/26/2022 12:00:00 AM |
3/16/2022 | 03/12/2022 | 3/12/2022 12:00:00 AM |
4/1/2022 | 03/26/2022 | 3/26/2022 12:00:00 AM |
5/7/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
5/16/2022 | 05/14/2022 | 5/14/2022 12:00:00 AM |
6/15/2022 | 06/11/2022 | 6/11/2022 12:00:00 AM |
6/26/2022 | 06/25/2022 | 6/25/2022 12:00:00 AM |
7/9/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/22/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/23/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
7/27/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/2/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/8/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
8/19/2022 | 08/13/2022 | 8/13/2022 12:00:00 AM |
9/26/2022 | 09/24/2022 | 9/24/2022 12:00:00 AM |
10/14/2022 | 10/08/2022 | 10/8/2022 12:00:00 AM |
10/29/2022 | 10/29/2022 | 10/29/2022 12:00:00 AM |
start_of_week-måttet skapades i ett diagramobjektet genom att använda lunarweekstart()-funktionen och skicka datumfältet som funktionens argument.
lunarweekstart()-funktionen identifierar vilken sjudagarsperiod datumvärdet infaller och returnerar en tidsstämpel för den sista millisekunden av den veckan.
Transaktion 8189 ägde rum 19 januari. lunarweekstart()-funktionen identifierar att sjudagarsperioden börjar 15 januari. Därför är start_of_week-värdet för denna transaktion den första millisekunden denna dag, vilket är 15 januari 12:00:00 AM.
Exempel 5 – Scenario
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
-
En datauppsättning som innehåller lånesaldon som laddas i en tabell som heter Loans.
-
Data som består av låne-ID:n, saldot vid veckans början och den enkla räntan som tas ut på varje lån per år.
Slutanvändaren vill ha ett diagramobjekt som visar, efter låne-ID, den aktuella räntan som har ackumulerats för varje lån hittills under veckan.
Laddningsskript
Loans:
Load
*
Inline
[
loan_id,start_balance,rate
8188,$10000.00,0.024
8189,$15000.00,0.057
8190,$17500.00,0.024
8191,$21000.00,0.034
8192,$90000.00,0.084
];
Resultat
Gör följande:
-
Ladda data och öppna ett ark. Skapa en ny tabell.
-
Lägg till följande fält som dimensioner.
-
loan_id
-
start_balance
-
-
Skapa därefter följande mått för att beräkna ackumulerad ränta:
=start_balance*(rate*(today(1)-lunarweekstart(today(1)))/365)
-
Ange måttens Nummerformatering till Pengar.
loan_id | start_balance | =start_balance*(rate*(today(1)- lunarweekstart (today(1)))/365) |
---|---|---|
8188 | $10000.00 | $15.07 |
8189 | $15000.00 | $128.84 |
8190 | $17500.00 | $63.29 |
8191 | $21000.00 | $107.59 |
8192 | $90000.00 | $1139.18 |
Genom att använda dagens datum som enda argument returnerar lunarweekstart()-funktionen slutdatumet för det aktuella året. Genom att subtrahera resultatet från det aktuella datumet returnerar uttrycket antalet dagar som har förflutit hittills denna vecka.
Detta värde multipliceras sedan med räntan och divideras med 365 för att returnera den effektiva räntan för perioden. Resultatet multipliceras sedan med lånets utgångssaldo för att returnera den upplupna räntan hittills denna vecka.