lunarweekstart - Skript- und Diagrammfunktion
Diese Funktion liefert einen Wert, der dem Zeitstempel der ersten Millisekunde des ersten Tags der Mondwoche entspricht, in der date liegt. Bei Mondwochen in Qlik Sense wird der 1. Januar als der erste Tag der Woche gezählt. Mit Ausnahme der letzten Woche des Jahres umfasst jede Woche genau sieben Tage.
Syntax:
LunarweekStart(date[, period_no[, first_week_day]])
Rückgabe Datentyp: dual
Die Funktion lunarweekstart() bestimmt, in welche Mondwoche date fällt. Sie gibt dann einen Zeitstempel im Datumsformat für die erste Millisekunde dieser Woche zurück.
Argument | Beschreibung |
---|---|
date | Datum oder Zeitstempel für die Evaluierung. |
period_no | period_no ist eine ganze Zahl oder eine Formel, die eine ganze Zahl ergibt, wobei 0 für die Mondwoche steht, die date enthält. Negative Werte von period_no stehen für vorangehende, positive Werte für nachfolgende Mondwochen. |
first_week_day | Ein Startwert, der größer oder kleiner als Null sein kann. Dadurch wird der Beginn des Jahres um die angegebene Anzahl an Tagen und/oder den Bruchteil eines Tages verschoben. |
Verwendung
Die Funktion lunarweekstart() wird in der Regel als Teil einer Formel verwendet, wenn in der Berechnung der Teil der Woche verwendet werden soll, der bereits verstrichen ist. Anders als bei der Funktion weekstart() beginnen beim Start eines neuen Kalenderjahres die Wochen am 1. Januar, und jede nachfolgende Woche beginnt sieben Tage später. Die Funktion lunarweekstart() ist nicht von der Systemvariablen FirstWeekDay betroffen.
Zum Beispiel kann lunarweekstart() verwendet werden, um die Zinsen zu berechnen, die in einem Jahr bis dato aufgelaufen sind.
Beispiel | Ergebnis |
---|---|
lunarweekstart('01/12/2013') | Gibt 01/08/2013 zurück. |
lunarweekstart('01/12/2013', -1) | Gibt 01/01/2013 zurück. |
lunarweekstart('01/12/2013', 0, 1 ) | Gibt 01/09/2013 zurück, weil das Festlegen von first_week_day auf 1 bedeutet, dass der Anfang des Jahres auf den 01/02/2013 geändert wird. |
Regionaleinstellungen
Sofern nicht anders angegeben, verwenden die Beispiele in diesem Thema das folgende Datumsformat: MM/TT/JJJJ. Das Datumsformat wird in der Anweisung SET DateFormat in Ihrem Datenladeskript angegeben. Das Standarddatumsformat in Ihrem System kann aufgrund Ihrer regionalen Einstellungen und anderer Faktoren abweichen. Sie können die Formate in den Beispielen unten Ihren Anforderungen entsprechend ändern. Sie können auch die Formate in Ihrem Ladeskript entsprechend den Beispielen ändern.
Die standardmäßigen regionalen Einstellungen in Apps basieren auf den regionalen Systemeinstellungen der Computer oder Server, auf denen Qlik Sense installiert ist. Wenn der Qlik Sense-Server, auf den Sie zugreifen, auf Schweden festgelegt ist, verwendet der Dateneditor die schwedischen regionalen Einstellungen für Datums-, Uhrzeit- und Währungsangaben. Diese Einstellungen im regionalen Format hängen nicht mit der Sprache zusammen, die in der Benutzeroberfläche von Qlik Sense angezeigt wird. Qlik Sense wird in der gleichen Sprache wie der von Ihnen verwendete Browser angezeigt.
Beispiel 1 – keine zusätzlichen Argumente
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript umfasst:
-
Ein Datensatz enthält eine Reihe von Transaktionen für 2022 und wird in eine Tabelle namens Transactions geladen.
- Datumsfeld, das im Format der Systemvariablen DateFormat (MM/TT/JJJJ) bereitgestellt wird
-
Erstellung eines Felds start_of_week, das den Zeitstempel für den Start der Mondwoche zurückgibt, in der die Transaktionen stattfanden
Ladeskript
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
];
Ergebnisse
Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:
-
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 |
Das Feld start_of_week wird in der vorangehenden load-Anweisung erstellt, indem die Funktion lunarweekstart() verwendet und das Feld date als Argument der Funktion übergeben wird.
Die Funktion lunarweekstart() identifiziert, in welche Mondwoche das Datum fällt, und gibt einen Zeitstempel für die erste Millisekunde dieser Woche zurück.
Transaktion 8189 fand am 19. Januar statt. Die Funktion lunarweekstart() identifiziert, dass die Mondwoche am 15. Januar beginnt. Daher gibt der Wert für start_of_week dieser Transaktion die erste Millisekunde dieses Tages zurück, also den 15. Januar um 12:00:00 AM.
Beispiel 2 – period_no
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript umfasst:
-
Derselbe Datensatz und dasselbe Szenario wie im ersten Beispiel.
-
Es wird ein Feld previous_lunar_week_start erstellt, das den Zeitstempel für den Start der Mondwoche vor der Woche zurückgibt, in der die Transaktion stattfand.
Ladeskript
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
];
Ergebnisse
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 |
Da in diesem Fall eine period_no von -1 als Versatzargument in der Funktion lunarweekstart() verwendet wurde, identifiziert die Funktion zuerst die Mondwoche, in der die Transaktionen stattfinden. Dann geht sie eine Woche zurück und identifiziert die erste Millisekunde dieser Mondwoche.
Transaktion 8189 fand am 19. Januar statt. Die Funktion lunarweekstart() identifiziert, dass die Mondwoche am 15. Januar beginnt. Daher begann die vorherige Mondwoche am 8. Januar um 12:00:00 AM; dies ist der Wert, der für das Feld previous_lunar_week_start zurückgegeben wird.
Beispiel 3 – first_week_day
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript verwendet den gleichen Datensatz und das gleiche Szenario wie das erste Beispiel. In diesem Beispiel wird für den Beginn der Mondwochen der 5. Januar festgelegt.
Ladeskript
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
];
Ergebnisse
Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:
-
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 |
Da in diesem Fall das Argument first_week_date von 4 in der Funktion lunarweekstart() verwendet wird, wird der Start des Jahres vom 1. auf den 5. Januar verschoben.
Transaktion 8189 fand am 19. Januar statt. Da Mondwochen am 5. Januar beginnen, identifiziert die Funktion lunarweekstart(), dass die Mondwoche, die den 19. Januar enthält, auch am 19. Januar um 12:00:00 AM beginnt. Daher ist dies der Wert, der für das Feld start_of_week zurückgegeben wird.
Beispiel 4 – Diagrammobjektbeispiel
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript verwendet den gleichen Datensatz und das gleiche Szenario wie das erste Beispiel.
In diesem Beispiel wird jedoch der unveränderte Datensatz in die Anwendung geladen. Die Berechnung, die einen Zeitstempel für den Start der Mondwoche zurückgibt, in der die Transaktionen stattfanden, wird als Kennzahl in einem Diagrammobjekt der Anwendung erstellt.
Ladeskript
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
];
Ergebnisse
Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie dieses Feld als Dimension hinzu: date.
Fügen Sie die folgenden Kennzahlen hinzu:
=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 |
Die Kennzahl start_of_week wird im Diagrammobjekt erstellt, indem die Funktion lunarweekstart() verwendet und das Datumsfeld als Argument der Funktion übergeben wird.
Die Funktion lunarweekstart() identifiziert, in welche Mondwoche der Datumswert fällt, und gibt einen Zeitstempel für die letzte Millisekunde dieser Woche zurück.
Transaktion 8189 fand am 19. Januar statt. Die Funktion lunarweekstart() identifiziert, dass die Mondwoche am 15. Januar beginnt. Daher ist der Wert für start_of_week dieser Transaktion die erste Millisekunde dieses Tages, also der 15. Januar um 12:00:00 AM.
Beispiel 5 – Szenario
Übersicht
Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.
Das Ladeskript umfasst:
-
Datensatz mit einer Reihe von Darlehenssalden, der in eine Tabelle namens Loans geladen wird
-
Daten aus der Darlehens-ID, dem Saldo zum Wochenbeginn und dem einfachen Zinssatz, der für jedes Darlehen pro Jahr berechnet wird
Der Endbenutzer möchte ein Diagrammobjekt, das nach Darlehens-ID die aktuellen Zinsen anzeigt, die für jedes Darlehen in der Woche bis dato aufgelaufen sind.
Ladeskript
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
];
Ergebnisse
Gehen Sie folgendermaßen vor:
-
Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle.
-
Fügen Sie die folgenden Felder als Dimensionen hinzu:
-
loan_id
-
start_balance
-
-
Erstellen Sie dann die folgende Kennzahl, um die kumulierten Zinsen zu berechnen:
=start_balance*(rate*(today(1)-lunarweekstart(today(1)))/365)
-
Legen Sie das Zahlenformat der Kennzahl auf Währung fest.
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 |
Die Funktion lunarweekstart() verwendet das aktuelle Datum als einziges Argument und gibt das Startdatum des aktuellen Jahres zurück. Die Formel zieht dieses Ergebnis vom aktuellen Datum ab und gibt die Anzahl der Tage zurück, die bisher in der Woche verstrichen sind.
Dieser Wert wird dann mit dem Zinssatz multipliziert und durch 365 geteilt, um den effektiven Zinssatz für diesen Zeitraum zurückzugeben. Das Ergebnis wird dann mit dem Anfangssaldo des Darlehens multipliziert, was die Zinsen ergibt, die bislang in dieser Woche aufgelaufen sind.