Przeskocz do zawartości głównej

Exists — funkcja skryptu

Funkcja Exists() określa, czy podana wartość pola została już załadowana w polu w skrypcie ładowania. Funkcja zwraca wartość TRUE lub FALSE, dzięki czemu może zostać użyta w klauzuli where instrukcji LOAD lub funkcji IF.

InformacjaMożna również użyć funkcji Not Exists(), aby określić, czy wartość pola nie została załadowana, ale zalecana jest uwaga w przypadku używania Not Exists() w klauzuli where. Funkcja Exists() testuje zarówno wcześniej załadowane tabele, jak i wcześniej załadowane wartości w bieżącej tabeli. Tak więc tylko pierwsze wystąpienie zostanie załadowane. W momencie napotkania drugiego wystąpienia wartość jest już załadowana. Więcej informacji w przykładach.

Składnia:  

Exists(field_name [, expr] )

Typ zwracanych danych: wartość logiczna

Argumenty:  

Argumenty Exists
Argument Opis
field_name

Nazwa pola, w którym chcesz wyszukać wartość. Można użyć konkretnej nazwy pola bez cudzysłowów.

Pole musi być już załadowane przez skrypt. Oznacza to, że nie można odnosić się do pola, które jest ładowane w klauzuli znajdującej się dalej w skrypcie.

expr

Wartość, której istnienie chcemy sprawdzić. Można użyć konkretnej wartości lub wyrażenia, które odnosi się do jednego lub kilku pól w bieżącej instrukcji LOAD.

InformacjaNie można odnosić się do pól, które nie są zawarte w aktualnej instrukcji LOAD.

Ten argument jest opcjonalny. W przypadku jego pominięcia funkcja sprawdzi, czy wartość field_name w bieżącym rekordzie już istnieje.

Przykład 1:  

Exists (Employee)

Zwraca –1 (True), jeśli wartość pola Employee w bieżącym rekordzie już istnieje w jakimkolwiek wcześniej wczytanym rekordzie zawierającym to pole.

Przykład 2:  

Exists(Employee, 'Bill')

Zwraca –1 (True), jeśli wartość pola 'Bill' występuje w bieżącej zawartości pola Employee.

Instrukcje Exists (Employee, Employee) i Exists (Employee) są równoważne.

Przykład 3:  

Employees: LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where Exists (Employee); Drop Tables Employees;

 

W efekcie otrzymuje się tabelę o nazwie Citizens w modelu danych, którą można wyświetlać jako wykres tabeli przy użyciu wymiarów Employee i Address.

Klauzula where w postaci where Exists (Employee) oznacza, że tylko nazwy z tabeli Citizens, które znajdują się także w tabeli Employees, są ładowane do nowej tabeli. Instrukcja Drop umożliwia usunięcie tabeli tymczasowej Employees w celu uniknięcia pomyłek.

Wyniki przykładu 3
Employee Address
Bill New York
John Miami
Steve Chicago

Przykład 4:  

Employees: Load * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where not Exists (Employee);   Drop Tables Employees;

 

Klauzula where uwzględnia not: where not Exists (Employee).

Oznacza to, że do nowej tabeli ładowane są tylko te nazwy z tabeli Citizens, których nie ma w Employees.

Zauważ, że w tabeli Citizens znajdują się dwie wartości Lucy, ale tylko jedna z nich jest uwzględniona w tabeli wyników. Po załadowaniu pierwszego wiersza wartość Lucy jest umieszczana w polu Employee. W związku z tym, gdy sprawdzany jest drugi wiersz, wartość już istnieje.

Wyniki przykładu 4
Employee Address
Mary London
Lucy Madrid

Przykład 5:  

Ten przykład pokazuje, jak załadować wszystkie wartości.

Employees: Load Employee As Name; LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where not Exists (Name, Employee);   Drop Tables Employees;

 

Aby móc uzyskać wszystkie wartości dla Lucy, zmieniono dwie rzeczy:

  • Wstawiono poprzedzającą instrukcję LOAD w celu ładowania do tabeli Employees, gdzie zmieniono nazwę Employee na Name.

    Load Employee As Name;

  • Warunek Where w Citizens zmieniono na:

    not Exists (Name, Employee).

Powoduje to utworzenie pól dla Name i Employee. Kiedy sprawdzany jest drugi wiersz z Lucy, to nadal nie istnieje w Name.

Wyniki przykładu 5
Employee Address
Mary London
Lucy Madrid
Lucy Paris

Dane zastosowane w przykładzie:

LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|');

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!

Dołącz do Programu Modernizacji Analityki

Remove banner from view

Przeprowadź modernizację bez szkody dla Twoich cennych aplikacji QlikView za pomocą programu Analytics Modernization Program. Kliknij tutaj aby uzyskać więcej informacji lub skontaktuj się z nami: ampquestions@qlik.com