Ta funkcja zwraca liczbę całkowitą reprezentującą numer tygodnia zgodnie z normą ISO 8601. Numer miesiąca jest obliczany na podstawie interpretacji daty z wyrażenia zgodnie ze standardową interpretacją liczb.
Numerowanie tygodni zaczyna się 1 stycznia (ponieważ domyślnie Qlik Sense ustawiono, aby używać dzielonych tygodni). Pierwszy tydzień kończy się w dniu poprzedzającym datę określaną przez zmienną systemową FirstWeekDay niezależnie od tego, ile dni upłynęło w tym tygodniu. Zmienną systemową FirstWeekDay można zastąpić w funkcji week() argumentem first_week_day.
Funkcja week() także umożliwia określenie, czy mają być używane tygodnie dzielone czy niedzielone. Służy do tego argument broken_weeks. Jeśli zostaną wybrane tygodnie dzielone, tydzień 1 musi zawierać określoną liczbę dni w styczniu zgodnie z definicją w zmiennej ReferenceDay. W związku z tym tydzień 1 może zaczynać się w grudniu lub ewentualnie tygodnie 52 lub 53 mogą być kontynuowane w styczniu. Argument reference_day umożliwia funkcji przesłonięcie zmiennej systemowej ReferenceDay.
W odróżnieniu od funkcji weekname(), funkcja week() nie zwraca wartości roku. To umożliwia tworzenie agregacji porównujących tygodnie między latami.
Ta funkcja przyjmuje cztery argumenty.
Argument 1: timestamp
Data traktowana jako znacznik czasu lub wyrażenie, którego wynikiem jest znacznik czasu, przeznaczone do konwersji, na przykład '2012-10-12'.
Argument 2: first_week_day
Jeśli wartość first_week_day nie zostanie określona, jako pierwszy dzień tygodnia zostanie zastosowana wartość zmiennej FirstWeekDay.
Aby użyć innego dnia jako pierwszego dnia tygodnia, ustaw first_week_day na wartość:
0 dla poniedziałku
1 dla wtorku
2 dla środy
3 dla czwartku
4 dla piątku
5 dla soboty
6 dla niedzieli
Liczba całkowita zwrócona przez funkcję będzie teraz używać pierwszego dnia tygodnia ustawionego za pomocą first_week_day.
Jeśli wartość broken_weeks nie zostanie określona, wówczas wartość zmiennej BrokenWeeks zostanie zastosowana w celu zdefiniowania, czy tygodnie są dzielone, czy nie.
Domyślnie w funkcjach Qlik Sense stosuje się tygodnie niedzielone. Oznacza to, że:
W niektórych latach tydzień 1 zaczyna się w grudniu, a w innych tydzień 52 lub 53 przeciąga się na styczeń.
Co najmniej cztery dni tygodnia 1 przypadają w styczniu.
Alternatywnym wyjściem jest użycie podzielonych tygodni.
Tydzień 52 ani 53 nie przeciąga się na styczeń.
Tydzień 1 zaczyna się 1 stycznia i w większości przypadków nie jest pełnym tygodniem.
Jeśli wartość reference_day nie zostanie określona, wówczas w celu zdefiniowania dnia w styczniu, który zostanie ustawiony jako dzień odniesienia do zdefiniowania tygodnia 1, zostanie użyta wartość zmiennej ReferenceDay. Domyślnie w funkcjach programu Qlik Sense za dzień odniesienia uznaje się 4. Oznacza to, że pierwszy tydzień musi zawierać datę 4 stycznia lub, ujmując rzecz inaczej, pierwszy tydzień musi zawsze zawierać co najmniej 4 dni w styczniu.
Do ustawiania innych dni referencyjnych można użyć następujących wartości:
Funkcja The week() jest przydatna, gdy chcesz porównać agregacje według tygodni. Można jej na przykład użyć, aby wyświetlić całkowitą sprzedaż produktów w ujęciu tygodniowym. Funkcja week() jest wybierana zamiast funkcji weekname(), gdy użytkownik nie chce, aby w obliczeniach były wykorzystywane zmienne systemowe aplikacji BrokenWeeks, FirstWeekDay lub ReferenceDay.
Ponadto funkcja week() jest wybierana, gdy chcemy dokonywać porównań między latami. Przy użyciu funkcji week() użytkownik może utworzyć własną kombinację tych zmiennych do użycia w przypadkach, w których używana jest ta funkcja.
Te wymiary można utworzyć w skrypcie ładowania, używając tej funkcji w celu utworzenia pola w tabeli kalendarza głównego lub bezpośrednio na wykresie jako wymiaru obliczanego.
Przykłady funkcji
Przykład
Wynik
week(
'10/12/2012')
Zwraca 41.
week(
'35648')
Zwraca 32, ponieważ 35648 = 06.08.1997.
week('10/12/2012', 0, 1)
zwraca 42.
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 – Domyślne zmienne systemowe
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 ostatni tydzień 2021 r., który jest ładowany do tabeli o nazwie Transactions.
Pole danych w formacie zmiennej systemowej DateFormat (MM/DD/YYYY).
Utworzenie pola, week_number, które zwraca rok i numer tygodnia, w którym zawarto transakcję.
Utworzenie pola o nazwie week_day, pokazującego wartość dnia tygodnia każdej daty transakcji.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2021,58.27
8184,12/28/2021,67.42
8185,12/29/2021,23.80
8186,12/30/2021,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
id
date
week_day
week_number
Tabela wynikowa
id
date
week_day
week_number
8183
12/27/2021
Pon
53
8184
12/28/2021
Wto
53
8185
12/29/2021
Śro
53
8186
12/30/2021
Thu
53
8187
12/31/2021
Fri
53
8188
01/01/2022
Sat
1
8189
01/02/2022
Nie
2
8190
01/03/2022
Pon
2
8191
01/04/2022
Wto
2
8192
01/05/2022
Śro
2
8193
01/06/2022
Thu
2
8194
01/07/2022
Fri
2
8195
01/08/2022
Sat
2
8196
01/09/2022
Nie
3
8197
01/10/2022
Pon
3
8198
01/11/2022
Wto
3
8199
01/12/2022
Śro
3
8200
01/13/2022
Thu
3
8201
01/14/2022
Fri
3
Pole week_number jest tworzone w poprzedzającej instrukcji LOAD przez użycie funkcji week() i przekazanie pola date jako argumentu funkcji.
Do funkcji nie są przekazywane żadne inne parametry, w związku z czym obowiązują następujące domyślne zmienne wpływające na funkcję week():
BrokenWeeks: Numerowanie tygodni zaczyna się od 1 stycznia
FirstWeekDay: Pierwszy dzień tygodnia to niedziela
Ponieważ aplikacja używa domyślnej zmiennej systemowej BrokenWeeks, tydzień pierwszy zaczyna się 1 stycznia, czyli w sobotę.
Ze względu na domyślną zmienną systemową FirstWeekDay tygodnie zaczynają się w niedzielę. Pierwsza niedziela po 1 stycznia przypada 2 stycznia, więc tego dnia zaczyna się tydzień drugi.
Przykład 2 — first_week_day
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Utworzenie pola, week_number, które zwraca rok i numer tygodnia, w którym zawarto transakcję.
Utworzenie pola o nazwie week_day, pokazującego wartość dnia tygodnia każdej daty transakcji.
W tym przykładzie chcemy ustawić początek tygodnia roboczego na wtorek.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
id
date
week_day
week_number
Tabela wynikowa
id
date
week_day
week_number
8183
12/27/2021
Pon
52
8184
12/28/2021
Wto
53
8185
12/29/2021
Śro
53
8186
12/30/2021
Thu
53
8187
12/31/2021
Fri
53
8188
01/01/2022
Sat
1
8189
01/02/2022
Nie
1
8190
01/03/2022
Pon
1
8191
01/04/2022
Wto
2
8192
01/05/2022
Śro
2
8193
01/06/2022
Thu
2
8194
01/07/2022
Fri
2
8195
01/08/2022
Sat
2
8196
01/09/2022
Nie
2
8197
01/10/2022
Pon
2
8198
01/11/2022
Wto
3
8199
01/12/2022
Śro
3
8200
01/13/2022
Thu
3
8201
01/14/2022
Fri
3
Aplikacja nadal używa podzielonych tygodni. Jednak argument first_week_day w funkcji week() został ustawiony na 1. To ustawia wtorek jako pierwszy dzień tygodnia.
Aplikacja używa domyślnej zmiennej systemowej BrokenWeeks, więc tydzień pierwszy zaczyna się 1 stycznia, czyli w sobotę.
Argument first_week_day funkcji week() ustawia pierwszy dzień tygodnia na wtorek. W efekcie tydzień 53 zaczyna się 28 grudnia 2021 r.
Ponieważ jednak funkcja nadal używa dzielonych tygodni, tydzień pierwszy będzie miał tylko dwa dni, ponieważ pierwszy wtorek po 1 stycznia wypada 3 stycznia.
Przykład 3 – unbroken_weeks
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 używamy niepodzielonych tygodni.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,6,0) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
id
date
week_day
week_number
Tabela wynikowa
id
date
week_day
week_number
8183
12/27/2021
Pon
52
8184
12/28/2021
Wto
52
8185
12/29/2021
Śro
52
8186
12/30/2021
Thu
52
8187
12/31/2021
Fri
52
8188
01/01/2022
Sat
52
8189
01/02/2022
Nie
1
8190
01/03/2022
Pon
1
8191
01/04/2022
Wto
1
8192
01/05/2022
Śro
1
8193
01/06/2022
Thu
1
8194
01/07/2022
Fri
1
8195
01/08/2022
Sat
1
8196
01/09/2022
Nie
2
8197
01/10/2022
Pon
2
8198
01/11/2022
Wto
2
8199
01/12/2022
Śro
2
8200
01/13/2022
Thu
2
8201
01/14/2022
Fri
2
Parametr first_week_date jest ustawiony na 1, co czyni wtorek pierwszym dniem tygodnia. Parametr broken_weeks jest ustawiony na 0, co zmusza funkcję do używania niedzielonych tygodni. Trzeci parametr ustawia argument reference_day na 2.
Parametr first_week_date jest ustawiony na 6, co czyni niedzielę pierwszym dniem tygodnia. Parametr broken_weeks jest ustawiony na 0, co zmusza funkcję do używania niepodzielonych tygodni.
Dzięki użyciu niedzielonych tygodni pierwszy tydzień nie musi zaczynać się 1 stycznia. Zamiast tego musi mieć przynajmniej pięć dni. W związku z tym, w zestawie danych, tydzień 52 kończy się w sobotę 1 stycznia 2022 r. Zatem pierwszy tydzień zaczyna się w dniu wskazywanym przez zmienną systemową FirstWeekDay, który jest niedzielą 2 stycznia. Ten tydzień kończy się w następną sobotę 8 stycznia.
Przykład 4 – reference_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 trzecim przykładzie.
Utworzenie pola, week_number, które zwraca rok i numer tygodnia, w którym zawarto transakcję.
Utworzenie pola o nazwie week_day, pokazującego wartość dnia tygodnia każdej daty transakcji.
Ponadto muszą być spełnione następujące warunki:
Tydzień roboczy zaczyna się we wtorek.
Firma używa niepodzielonych tygodni.
Wartość reference_day wynosi 2. Innymi słowy, minimalna liczba dni w styczniu w tygodniu pierwszym wynosi 2.
Skrypt ładowania
SET DateFormat='MM/DD/YYYY';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
Transactions:
Load
*,
WeekDay(date) as week_day,
Week(date,1,0,2) as week_number
;
Load
*
Inline
[
id,date,amount
8183,12/27/2022,58.27
8184,12/28/2022,67.42
8185,12/29/2022,23.80
8186,12/30/2022,82.06
8187,12/31/2021,40.56
8188,01/01/2022,37.23
8189,01/02/2022,17.17
8190,01/03/2022,88.27
8191,01/04/2022,57.42
8192,01/05/2022,53.80
8193,01/06/2022,82.06
8194,01/07/2022,40.56
8195,01/08/2022,53.67
8196,01/09/2022,26.63
8197,01/10/2022,72.48
8198,01/11/2022,18.37
8199,01/12/2022,45.26
8200,01/13/2022,58.23
8201,01/14/2022,18.52
];
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
id
date
week_day
week_number
Tabela wynikowa
id
date
week_day
week_number
8183
12/27/2021
Pon
52
8184
12/28/2021
Wto
1
8185
12/29/2021
Śro
1
8186
12/30/2021
Thu
1
8187
12/31/2021
Fri
1
8188
01/01/2022
Sat
1
8189
01/02/2022
Nie
1
8190
01/03/2022
Pon
1
8191
01/04/2022
Wto
2
8192
01/05/2022
Śro
2
8193
01/06/2022
Thu
2
8194
01/07/2022
Fri
2
8195
01/08/2022
Sat
2
8196
01/09/2022
Nie
2
8197
01/10/2022
Pon
2
8198
01/11/2022
Wto
3
8199
01/12/2022
Śro
3
8200
01/13/2022
Thu
3
8201
01/14/2022
Fri
3
Parametr first_week_date jest ustawiony na 1, co czyni wtorek pierwszym dniem tygodnia. Parametr broken_weeks jest ustawiony na 0, co zmusza funkcję do używania niepodzielonych tygodni. Trzeci parametr ustawia parametr reference_day na 2.
W przypadku tej funkcji używającej niedzielonych tygodni i argumentu reference_day o wartości 2, pierwszy tydzień w styczniu musi mieć tylko dwa dni. Ponieważ pierwszy dzień tygodnia to wtorek, pierwszy tydzień zaczyna się 28 grudnia 2021 r. i kończy się w poniedziałek, 3 stycznia 2022 r.
Przykład 5 – Przykład z użyciem obiektu 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 numer tygodnia zostały utworzone jako miara w obiekcie wykresu.
Utwórz miarę , week_day, aby pokazać wartość dnia tygodnia każdej daty transakcji:
=weekday(date)
Tabela wynikowa
id
date
=week(date)
=weekday(date)
8183
12/27/2021
53
Pon
8184
12/28/2021
53
Wto
8185
12/29/2021
53
Śro
8186
12/30/2021
53
Thu
8187
12/31/2021
53
Fri
8188
01/01/2022
1
Sat
8189
01/02/2022
2
Nie
8190
01/03/2022
2
Pon
8191
01/04/2022
2
Wto
8192
01/05/2022
2
Śro
8193
01/06/2022
2
Thu
8194
01/07/2022
2
Fri
8195
01/08/2022
2
Sat
8196
01/09/2022
3
Nie
8197
01/10/2022
3
Pon
8198
01/11/2022
3
Wto
8199
01/12/2022
3
Śro
8200
01/13/2022
3
Thu
8201
01/14/2022
3
Fri
Pole week_number jest tworzone w poprzedzającej instrukcji LOAD przez użycie funkcji week() i przekazanie pola date jako argumentu funkcji.
Do funkcji nie są przekazywane żadne inne parametry, w związku z czym obowiązują następujące domyślne zmienne wpływające na funkcję week():
BrokenWeeks: Numerowanie tygodni zaczyna się od 1 stycznia
FirstWeekDay: Pierwszy dzień tygodnia to niedziela
Ponieważ aplikacja używa domyślnej zmiennej systemowej BrokenWeeks, tydzień pierwszy zaczyna się 1 stycznia, czyli w sobotę.
Ze względu na domyślną zmienną systemową FirstWeekDay tygodnie zaczynają się w niedzielę. Pierwsza niedziela po 1 stycznia przypada 2 stycznia, więc tego dnia zaczyna się tydzień drugi.
Przykład 6 – Scenariusz
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 ostatni tydzień 2019 r. i pierwsze dwa tygodnie 2020 r., który jest ładowany do tabeli o nazwie Transactions.
Pole danych w formacie zmiennej systemowej DateFormat (MM/DD/YYYY).
Aplikacja używa przede wszystkim podzielonych tygodni na swoim pulpicie. Jednak użytkownik końcowy chciałby otrzymać obiekt wykresu przedstawiający łączną sprzedaż w ujęciu tygodniowym przy użyciu tygodni niedzielonych. Dniem odniesienia powinien być 2 stycznia, przy tygodniach zaczynających się we wtorek. Można to osiągnąć nawet wtedy, gdy ten wymiar nie jest dostępny w modelu danych, używając funkcji week() jako wymiaru obliczanego na wykresie.