weekstart - script- en diagramfunctie
Deze functie retourneert een waarde die overeenkomt met een tijdstempel van de eerste milliseconde van de eerste dag van de kalenderweek die date bevat. De standaarduitvoernotatie is de DateFormat die is ingesteld in het script.
Syntaxis:
WeekStart(date [, period_no[, first_week_day]])
Retourgegevenstypen: dual
De weekstart()-functie bepaalt welke week de datum in valt. Het retourneert vervolgens een tijdstempel, in datumnotatie, voor de eerste milliseconde van die week. De eerste dag van de week wordt bepaald door de omgevingsvariabele FirstWeekDay. Maar dit kan worden vervangen door het first_week_day-argument in de weekstart()-functie.
Argument | Beschrijving |
---|---|
date | De te evalueren datum of tijdstempel. |
period_no | shift is een geheel getal, waarbij de waarde 0 de week aangeeft die date bevat. Negatieve waarden in verschuiving geven voorgaande weken aan en positieve waarden geven volgende weken aan. |
first_week_day |
Geeft de dag op waarop de week begint. Bij weglating wordt de waarde van de variabele FirstWeekDay gebruikt. De mogelijke first_week_day-waarden zijn 0 voor maandag, 1 voor dinsdag, 2 voor woensdag, 3 voor donderdag, 4 voor vrijdag, 5 voor zaterdag en 6 voor zondag. Zie FirstWeekDay voor meer informatie over de systeemvariabele. |
Wanneer gebruiken
De functie weekstart() wordt doorgaans gebruikt als onderdeel van een uitdrukking als de gebruiker wil dat in de berekening het deel van de week wordt gebruikt dat al is geweest. Bijvoorbeeld: het zou kunnen worden gebruikt om het totale salaris te berekenen dat werknemers op een week tot dusver hebben verdiend.
Voorbeeld | Resultaat |
---|---|
weekstart('01/12/2013') | Retourneert 01/07/2013. |
weekstart('01/12/2013', -1 ) | Retourneert 11/31/2012. |
weekstart('01/12/2013', 0, 1) | Retourneert 01/08/2013. |
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 1 – geen aanvullende argumenten
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat:
-
Een gegevensset met een set transacties voor 2022 die wordt geladen in een tabel met de naam Transactions.
-
Het datumveld opgegeven in de DateFormat-systeemvariabele (MM/DD/YYYY) indeling.
-
Het maken van een veld, start_of_week, dat een tijdstempel voor het begin van de week retourneert waarin de transactie plaatsvond.
Load-script
SET FirstWeekDay=6;
Transactions:
Load
*,
weekstart(date) as start_of_week,
timestamp(weekstart(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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
Het veld start_of_week wordt gemaakt in de voorafgaande load-instructie met behulp van de functie weekstart() en geeft het datumveld door als het argument van de functie.
De weekstart()-functie identificeert aanvankelijk in welke week de datumwaarde valt en retourneert een tijdstempel voor de eerste milliseconde van die week.
Transactie 8191 vond plaats op 5 februari. De systeemvariabele FirstWeekDay stelt de eerste dag van de week in op een zondag. De weekstart()-functie identificeert dat de eerste zaterdag vóór 5 februari, en daarom het begin van de week, op 30 februari viel. Daarom retourneert de start_of_week-waarde voor die transactie de eerste milliseconde van die dag, die op 30 januari om 12:00:00 AM was.
Voorbeeld 2 – period_no
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat:
-
Dezelfde gegevensset en het scenario uit het eerste voorbeeld.
-
Het maken van een veld, previous_week_start, dat de tijdstempel voor het begin van het kwartaal retourneert voordat de transactie plaatsvond.
Load-script
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,-1) as previous_week_start,
timestamp(weekstart(date,-1)) as previous_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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
date
-
previous_week_start
-
previous_week_start_timestamp
date | previous_week_start | previous_week_start_timestamp |
---|---|---|
1/7/2022 | 12/26/2021 | 12/26/2021 12:00:00 AM |
1/19/2022 | 01/09/2022 | 1/9/2022 12:00:00 AM |
2/5/2022 | 01/23/2022 | 1/23/2022 12:00:00 AM |
2/28/2022 | 02/20/2022 | 2/20/2022 12:00:00 AM |
3/16/2022 | 03/06/2022 | 3/6/2022 12:00:00 AM |
4/1/2022 | 03/20/2022 | 3/20/2022 12:00:00 AM |
5/7/2022 | 04/24/2022 | 4/24/2022 12:00:00 AM |
5/16/2022 | 05/08/2022 | 5/8/2022 12:00:00 AM |
6/15/2022 | 06/05/2022 | 6/5/2022 12:00:00 AM |
6/26/2022 | 06/19/2022 | 6/19/2022 12:00:00 AM |
7/9/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/22/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/23/2022 | 07/10/2022 | 7/10/2022 12:00:00 AM |
7/27/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
8/2/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/8/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/19/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
9/26/2022 | 09/18/2022 | 9/18/2022 12:00:00 AM |
10/14/2022 | 10/02/2022 | 10/2/2022 12:00:00 AM |
10/29/2022 | 10/16/2022 | 10/16/2022 12:00:00 AM |
In dit geval, omdat een period_no van -1 werd gebruikt als het offset-argument in de weekstart()-functie, identificeert de functie eerst de week waarin de transacties plaatsvinden. Het kijkt dan een week eerder en identificeert de eerste milliseconde van die week.
Transactie 8196 vond plaats op 15 juni. De weekstart()-functie identificeert dat de week op 12 juni begint. Daarom begon de vorige week op 5 juni om 12:00:00 AM; dit is de waarde die voor het previous_week_start-veld wordt geretourneerd.
Voorbeeld 3 – first_week_day
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat dezelfde gegevensset en scenario als het eerste voorbeeld. Maar in dit voorbeeld moeten we dinsdag instellen als de eerste dag van de werkweek.
Load-script
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
weekstart(date,0,1) as start_of_week,
timestamp(weekstart(date,0,1)) 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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/04/2022 | 1/4/2022 12:00:00 AM |
1/19/2022 | 01/18/2022 | 1/18/2022 12:00:00 AM |
2/5/2022 | 02/01/2022 | 2/1/2022 12:00:00 AM |
2/28/2022 | 02/22/2022 | 2/22/2022 12:00:00 AM |
3/16/2022 | 03/15/2022 | 3/15/2022 12:00:00 AM |
4/1/2022 | 03/29/2022 | 3/29/2022 12:00:00 AM |
5/7/2022 | 05/03/2022 | 5/3/2022 12:00:00 AM |
5/16/2022 | 05/10/2022 | 5/10/2022 12:00:00 AM |
6/15/2022 | 06/14/2022 | 6/14/2022 12:00:00 AM |
6/26/2022 | 06/21/2022 | 6/21/2022 12:00:00 AM |
7/9/2022 | 07/05/2022 | 7/5/2022 12:00:00 AM |
7/22/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/23/2022 | 07/19/2022 | 7/19/2022 12:00:00 AM |
7/27/2022 | 07/26/2022 | 7/26/2022 12:00:00 AM |
8/2/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/8/2022 | 08/02/2022 | 8/2/2022 12:00:00 AM |
8/19/2022 | 08/16/2022 | 8/16/2022 12:00:00 AM |
9/26/2022 | 09/20/2022 | 9/20/2022 12:00:00 AM |
10/14/2022 | 10/11/2022 | 10/11/2022 12:00:00 AM |
10/29/2022 | 10/25/2022 | 10/25/2022 12:00:00 AM |
In dit geval geldt dat omdat het first_week_date-argument 1 wordt gebruikt in de weekstart()-functie, dinsdag als eerste dag van de week wordt ingesteld.
Transactie 8191 vond plaats op 5 februari. De weekstart()-functie identificeert dat de eerste dinsdag vóór deze datum, en daarom het begin van de week en geretourneerde waarde, op 1 februari om 12:00:00 AM viel.
Voorbeeld 4 – diagramobjectvoorbeeld
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat dezelfde gegevensset en scenario als het eerste voorbeeld.
In dit voorbeeld wordt de ongewijzigde gegevensset echter in de applicatie geladen. De berekening die een tijdstempel retourneert voor het begin van de week waarin de transacties plaatsvonden, wordt gemaakt als meting in een diagramobject van de toepassing.
Load-script
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
];
Resultaten
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg dit veld toe als dimensie: date.
Voeg de volgende metingen toe om het begin van de week waarin een transactie plaatsvindt te berekenen:
-
=weekstart(date)
-
=timestamp(weekstart(date))
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/02/2022 | 1/2/2022 12:00:00 AM |
1/19/2022 | 01/16/2022 | 1/16/2022 12:00:00 AM |
2/5/2022 | 01/30/2022 | 1/30/2022 12:00:00 AM |
2/28/2022 | 02/27/2022 | 2/27/2022 12:00:00 AM |
3/16/2022 | 03/13/2022 | 3/13/2022 12:00:00 AM |
4/1/2022 | 03/27/2022 | 3/27/2022 12:00:00 AM |
5/7/2022 | 05/01/2022 | 5/1/2022 12:00:00 AM |
5/16/2022 | 05/15/2022 | 5/15/2022 12:00:00 AM |
6/15/2022 | 06/12/2022 | 6/12/2022 12:00:00 AM |
6/26/2022 | 06/26/2022 | 6/26/2022 12:00:00 AM |
7/9/2022 | 07/03/2022 | 7/3/2022 12:00:00 AM |
7/22/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/23/2022 | 07/17/2022 | 7/17/2022 12:00:00 AM |
7/27/2022 | 07/24/2022 | 7/24/2022 12:00:00 AM |
8/2/2022 | 07/31/2022 | 7/31/2022 12:00:00 AM |
8/8/2022 | 08/07/2022 | 8/7/2022 12:00:00 AM |
8/19/2022 | 08/14/2022 | 8/14/2022 12:00:00 AM |
9/26/2022 | 09/25/2022 | 9/25/2022 12:00:00 AM |
10/14/2022 | 10/09/2022 | 10/9/2022 12:00:00 AM |
10/29/2022 | 10/23/2022 | 10/23/2022 12:00:00 AM |
De meting start_of_week wordt gemaakt in het diagramobject met behulp van de functie weekstart() en geeft het veld date door als het argument van de functie.
De weekstart()-functie identificeert aanvankelijk in welke week de datumwaarde valt en retourneert een tijdstempel voor de eerste milliseconde van die week.
Transactie 8191 vond plaats op 5 februari. De systeemvariabele FirstWeekDay stelt de eerste dag van de week in op een zondag. De weekstart()-functie identificeert dat de eerste zondag vóór 5 februari, en daarom het begin van de week, op 30 januari viel. De start_of_week-waarde voor die transactie retourneert daarom de eerste milliseconde van die dag, 30 januari om 12:00:00 AM.
Voorbeeld 5 – Scenario
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuw tabblad.
Het load-script bevat:
-
Een gegevensset die wordt geladen in een tabel met de naam Payroll.
-
Gegevens omvatten werknemers-id's, werknemersnamen en het gemiddelde dagsalaris dat elke werknemer verdient.
Werknemers beginnen hun werk op maandag en werken zes dagen per week. De FirstWeekDay-systeemvariabele mag niet worden aangepast.
De eindgebruiker wil een diagramobject dat de salarissen weergeeft op werknemers-id en werknemersnaam, die in de week tot dusver zijn verdiend.
Load-script
Payroll:
Load
*
Inline
[
employee_id,employee_name,day_rate
182,Mark, $150
183,Deryck, $125
184,Dexter, $125
185,Sydney,$270
186,Agatha,$128
];
Resultaten
Doe het volgende:
-
Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:
-
employee_id
-
employee_name
-
-
Maak vervolgens een meting om de salarissen te berekenen die in de week tot dusver zijn verdiend:
=if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6)
-
Stel de Getalnotatie van de meting in op Geld.
employee_id | employee_name | =if(today(1)-weekstart(today(1),0,0)<7,(today(1)-weekstart(today(1),0,0))*day_rate,day_rate*6) |
---|---|---|
182 | Mark | $600.00 |
183 | Deryck | $500.00 |
184 | Dexter | $500.00 |
185 | Sydney | $1080.00 |
186 | Agatha | $512.00 |
De weekstart()-functie die door de datum van vandaag als het eerste argument en 0 als het derde argument te gebruiken, maandag instelt als de eerste dag van de week en de begindatum van de huidige week retourneert. Door dat resultaat af te trekken van de huidige datum, retourneert de uitdrukking vervolgens het aantal dagen dat in deze week tot nu toe is verstreken.
De voorwaarde bepaalt vervolgens of er meer dan zes dagen deze week zijn geweest. Als dat zo is dan wordt het day_rate van de werknemer vermenigvuldigd met 6 dagen. Anders wordt het day_rate vermenigvuldigd met het aantal dagen tot nu toe deze week.