The importance of Only()
Only() zwraca wartość, jeśli w grupie znajduje się tylko jedna możliwa wartość. Wartość ta będzie wynikiem agregacji. Qlik Sense domyślnie wybiera funkcję Only(), jeśli nie określono żadnej funkcji agregacji.
Jeśli istnieje relacja jeden do jednego pomiędzy wymiarem wykresu a parametrem, funkcja Only() zwraca jedyną możliwą wartość. Jeśli jest kilka wartości, zwraca NULL. Na przykład wyrażenie szukające jedynego produktu o cenie jednostkowej równej 12 zwróci NULL, jeśli istnieje więcej niż jeden produkt o cenie jednostkowej równej 12.
Poniższe zdjęcia pokazują różnicę między relacjami jeden do jednego i jeden do wielu:
Funkcja Only() jest funkcją agregacji. Używa ona wielu rekordów jako danych wejściowych i zwraca tylko jedną wartość, podobnie jak Sum() czyCount(). Qlik Sense wykorzystuje agregacje w praktycznie wszystkich swoich obliczeniach. Wyrażenie w wykresie, wyrażenie sortowania, pole tekstowe, wyszukiwanie zaawansowane i etykieta obliczona to wszystko agregacje i nie można ich obliczyć bez użycia funkcji agregacji.
Co nastąpi, jeśli użytkownik wprowadzi wyrażenie, które nie posiada wyraźnej funkcji agregacji? Na przykład, jeśli wyrażenie sortowania jest ustawione na Date? Lub jeśli istnieje zaawansowane wyszukiwanie klientów, którzy kupili piwo i wino, używając wyrażenia =[Typ produktu]='Piwo i wino'?
W takich przypadkach funkcja Only() wpływa na obliczenia. Jeśli w wyrażeniu nie ma jednoznacznej funkcji agregacji, Qlik Sense używa domyślnie funkcji Only(). W powyższych przypadkach Only(Data) jest używane jako wyrażenie sortowania, a Only([Typ produktu])='Piwo i wino' jest używane jako kryterium wyszukiwania.
Czasami nowe wyrażenie zwraca wynik, którego użytkownik nie oczekuje. Oba powyższe przykłady sprawdzą się w przypadkach, w których istnieje tylko jedna możliwa wartość Date lubProduct Type, ale żaden z nich nie będzie działać w przypadkach, gdy istnieje więcej niż jedna wartość.
Różne wyrażenia wykorzystujące funkcję Only()
Utworzymy cztery KPI z podobnymi wyrażeniami. W ten sposób możemy porównać, jak duży wpływ na wyniki wyboru może mieć posiadanie odniesień otwartego pola lub wstawienie funkcji Only() w innej pozycji w naszym wyrażeniu.
Wewnątrz aplikacji na arkuszu Importance of Only() znajduje się panel filtrowania z Invoice Date jako wymiarem.
Wykonaj następujące czynności:
- Utwórz KPI.
- Kliknij polecenie Dodaj miarę. Kliknij symbol .
Otwiera się edytor wyrażeń. - Wprowadź: Month([Invoice Date])
- Utwórz trzy dodatkowe KPIs z miarami: Month(Only([Invoice Date])), Month(Max([Invoice Date])) oraz Only(Month([Invoice Date])).
- Kliknij przycisk Zastosuj.
W przypadku pustego odniesienia pola funkcja Only() jest wstawiana na najniższym poziomie. Oznacza to, że pierwsze dwa wskaźniki KPI, Month([Invoice Date]) oraz Month(Only([Invoice Date])) będą interpretowane tak samo i zawsze będą dawały ten sam wynik.
Jak widać, trzy z czterech KPI zwracają NULL. Trzeci KPI, Month(Max([Invoice Date])), od razu zwraca wartość, mimo że nie dokonano żadnego wyboru.
Podczas pisania wyrażeń należy zawsze zadać sobie pytanie, jakiej agregacji lub jakiej wartości chce się użyć, jeśli istnieje kilka wartości. Jeśli chce się użyć NULL do zaprezentowania kilku wartości, wyrażenie można pozostawić tak, jak jest. W przypadku liczb lepiej użyć funkcji Sum(), Avg(), Min() lub Max(). W przypadku ciągów znaków warto użyć funkcji Only() lub MinString().
Wykonaj następujące czynności:
- Przestań edytować arkusz.
- W panelu filtrowania wybierz datę w miesiącu styczniu.
- Potwierdź wybór, klikając .
Po dokonaniu jednego wyboru wszystkie wskaźniki KPI zwracają prawidłową odpowiedź. Nawet jeśli wyrażenie zawiera puste odniesienie pola, np. wyrażenie w Month([Invoice Date]), fakt, że dokonaliśmy unikalnego wyboru pozwala na zwrócenie odpowiedniej wartości.
Wykonaj następujące czynności:
- W panelu filtrowania wybierz dodatkową datę w miesiącu styczniu.
- Potwierdź wybór, klikając .
Pierwsze dwa KPI zwracają NULL, a pozostałe dwa KPIzwracają właściwą wartość stycznia. Konkretnie czwarty wskaźnik KPI zwraca prawidłową odpowiedź, ponieważ obie wybrane przez nas daty są datami w styczniu.
Wykonaj następujące czynności:
- W panelu filtrowania wybierz dodatkową datę w miesiącu innym niż styczeń.
- Potwierdź wybór, klikając .
Kiedy dokonuje się wielu wyborów, używając dat w różnych miesiącach, tylko trzeci wskaźnik KPI zwraca wartość. Zwraca on wartość największego miesiąca z dokonanego wyboru, zgodnie z wyrażeniem Month(Max([Invoice Date])). Ponieważ funkcja Only() jest wstawiana automatycznie w wyrażeniach z pustymi odniesieniami pola, nie zawsze można zakładać, że najniższy poziom będzie odpowiedni dla Twojego wyrażenia. Umiejscowienie funkcji Only() jest istotne.
Więcej informacji, patrz Only – funkcja wykresu.