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: dual
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ć
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.
Domyślne ustawienia regionalne w aplikacjach są oparte na regionalnych ustawieniach systemu komputera lub serwera, na którym zainstalowano Qlik Sense. Jeśli serwer Qlik Sense, do którego uzyskujesz dostęp, jest ustawiony na Szwecję, Edytor ładowania danych użyje szwedzkich ustawień regionalnych dla dat, godziny i waluty. Te ustawienia regionalne nie są związane z językiem wyświetlanym w interfejsie użytkownika Qlik Sense. Interfejs Qlik Sense będzie wyświetlany w tym samym języku co używana przeglądarka.
Przykład 1 — bez dodatkowych argumentów
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
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 | 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 |
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.
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 karty.
Skrypt ładowania zawiera:
-
Ten sam zestaw danych i scenariusz 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 | 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 |
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.
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 | 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 |
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.
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) | =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 |
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.
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 — scenariusz
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
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 |
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.