lunarweekend funkcja skryptu i funkcja wykresu
Ta funkcja zwraca wartość odpowiadającą znacznikowi czasu ostatniej milisekundy ostatniego dnia tygodnia księżycowego zawierającego wartość date. Tygodnie księżycowe w Qlik Sense są zdefiniowane przez uznanie 1 stycznia za pierwszy dzień tygodnia i każdy tydzień, z wyjątkiem ostatniego tygodnia roku, będzie zawierał dokładnie siedem dni.
Składnia:
LunarweekEnd(date[, period_no[, first_week_day]])
Typ zwracanych danych: wartość podwójna
Przykładowy diagram funkcji lunarweekend()

Funkcja lunarweekend() sprawdza, do którego tygodnia księżycowego należy date. Następnie zwraca znacznik czasu w formacie daty dla ostatniej milisekundy tego tygodnia.
| Argument | Opis |
|---|---|
| date | Data lub znacznik czasu do oszacowania. |
| period_no | Parametr period_no jest liczbą całkowitą lub wyrażeniem, którego wynikiem jest liczba całkowita, gdzie wartość 0 wskazuje tydzień księżycowy zawierający wartość date. Wartości ujemne parametru period_no oznaczają poprzednie tygodnie księżycowe, a wartości dodatnie — następne tygodnie księżycowe. |
| first_week_day | Przesunięcie może być większe lub mniejsze od zera. Zmienia to początek roku o określoną liczbę dni lub części dnia. |
Kiedy używać lunarweekend
Funkcja lunarweekend() jest powszechnie używana jako część wyrażenia, gdy użytkownik chce, by w obliczeniach użyto ułamka tygodnia, który jeszcze nie nastąpił. Inaczej niż w przypadku funkcji weekend(), ostatni tydzień księżycowy każdego roku kalendarzowego będzie się kończył 31 grudnia. Na przykład, za pomocą funkcji lunarweekend() można obliczyć odsetki, które jeszcze nie zostały zapłacone w tym tygodniu.
| Przykład | Wynik |
|---|---|
| lunarweekend('01/12/2013') | Zwraca wartość 01/14/2013 23:59:59. |
| lunarweekend('01/12/2013', -1) | Zwraca wartość 01/07/2013 23:59:59. |
| lunarweekend('01/12/2013', 0, 1) | Zwraca wartość 01/15/2013 23:59:59. |
Ustawienia regionalne
Jeżeli nie podano inaczej, w przykładach w tym temacie stosowany jest następujący format daty: MM/DD/RRRR. Format daty jest określony w instrukcji SET DateFormat w skrypcie ładowania danych. Domyślny format daty w Twoim systemie może być inny ze względu na ustawienia regionalne i inne czynniki. Formaty zastosowane w przykładach można zmienić, aby dostosować je do własnych wymagań. Zamiast tego można też zmienić formaty w skrypcie ładowania, aby pasowały do tych przykładów. Więcej informacji można znaleźć w temacie Modyfikowanie ustawień regionalnych na potrzeby aplikacji i skryptów.
Domyślne ustawienia regionalne w aplikacjach są oparte na profilu użytkownika. Te ustawienia regionalne nie są związane z językiem wyświetlanym w interfejsie użytkownika Qlik Cloud. Interfejs Qlik Cloud będzie wyświetlany w tym samym języku co używana przeglądarka.
Jeżeli jesteś twórcą aplikacji, możesz wybrać domyślny region dla tworzonych przez siebie aplikacji. Więcej informacji zawiera temat Ustawianie preferowanych ustawień regionalnych do tworzenia aplikacji i skryptów w Qlik Cloud Analytics.
Przykład 1 — bez dodatkowych argumentów
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.
Skrypt ładowania zawiera:
-
Zestaw danych zawierający zestaw transakcji za rok 2022, który jest ładowany do tabeli o nazwie „Transactions”.
-
Pole danych w formacie DateFormat zmiennej systemowej (MM/DD/RRRR).
-
Utworzenie pola end_of_week zwracającego znacznik czasu końca tygodnia księżycowego, w którym zostały zawarte transakcje.
Skrypt ładowania
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
];Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
-
date
-
end_of_week
-
end_of_week_timestamp
| date | koniec_tygodnia | koniec_tygodnia_znacznik_czasu |
|---|---|---|
| 1/7/2022 | 01/07/2022 | 07.01.2022 23:59:59 |
| 1/19/2022 | 21.01.2022 | 21.01.2022 23:59:59 |
| 2/5/2022 | 11.02.2022 | 11.02.2022 23:59:59 |
| 2/28/2022 | 03/04/2022 | 04.03.2022 23:59:59 |
| 3/16/2022 | 18.03.2022 | 18.03.2022 23:59:59 |
| 4/1/2022 | 04/01/2022 | 01.04.2022 23:59:59 |
| 5/7/2022 | 13.05.2022 | 13.05.2022 23:59:59 |
| 5/16/2022 | 20.05.2022 | 20.05.2022 23:59:59 |
| 6/15/2022 | 17.06.2022 | 17.06.2022 23:59:59 |
| 6/26/2022 | 01/07/2022 | 01/07/2022 23:59:59 |
| 7/9/2022 | 15/07/2022 | 15.07.2022 23:59:59 |
| 7/22/2022 | 22.07.2022 | 22.07.2022 23:59:59 |
| 7/23/2022 | 29/07/2022 | 29/07/2022 11:59:59 PM |
| 7/27/2022 | 29/07/2022 | 29.07.2022 23:59:59 |
| 8/2/2022 | 05.08.2022 | 05.08.2022 23:59:59 |
| 8/8/2022 | 12.08.2022 | 12.08.2022 23:59:59 |
| 8/19/2022 | 19.08.2022 | 19.08.2022 23:59:59 |
| 9/26/2022 | 30.09.2022 | 30.09.2022 23:59:59 |
| 10/14/2022 | 10/14/2022 | 14.10.2022 23:59:59 |
| 10/29/2022 | 04.11.2022 | 04.11.2022 23:59:59 |
Pole end_of_week jest tworzone w instrukcji ładowania poprzedzającego przez użycie funkcji lunarweekend() i przekazanie pola date jako argumentu funkcji.
Funkcja lunarweekend() identyfikuje, w którym tygodniu księżycowym przypada wartość daty, i zwraca znacznik czasu ostatniej milisekundy danego tygodnia.
Diagram funkcji lunarweekend(), przykład bez dodatkowych argumentów

Transakcja 8189 miała miejsce 19 stycznia. Funkcja lunarweekend() oblicza, że tydzień księżycowy zaczyna się 15 stycznia. W związku z tym wartość end_of_week dla tamtej transakcji zwraca ostatnią milisekundę tygodnia księżycowego (21 stycznia o godz. 23:59:59).
Przykład 2 – period_no
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.
Skrypt ładowania zawiera:
-
Ten sam zestaw danych i zastosowanie co w pierwszym przykładzie.
-
Utworzenie pola previous_lunar_week_end zwracającego znacznik czasu końca tygodnia księżycowego przed transakcją.
Skrypt ładowania
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
];Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
-
date
-
previous_lunar_week_end
-
previous_lunar_week_end_timestamp
| date | koniec poprzedniego tygodnia księżycowego | znacznik czasu końca poprzedniego tygodnia księżycowego |
|---|---|---|
| 1/7/2022 | 12/31/2021 | 31.12.2021 23:59:59 |
| 1/19/2022 | 01/14/2022 | 14.01.2022 23:59:59 |
| 2/5/2022 | 02/04/2022 | 4.2.2022 23:59:59 |
| 2/28/2022 | 02/25/2022 | 25.2.2022 23:59:59 |
| 3/16/2022 | 03/11/2022 | 18.3.2022 23:59:59 |
| 4/1/2022 | 03/25/2022 | 25.03.2022 23:59:59 |
| 5/7/2022 | 05/06/2022 | 06.05.2022 23:59:59 |
| 5/16/2022 | 13.05.2022 | 13.05.2022 23:59:59 |
| 6/15/2022 | 06/10/2022 | 10.06.2022 23:59:59 |
| 6/26/2022 | 06/24/2022 | 24.06.2022 23:59:59 |
| 7/9/2022 | 07/08/2022 | 8.07.2022 23:59:59 |
| 7/22/2022 | 15.07.2022 | 15.07.2022 23:59:59 |
| 7/23/2022 | 22.07.2022 | 22.07.2022 23:59:59 |
| 7/27/2022 | 22.07.2022 | 22.07.2022 23:59:59 |
| 8/2/2022 | 29.07.2022 | 29.07.2022 23:59:59 |
| 8/8/2022 | 05.08.2022 | 05.08.2022 23:59:59 |
| 8/19/2022 | 12.08.2022 | 12.08.2022 23:59:59 |
| 9/26/2022 | 09/23/2022 | 23.09.2022 23:59:59 |
| 10/14/2022 | 10/07/2022 | 07.10.2022 23:59:59 |
| 10/29/2022 | 10/28/2022 | 10/28/2022 11:59:59 PM |
W tym przypadku, ponieważ wartości period_no -1 użyto jako argumentu przesunięcia w funkcji lunarweekend(), funkcja najpierw identyfikuje tydzień księżycowy, w którym zawarto transakcje. Następnie przesuwa zakres o tydzień wstecz i identyfikuje ostatnią milisekundę tego tygodnia księżycowego.
Diagram funkcji lunarweekend(), przykład z argumentem period_no

Transakcja 8189 miała miejsce 19 stycznia. Funkcja lunarweekend() oblicza, że tydzień księżycowy zaczyna się 15 stycznia. W efekcie poprzedni tydzień księżycowy rozpoczynał się 8 stycznia i kończył 14 stycznia o godzinie 23:59:59. Ta wartość jest zwracana dla pola previous_lunar_week_end.
Przykład 3 — first_week_day
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera ten sam zestaw danych i scenariusz co w pierwszym przykładzie. W tym przykładzie ustawiamy początek tygodni księżycowych na 5 stycznia.
Skrypt ładowania
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
];Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
-
date
-
end_of_week
-
end_of_week_timestamp
| date | koniec_tygodnia | koniec_tygodnia_znacznik_czasu |
|---|---|---|
| 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 | 01.03.2022 23:59:59 |
| 3/16/2022 | 03/22/2022 | 22.03.2022 23:59:59 |
| 4/1/2022 | 04/05/2022 | 05.04.2022 23:59:59 |
| 5/7/2022 | 05/10/2022 | 10.05.2022 23:59:59 |
| 5/16/2022 | 05/17/2022 | 17.05.2022 23:59:59 |
| 6/15/2022 | 06/21/2022 | 21.06.2022 23:59:59 |
| 6/26/2022 | 06/28/2022 | 28.06.2022 23:59:59 |
| 7/9/2022 | 07/12/2022 | 12.07.2022 23:59:59 |
| 7/22/2022 | 07/26/2022 | 26.07.2022 23:59:59 |
| 7/23/2022 | 26.07.2022 | 26.07.2022 23:59:59 |
| 7/27/2022 | 08/02/2022 | 02.08.2022 23:59:59 |
| 8/2/2022 | 02.08.2022 | 02.08.2022 23:59:59 |
| 8/8/2022 | 08/09/2022 | 09.08.2022 23:59:59 |
| 8/19/2022 | 08/23/2022 | 23.08.2022 23:59:59 |
| 9/26/2022 | 09/27/2022 | 27.09.2022 23:59:59 |
| 10/14/2022 | 10/18/2022 | 18.10.2022 23:59:59 |
| 10/29/2022 | 11/01/2022 | 11/1/2022 11:59:59 PM |
W tym przypadku przekazano wartość 4 jako argument first_week_date funkcji lunarweekend(), w wyniku czego początek roku został przesunięty z 1 stycznia na 5 stycznia.
Diagram funkcji lunarweekend(), przykład z argumentem first_week_day

Transakcja 8189 miała miejsce 19 stycznia. Ponieważ tygodnie księżycowe zaczynają się 5 stycznia, funkcja lunarweekend() oblicza, że tydzień księżycowy obejmujący datę 19 stycznia zaczyna się właśnie w tym dniu. W efekcie koniec tego tygodnia księżycowego wypada 25 stycznia o godzinie 23:59:59. Ta wartość zostaje zwrócona dla pola end_of_week.
Przykład 4 — przykład z obiektem wykresu
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera ten sam zestaw danych i scenariusz co w pierwszym przykładzie.
Jednak w tym przykładzie do aplikacji został załadowany niezmieniony zbiór danych. Obliczenia zwracające znacznik czasu końca tygodnia księżycowego, w którym zawarto transakcje, są tworzone jako miara w obiekcie wykresu aplikacji.
Skrypt ładowania
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
];Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar: date.
Dodaj następujące miary:
=lunarweekend(date)
=timestamp(lunarweekend(date))
| date | =lunarweekend(date) | =znacznik czasu(lunarweekend(date)) |
|---|---|---|
| 1/7/2022 | 01/07/2022 | 07.01.2022 23:59:59 |
| 1/19/2022 | 21.01.2022 | 21.01.2022 23:59:59 |
| 2/5/2022 | 11.02.2022 | 11.02.2022 23:59:59 |
| 2/28/2022 | 03/04/2022 | 04.03.2022 23:59:59 |
| 3/16/2022 | 18.03.2022 | 18.03.2022 23:59:59 |
| 4/1/2022 | 04/01/2022 | 01.04.2022 23:59:59 |
| 5/7/2022 | 13.05.2022 | 13.05.2022 23:59:59 |
| 5/16/2022 | 20.05.2022 | 20.05.2022 23:59:59 |
| 6/15/2022 | 17.06.2022 | 17.06.2022 23:59:59 |
| 6/26/2022 | 01/07/2022 | 01/07/2022 23:59:59 |
| 7/9/2022 | 15/07/2022 | 15.07.2022 23:59:59 |
| 7/22/2022 | 22.07.2022 | 22.07.2022 23:59:59 |
| 7/23/2022 | 29/07/2022 | 29/07/2022 11:59:59 PM |
| 7/27/2022 | 29/07/2022 | 29.07.2022 23:59:59 |
| 8/2/2022 | 05.08.2022 | 05.08.2022 23:59:59 |
| 8/8/2022 | 12.08.2022 | 12.08.2022 23:59:59 |
| 8/19/2022 | 19.08.2022 | 19.08.2022 23:59:59 |
| 9/26/2022 | 30.09.2022 | 30.09.2022 23:59:59 |
| 10/14/2022 | 10/14/2022 | 14.10.2022 23:59:59 |
| 10/29/2022 | 04.11.2022 | 04.11.2022 23:59:59 |
Miarę end_of_week tworzy się w obiekcie wykresu, używając funkcji lunarweekend() i przekazując pole daty date jako jej argument.
Funkcja lunarweekend() identyfikuje, w którym tygodniu księżycowym przypada wartość daty, i zwraca znacznik czasu ostatniej milisekundy danego tygodnia.
Diagram funkcji lunarweekend(), przykład obiektu wykresu

Transakcja 8189 miała miejsce 19 stycznia. Funkcja lunarweekend() oblicza, że tydzień księżycowy zaczyna się 15 stycznia. W związku z tym wartość end_of_week dla tamtej transakcji zwraca ostatnią milisekundę tygodnia księżycowego (21 stycznia o godz. 23:59:59).
Przykład 5 — zastosowanie
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.
Skrypt ładowania zawiera:
-
Zestaw danych załadowany do tabeli o nazwie Employee_Expenses.
-
Identyfikatory pracowników, imiona i nazwiska pracowników oraz średnie dzienne roszczenia z tytułu wydatków każdego pracownika.
Użytkownik końcowy chciałby, aby obiekt wykresu wyświetlał, według identyfikatora pracownika oraz imienia i nazwiska pracownika, szacowane roszczenia z tytułu wydatków do poniesienia przez pozostałą część tygodnia księżycowego.
Skrypt ładowania
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
];Wyniki
Wykonaj następujące czynności:
-
Załaduj dane i otwórz arkusz. Utwórz nową tabelę.
-
Dodaj następujące pola jako wymiary:
-
employee_id
-
employee_name
-
-
Następnie utwórz następującą miarę, aby obliczyć narosłe odsetki:
=(lunarweekend(today(1))-today(1))*avg_daily_claim
-
Ustaw Formatowanie liczb miary na Waluta.
| employee_id | employee_name | =(lunarweekend(today(1))-today(1))*avg_daily_claim |
|---|---|---|
| 182 | Mark | 75,00 USD |
| 183 | Deryck | $62.50 |
| 184 | Dexter | $62.50 |
| 185 | Sydney | $135.00 |
| 186 | Agatha | $90.00 |
Funkcja lunarkweekend(), przyjmująca jako argument tylko dzisiejszą datę, zwraca datę końcową bieżącego tygodnia księżycowego. Następnie wyrażenie odejmuje dzisiejszą datę od daty zakończenia tygodnia księżycowego i zwraca liczbę dni pozostałych w tym tygodniu.
Wartość ta jest następnie mnożona przez średnie dzienne roszczenie z tytułu wydatków przez każdego pracownika, aby obliczyć szacunkową wartość roszczeń, które każdy pracownik złoży w pozostałej części tygodnia księżycowego.