# Exists — funkcja skryptu

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

InformacjaMożna również użyć funkcji Not Exists() w celu określenia, czy wartość pola nie została załadowana, ale zalecana jest ostrożność w przypadku używania funkcji Not Exists() w klauzuli where. Funkcja Exists() sprawdza zarówno poprzednio załadowane tabele, jak i poprzednio załadowane wartości w bieżącej tabeli. Z tego powodu zostanie załadowane tylko pierwsze wystąpienie. W momencie napotkania drugiego wystąpienia wartość jest już załadowana. Więcej informacji można znaleźć w przedstawionych przykładach.

Składnia:

Exists(field\_name [, expr])

Typ zwracanych danych: wartość logiczna

Argumenty:

Argumenty

| Argument | Opis |
| --- | --- |
| field\_name | Nazwa pola, w którym ma być wyszukiwana wartość. Można użyć jawnej nazwy pola bez cudzysłowów.<br><br>Pole musi być już załadowane przez skrypt. Oznacza to, że nie można odwoływać się do pola, które jest ładowane przez klauzulę znajdującą się w dalszej części skryptu. |
| expr | Wartość, która ma zostać sprawdzona pod kątem tego, czy istnieje. Można użyć wartości jawnej albo wyrażenia, które odwołuje się do jednego lub wielu pól w bieżącej instrukcji LOAD.<br><br>InformacjaNie można odwoływać się do pól, które nie są uwzględnione w bieżącej instrukcji LOAD.<br><br>Ten argument jest opcjonalny. Jeśli zostanie pominięty, funkcja będzie sprawdzać, czy wartość field\_name w bieżącym rekordzie już istnieje. |

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/InterRecordFunctions/Exists.htm)

#### Przykłady i wyniki:

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.

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

Przykład 2

`Exists(Employee, 
 'Bill')`

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

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ę, której można użyć w wizualizacji 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 usuwa tabelę Employees w celu uniknięcia pomyłek.

Wyniki

|  |  |
| --- | --- |
| 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 zawiera not: `where not Exists (Employee)`.

To oznacza, że tylko te nazwy z tabeli Citizens, które nie znajdują się w tabeli Employees, są ładowane do nowej tabeli.

Zwróć uwagę, że istnieją dwie wartości dla Lucy w tabeli Citizens, ale tylko jedna jest uwzględniana w tabeli wynikowej. Po załadowaniu pierwszego wiersza z wartością Lucy, jest ona uwzględniona w polu Employee. W związku z tym, gdy sprawdzany jest drugi wiersz, wartość już istnieje.

Wyniki

| Pracownik | Adres |
| --- | --- |
| 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:

* Ładowanie poprzedzające do tabeli Employees zostało wstawione tam, gdzie zmieniono nazwę Employee na Name.

  `
  Load Employee As Name;`

* Warunek Where w Citizens został zmieniony na:

  `not Exists (Name, Employee).`

Powoduje to tworzenie pól dla Name i Employee. Kiedy sprawdzany jest drugi wiersz z Lucy, to wartość ta nadal nie istnieje w Name.

Wyniki

| Pracownik | Adres |
| --- | --- |
| Mary | London |
| Lucy | Madrid |
| Lucy | Paris |