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 EmployeeAddresses 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, Name) oznacza, że tylko nazwy z tabeli Citizens, które znajdują się także w tabeli Employees, są ładowane do nowej tabeli. Instrukcja Drop usuwa tabele tymczasowe Employees i Citizens w celu uniknięcia pomyłek.

Wyniki przykładu 3
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Przykład 4:  

Zastępowanie instrukcji w danych z próby w poprzednim przykładzie służącej do tworzenia tabeli EmployeeAddresses z następującymi danymi, przy użyciu klauzuli where not Exists.

NonEmployee:

Load Name as Employee, Address Resident Citizens where not Exists (Employee, Name);

 

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

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ść ta jest zawarta w tabeli symboli Employee. W związku z tym, gdy sprawdzany jest drugi wiersz, wartość już istnieje.

Następny przykład pokazuje, jak załadować wszystkie wartości.

Wyniki przykładu 4
EmployeeAddress
MaryLondon
LucyMadrid

Przykład 5:  

Employees: Load Employee As Name, ID, Salary; 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, trzeba zmienić dwie rzeczy:

  • Dodaj poprzednie ładowanie do Employees, w którym zmienisz nazwę Employee na Name.

    Załaduj Pracownika jako Nazwisko, Identyfikator, Wynagrodzenie;

  • Zmień warunek Where w Citizens na:

    not Exists (Nazwisko, Pracownik).

W ten sposób zostaną utworzone różne tabele symboli dla Name i Employee. Kiedy sprawdzany jest drugi wiersz dla Lucy, to nadal nie istnieje w Name.

Wyniki przykładu 5
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

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