monthsend — funkcja skryptu i funkcja wykresu
Ta funkcja zwraca wartość odpowiadającą znacznikowi czasu ostatniej milisekundy okresu miesiąca, dwóch miesięcy, kwartału, czterech miesięcy lub półrocza, który zawiera datę bazową. Można także wyszukać znacznik czasu końca okresu poprzedniego lub następnego. Domyślnym formatem wyjściowym będzie format DateFormat skonfigurowany w skrypcie.
Składnia:
MonthsEnd(n_months, date[, period_no [, first_month_of_year]])
Typ zwracanych danych: wartość podwójna
Argument | Opis |
---|---|
n_months | Liczba miesięcy określająca okres. Wartość całkowita lub wyrażenie, którego wynikiem jest jedna z następujących wartości całkowitych: 1 (równoważnik funkcji inmonth()), 2 (dwa miesiące), 3 (równoważnik funkcji inquarter()), 4 (cztery miesiące) lub 6 (pół roku). |
date | Data lub znacznik czasu do oszacowania. |
period_no | Okres może być przesunięty o wartość period_no — liczbę całkowitą lub wyrażenie, którego wynikiem jest liczba całkowita, gdzie wartość 0 wskazuje dzień zawierający wartość base_date. Wartości ujemne parametru period_no oznaczają okresy poprzednie, a wartości dodatnie — okresy następne. |
first_month_of_year |
Jeśli użytkownik zamierza korzystać z lat (obrotowych), które nie zaczynają się w styczniu, powinien wskazać wartość od 2 do 12 jako parametr first_month_of_year. |
Funkcja monthsend() dzieli rok na segmenty na podstawie przekazanego argumentu n_months. Następnie sprawdza, do którego segmentu należy każda z przekazanych dat, i zwraca ostatnią milisekundę, w formacie daty, tego segmentu. Funkcja może zwrócić końcowy znacznik czasu z poprzednich lub następnych segmentów, jak również może przedefiniować pierwszy miesiąc roku.
Następujące segmenty roku są dostępne w funkcji jako argumenty n_month:
Okres | Liczba miesięcy |
---|---|
miesiąc | 1 |
dwa miesiące | 2 |
kwartał | 3 |
cztery miesiące | 4 |
pół roku | 6 |
Kiedy używać
Funkcja monthsend() jest zwykle jako część wyrażenia, gdy użytkownik chce, by w obliczeniach użyto ułamka miesiąca, który upłynął do tej pory. Użytkownik może, przy użyciu zmiennej, wybrać dowolny okres. Na przykład, funkcja monthsend() może dostarczyć zmienną wejściową umożliwiającą użytkownikowi obliczenie sumy odsetek jeszcze nie zapłaconych w miesiącu, kwartale lub półroczu.
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 | Wynik |
---|---|
monthsend(4, '07/19/2013') | Zwraca wartość 08/31/2013. |
monthsend(4, '10/19/2013', -1) | Zwraca wartość 08/31/2013. |
monthsend(4, '10/19/2013', 0, 2) | Zwraca wartość 01/31/2014. Ponieważ początkiem roku staje się miesiąc 2. |
Przykład 1 — Przykład podstawowy
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 daty przekazane w formacie zmiennej systemowej DateFormat ((MM/DD/YYYY)).
-
Poprzedzająca instrukcja ładowania zawiera:
-
funkcję monthsend, która jest ustawiona jako pole bi_monthly_end. Grupuje transakcje w dwumiesięczne segmenty.
-
Funkcja timestamp, która zwraca początkowy znacznik czasu segmentu dla każdej transakcji.
-
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date) as bi_monthly_end,
timestamp(monthsend(2,date)) as bi_monthly_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/22/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:
-
id
-
date
-
bi_monthly_end
-
bi_monthly_end_timestamp
id | date | bi_monthly_end | bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8189 | 1/19/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8192 | 3/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8194 | 5/7/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8205 | 9/26/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
Pole bi_monthly_end jest tworzone w poprzedniej instrukcji load przy użyciu funkcji monthsend(). Pierwszy podany argument – 2 – dzieli rok na segmenty dwumiesięczne. Pierwszy podany argument określa, które pole jest oceniane.
Transakcja 8195 ma miejsce 22 maja. Funkcja monthsend() początkowo dzieli rok na segmenty dwumiesięczne. Transakcja 8195 należy do segmentu od 1 maja do 30 czerwca. W wyniku funkcja zwraca ostatnią milisekundę tego segmentu – 30.06.2022, godz. 23:59:59.
Przykład 2 – period_no
Przegląd
Używany jest ten sam zestaw danych i scenariusz co w pierwszym przykładzie.
W tym przykładzie zadaniem jest utworzenie pola prev_bi_monthly_end zwracającego pierwszą milisekundę dwumiesięcznego segmentu przed zawarciem transakcji.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date,-1) as prev_bi_monthly_end,
timestamp(monthsend(2,date,-1)) as prev_bi_monthly_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/22/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:
-
id
-
date
-
prev_bi_monthly_end
-
prev_bi_monthly_end_timestamp
id | date | prev_bi_monthly_end | prev_bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8189 | 1/19/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8190 | 2/5/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8191 | 2/28/2022 | 12/31/2021 | 12/31/2021 11:59:59 PM |
8192 | 3/16/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8193 | 4/1/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8194 | 5/7/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8199 | 7/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8200 | 7/23/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8201 | 7/27/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8202 | 8/2/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8203 | 8/8/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8204 | 8/19/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8205 | 9/26/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
Jeśli po podzieleniu roku na segmenty dwumiesięczne do funkcji monthsend() przekażemy wartość -1 jako argument period_no, funkcja ta zwróci ostatnią milisekundę dwumiesięcznego segmentu poprzedzającego ten, w którym zawarto transakcję.
Transakcja 8195 należy do segmentu od maja do czerwca. W efekcie poprzedni dwumiesięczny segment obejmował okres od 1 marca do 30 kwietnia, więc funkcja zwraca ostatnią milisekundę właśnie tego segmentu, czyli odpowiadającą dacie 30.04.2022, godz. 23:59:59.
Przykład 3 — first_month_of_year
Przegląd
Używany jest ten sam zestaw danych i scenariusz co w pierwszym przykładzie.
W tym przykładzie przyjęto, że kwiecień ma być pierwszym miesiącem roku podatkowego.
Utwórz pole bi_monthly_end, które grupuje transakcje w segmenty dwumiesięczne i zwraca znacznik czasu ostatniej milisekundy segmentu dla każdej transakcji.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
monthsend(2,date,0,4) as bi_monthly_end,
timestamp(monthsend(2,date,0,4)) as bi_monthly_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/22/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:
-
id
-
date
-
bi_monthly_end
-
bi_monthly_end_timestamp
id | date | bi_monthly_end | bi_monthly_end_timestamp |
---|---|---|---|
8188 | 1/7/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
8189 | 1/19/2022 | 01/31/2022 | 1/31/2022 11:59:59 PM |
8190 | 2/5/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8191 | 2/28/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8192 | 3/16/2022 | 03/31/2022 | 3/31/2022 11:59:59 PM |
8193 | 4/1/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8194 | 5/7/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8195 | 5/22/2022 | 05/31/2022 | 5/31/2022 11:59:59 PM |
8196 | 6/15/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8197 | 6/26/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8198 | 7/9/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 07/31/2022 | 7/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8203 | 8/8/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8204 | 8/19/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8205 | 9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
8206 | 10/14/2022 | 11/30/2022 | 11/30/2022 11:59:59 PM |
8207 | 10/29/2022 | 11/30/2022 | 11/30/2022 11:59:59 PM |
Kiedy jako argument first_month_of_year funkcji monthsend() zostaje przekazana wartość 4, funkcja ta rozpoczyna rok 1 kwietnia, a następnie dzieli go na segmenty dwumiesięczne: kwi-maj, cze-lip, sie-wrz, paź-lis, gru-sty, lut-mar.
Transakcja 8195 miała miejsce 22 maja i należy do segmentu od 1 kwietnia do 31 maja. W wyniku funkcja zwraca ostatnią milisekundę tego segmentu – 31.05.2022, godz. 23:59:59.
Przykład 4 — przykład z obiektem wykresu
Przegląd
Używany jest ten sam zestaw danych i scenariusz co w pierwszym przykładzie. Jednak w tym przykładzie zestaw danych pozostaje bez zmian i jest ładowany do aplikacji.
W tym przykładzie zadanie polega na utworzeniu obliczeń grupujących transakcje w segmenty dwumiesięczne i zwracających znacznik czasu ostatniej milisekundy segmentu dla każdej transakcji jako miary w obiekcie wykresu aplikacji.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*
Inline
[
id,date,amount
8188,2/19/2022,37.23
8189,3/7/2022,17.17
8190,3/30/2022,88.27
8191,4/5/2022,57.42
8192,4/16/2022,53.80
8193,5/1/2022,82.06
8194,5/7/2022,40.39
8195,5/22/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
Aby pobrać znacznik czasu ostatniej milisekundy dwumiesięcznego segmentu, w którym zawarto transakcję, utwórz następujące miary:
-
=monthsEnd(2,date)
-
=timestamp(monthsend(2,date))
id | date | =monthsend(2,date) | =timestamp(monthsend(2,date)) |
---|---|---|---|
8188 | 1/7/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8189 | 1/19/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8190 | 2/5/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8191 | 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
8192 | 3/16/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8193 | 4/1/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
8194 | 5/7/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8195 | 5/22/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8196 | 6/15/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8197 | 6/26/2022 | 06/30/2022 | 6/30/2022 11:59:59 PM |
8198 | 7/9/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8199 | 7/22/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8200 | 7/23/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8201 | 7/27/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8202 | 8/2/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8203 | 8/8/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8204 | 8/19/2022 | 08/31/2022 | 8/31/2022 11:59:59 PM |
8205 | 9/26/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8206 | 10/14/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
8207 | 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |
Pole bi_monthly_end jest tworzone jako miara w obiekcie wykresu przy użyciu funkcji monthsend(). Pierwszy podany argument ma wartość 2, która dzieli rok na segmenty dwumiesięczne. Pierwszy podany argument określa, które pole jest oceniane.
Transakcja 8195 ma miejsce 22 maja. Funkcja monthsend() początkowo dzieli rok na segmenty dwumiesięczne. Transakcja 8195 należy do segmentu od 1 maja do 30 czerwca. W wyniku funkcja zwraca pierwszą milisekundę tego segmentu – 30.06.2022, godz. 23:59:59.
Przykład 5 — scenariusz
Przegląd
Otwórz edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
W tym przykładzie zestaw danych jest ładowany do tabeli o nazwie Employee_Expenses. Tabela zawiera następujące pola:
-
Identyfikatory pracowników
-
Imiona i nazwiska pracownika
-
Średnie dzienne rozliczenia wydatków każdego pracownika.
Użytkownik końcowy chciałby, aby wykres wyświetlał, według identyfikatora pracownika oraz imienia i nazwiska pracownika, szacowane roszczenia z tytułu wydatków do poniesienia przez pozostałą część wybranego okresu. Rok obrotowy rozpoczyna się w styczniu.
Skrypt ładowania
SET vPeriod = 1;
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
Załaduj dane i otwórz nowy arkusz.
Na początku skryptu ładowania została utworzona zmienna vPeriod, która jest powiązana z kontrolką wejściową zmiennej.
Wykonaj następujące czynności:
-
W panelu zasobów kliknij opcję Obiekty niestandardowe.
-
Wybierz pakiet Qlik Dashboard i utwórz obiekt wprowadzania zmiennych.
-
Wprowadź tytuł obiektu wykresu.
-
W polu Zmienna wybierz vPeriod jako nazwę i ustaw obiekt tak, aby był wyświetlany jako lista rozwijana.
-
W sekcji Wartości kliknij Wartości dynamiczne. Wprowadź:
='1~month|2~bi-month|3~quarter|4~tertial|6~half-year'.
Utwórz nową tabelę i te pola jako wymiary:
-
employee_id
-
employee_name
Aby obliczyć narosłe odsetki, należy utworzyć następującą miarę:
=floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim
Ustaw Formatowanie liczb miary na Waluta.
employee_id | employee_name | =floor(monthsend($(vPeriod),today(1))-today(1))*avg_daily_claim |
---|---|---|
182 | Mark | $1410.00 |
183 | Deryck | $1175.00 |
184 | Dexter | $1175.00 |
185 | Sydney | $2538.00 |
186 | Agatha | $1692.00 |
Funkcja monthsend() przyjmuje dane od użytkownika jako pierwszy argument i dzisiejszą datę jako drugi argument. Zwraca datę końcową dla okresu wybranego przez użytkownika. Następnie wyrażenie zwraca liczbę dni pozostałych w wybranym okresie przez odjęcie bieżącej daty od daty zakończenia.
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łych dniach tego okresu.