lunarweekend - skript- och diagramfunktion
Denna funktion returnerar ett värde som motsvarar en tidsmarkör för den sista millisekunden för den sista 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:
LunarweekEnd(date[, period_no[, first_week_day]])
Returnerad datatyp: dual
lunarweekend()-funktionen avgör vilken sjudagarsperiod date infaller i. Den returnerar sedan en tidsstämpel, i datumformat, för den sista 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
lunarweekend()-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 ännu inte har inträffat. Till skillnad från weekend()-funktionen kommer den sista sjudagarsperioden i varje kalenderperiod att sluta 31 december. lunarweekend()-funktionen kan exempelvis användas för att beräkna ränta som fortfarande återstår under veckan.
Exempel | Resultat |
---|---|
lunarweekend('01/12/2013') | Returnerar 01/14/2013 23:59:59. |
lunarweekend('01/12/2013', -1) | Returnerar 01/07/2013 23:59:59. |
lunarweekend('01/12/2013', 0, 1) | Returnerar 01/15/2013 23:59:59. |
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 end_of_week skapas som returnerar en tidsmarkör för slutet av den sjudagarsperiod då transaktionen ägde rum.
Laddningsskript
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekend(date) as end_of_week,
timestamp(lunarweekend(date)) as end_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
-
end_of_week
-
end_of_week_timestamp
date | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/07/2022 | 1/7/2022 11:59:59 PM |
1/19/2022 | 01/21/2022 | 1/21/2022 11:59:59 PM |
2/5/2022 | 02/11/2022 | 2/11/2022 11:59:59 PM |
2/28/2022 | 03/04/2022 | 3/4/2022 11:59:59 PM |
3/16/2022 | 03/18/2022 | 3/18/2022 11:59:59 PM |
4/1/2022 | 04/01/2022 | 4/1/2022 11:59:59 PM |
5/7/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
5/16/2022 | 05/20/2022 | 5/20/2022 11:59:59 PM |
6/15/2022 | 06/17/2022 | 6/17/2022 11:59:59 PM |
6/26/2022 | 07/01/2022 | 7/1/2022 11:59:59 PM |
7/9/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
7/22/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
7/23/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
7/27/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
8/2/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
8/8/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
8/19/2022 | 08/19/2022 | 8/19/2022 11:59:59 PM |
9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
10/14/2022 | 10/14/2022 | 10/14/2022 11:59:59 PM |
10/29/2022 | 11/04/2022 | 11/4/2022 11:59:59 PM |
end_of_week-fältet skapades i den föregående load-satsen genom att använda lunarweekend()-funktionen och skicka date-fältet som funktionens argument.
lunarweekend()-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. lunarweekend()-funktionen identifierar att sjudagarsperioden börjar 15 januari. Därför returnerar end_of_week-värdet för denna transaktion den sista millisekunden i sjudagarsperioden, vilket är 21 januari 23:59:59.
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_end skapas som returnerar tidsmarkören för slutet av sjudagarsperioden innan transaktionen ägde rum.
Laddningsskript
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekend(date,-1) as previous_lunar_week_end,
timestamp(lunarweekend(date,-1)) as previous_lunar_week_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/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
-
previous_lunar_week_end
-
previous_lunar_week_end_timestamp
date | previous_lunar_week_end | previous_lunar_week_end_timestamp |
---|---|---|
1/7/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
1/19/2022 | 01/14/2022 | 1/14/2022 11:59:59 PM |
2/5/2022 | 02/04/2022 | 2/4/2022 11:59:59 PM |
2/28/2022 | 02/25/2022 | 2/25/2022 11:59:59 PM |
3/16/2022 | 03/11/2022 | 3/18/2022 11:59:59 PM |
4/1/2022 | 03/25/2022 | 3/25/2022 11:59:59 PM |
5/7/2022 | 05/06/2022 | 5/6/2022 11:59:59 PM |
5/16/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
6/15/2022 | 06/10/2022 | 6/10/2022 11:59:59 PM |
6/26/2022 | 06/24/2022 | 6/24/2022 11:59:59 PM |
7/9/2022 | 07/08/2022 | 7/8/2022 11:59:59 PM |
7/22/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
7/23/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
7/27/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
8/2/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
8/8/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
8/19/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
9/26/2022 | 09/23/2022 | 9/23/2022 11:59:59 PM |
10/14/2022 | 10/07/2022 | 10/7/2022 11:59:59 PM |
10/29/2022 | 10/28/2022 | 10/28/2022 11:59:59 PM |
Eftersom ett period_no på -1 användes som förskjutningsargument i lunarweekend()-funktionen i det här fallet identifierar funktionen först den sjudagarsperiod då transaktionerna ägde rum. Den skiftar sedan en vecka innan och identifierar den sista millisekunden i den sjudagarsperioden.
Transaktion 8189 ägde rum 19 januari. lunarweekend()-funktionen identifierar att sjudagarsperioden börjar 15 januari. Därför började den föregående sjudagarsperioden den 8 januari och slutade den 14 januari 23:59:59; detta är det värde som returneras för previous_lunar_week_end-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
*,
lunarweekend(date,0,4) as end_of_week,
timestamp(lunarweekend(date,0,4)) as end_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
-
end_of_week
-
end_of_week_timestamp
date | end_of_week | end_of_week_timestamp |
---|---|---|
1/7/2022 | 01/11/2022 | 1/11/2022 11:59:59 PM |
1/19/2022 | 01/25/2022 | 1/25/2022 11:59:59 PM |
2/5/2022 | 02/08/2022 | 2/8/2022 11:59:59 PM |
2/28/2022 | 03/01/2022 | 3/1/2022 11:59:59 PM |
3/16/2022 | 03/22/2022 | 3/22/2022 11:59:59 PM |
4/1/2022 | 04/05/2022 | 4/5/2022 11:59:59 PM |
5/7/2022 | 05/10/2022 | 5/10/2022 11:59:59 PM |
5/16/2022 | 05/17/2022 | 5/17/2022 11:59:59 PM |
6/15/2022 | 06/21/2022 | 6/21/2022 11:59:59 PM |
6/26/2022 | 06/28/2022 | 6/28/2022 11:59:59 PM |
7/9/2022 | 07/12/2022 | 7/12/2022 11:59:59 PM |
7/22/2022 | 07/26/2022 | 7/26/2022 11:59:59 PM |
7/23/2022 | 07/26/2022 | 7/26/2022 11:59:59 PM |
7/27/2022 | 08/02/2022 | 8/2/2022 11:59:59 PM |
8/2/2022 | 08/02/2022 | 8/2/2022 11:59:59 PM |
8/8/2022 | 08/09/2022 | 8/9/2022 11:59:59 PM |
8/19/2022 | 08/23/2022 | 8/23/2022 11:59:59 PM |
9/26/2022 | 09/27/2022 | 9/27/2022 11:59:59 PM |
10/14/2022 | 10/18/2022 | 10/18/2022 11:59:59 PM |
10/29/2022 | 11/01/2022 | 11/1/2022 11:59:59 PM |
Eftersom first_week_date-argumentet 4 används i lunarweekend()-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 lunarweekend()-funktionen att den sjudagarsperiod som innehåller 19 januari också börjar 19 januari. Därför inträffar slutet av den sjudagarsperioden 25 januari 23:59:59; detta är det värde som returneras för end_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 slutet 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:
=lunarweekend(date)
=timestamp(lunarweekend(date))
date | =lunarweekend(date) | =timestamp(lunarweekend(date)) |
---|---|---|
1/7/2022 | 01/07/2022 | 1/7/2022 11:59:59 PM |
1/19/2022 | 01/21/2022 | 1/21/2022 11:59:59 PM |
2/5/2022 | 02/11/2022 | 2/11/2022 11:59:59 PM |
2/28/2022 | 03/04/2022 | 3/4/2022 11:59:59 PM |
3/16/2022 | 03/18/2022 | 3/18/2022 11:59:59 PM |
4/1/2022 | 04/01/2022 | 4/1/2022 11:59:59 PM |
5/7/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
5/16/2022 | 05/20/2022 | 5/20/2022 11:59:59 PM |
6/15/2022 | 06/17/2022 | 6/17/2022 11:59:59 PM |
6/26/2022 | 07/01/2022 | 7/1/2022 11:59:59 PM |
7/9/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
7/22/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
7/23/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
7/27/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
8/2/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
8/8/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
8/19/2022 | 08/19/2022 | 8/19/2022 11:59:59 PM |
9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
10/14/2022 | 10/14/2022 | 10/14/2022 11:59:59 PM |
10/29/2022 | 11/04/2022 | 11/4/2022 11:59:59 PM |
end_of_week-måttet skapas i diagramobjektet genom att använda lunarweekend()-funktionen och skicka date-fältet som funktionens argument.
lunarweekend()-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. lunarweekend()-funktionen identifierar att sjudagarsperioden börjar 15 januari. Därför returnerar end_of_week-värdet för denna transaktion den sista millisekunden i sjudagarsperioden, vilket är 21 januari 23:59:59.
Exempel 5 – Scenario
Översikt
Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.
Laddningsskriptet innehåller:
-
En datauppsättning laddas i en tabell som heter Employee_Expenses.
-
Anställnings-ID, anställds namn och de genomsnittliga dagliga kostnadsanspråken för varje anställd.
Slutanvändaren vill ha ett diagramobjekt som visar de beräknade kostnadsanspråken som fortfarande återstår för resten av sjudagarsperioden, efter anställnings-ID och anställds namn.
Laddningsskript
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
Gör följande:
-
Ladda data och öppna ett ark. Skapa en ny tabell.
-
Lägg till följande fält som dimensioner.
-
employee_id
-
employee_name
-
-
Skapa därefter följande mått för att beräkna ackumulerad ränta:
=(lunarweekend(today(1))-today(1))*avg_daily_claim
-
Ange måttens Nummerformatering till Pengar.
employee_id | employee_name | =(lunarweekend(today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $75.00 |
183 | Deryck | $62.50 |
184 | Dexter | $62.50 |
185 | Sydney | $135.00 |
186 | Agatha | $90.00 |
lunarkweekend()-funktionen returnerar slutdatumet för den aktuella sjudagarsperioden genom att använda dagens datum som enda argument. Sedan returnerar uttrycket antalet dagar som återstår av denna vecka genom att subtrahera dagens datum från årets 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 den återstående sjudagarsperioden.