Zu Hauptinhalt springen

Exists - Skriptfunktion

Exists() bestimmt, ob ein spezifischer Feldwert bereits in das Feld im Ladeskript geladen wurde. Die Funktion gibt TRUE oder FALSE zurück und kann deshalb in der where-Bedingung eines LOAD-Befehls oder einer IF-Funktion verwendet werden.

InformationshinweisSie können auch Not Exists() verwenden, um zu bestimmen, ob ein Feldwert nicht geladen wurde. Es wird jedoch Vorsicht bei der Verwendung von Not Exists() in einer Where-Bedingung empfohlen. Die Funktion Exists() testet sowohl zuvor geladene Tabellen als auch zuvor geladene Werte in der aktuellen Tabelle. Daher wird nur das erste Vorkommen geladen. Wenn ein zweites Vorkommen gefunden wird, ist der Wert bereits geladen. In den Beispielen finden Sie weitere Informationen.

Syntax:  

Exists(field_name [, expr] )

Rückgabedatentyp: Boolesch

Argumente:  

Exists-Argumente
Argument Beschreibung
field_name

Der Name des Felds, in dem Sie nach einem Wert suchen möchten. Sie können einen expliziten Feldnamen ohne Anführungszeichen verwenden.

Das Feld muss bereits vom Skript geladen worden sein. Das bedeutet, dass Sie nicht auf ein Feld verweisen können, das mit einer Bedingung an späterer Stelle im Skript geladen wird.

expr

Der Wert, dessen Vorhandensein Sie prüfen möchten. Sie können einen expliziten Wert oder eine Formel verwenden, die auf ein oder mehrere Felder in der aktuellen load-Anweisung verweist.

InformationshinweisSie können nicht auf Felder verweisen, die nicht in der aktuellen load-Anweisung enthalten sind.

Dieses Argument ist optional. Wenn Sie es auslassen, prüft die Funktion, ob der Wert von field_name in dem aktuellen Datensatz bereits vorhanden ist.

Beispiel 1:  

Exists (Employee)

Liefert -1 (True), wenn der Feldwert Employee im aktuellen Datensatz bereits in einem anderen Datensatz in diesem Feld vorkommt.

Beispiel 2:  

Exists(Employee, 'Bill')

Liefert -1 (True), wenn der Feldwert 'Bill' im aktuellen Inhalt von Feld Employee gefunden wird.

Die Befehle Exists (Employee, Employee) und Exists (Employee) sind gleichwertig.

Beispiel 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;
 

Dies liefert im Datenmodell eine Tabelle EmployeeAddresses, die als Tabellendiagramm mithilfe der Dimensionen Employee und Address angezeigt werden kann.

Die Bedingung where: where Exists (Employee, Name) bedeutet, dass nur Namen aus der Tabelle Citizens, die sich ebenfalls in Employees befinden, in die neue Tabelle geladen werden. Der Befehl Drop entfernt die temporären Tabellen Employees und Citizens, damit es nicht zu Verwechslungen kommt.

Beispiel 3 – Ergebnisse
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Beispiel 4:  

Ersetzen des Befehls in den Beispieldaten im vorherigen Beispiel, die die Tabelle EmployeeAddresses erstellen, mit dem folgenden Befehl unter Verwendung von where not Exists.

NonEmployee:

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

 

Die where-Bedingung enthält not: where not Exists (Employee, Name).

Das bedeutet, dass nur die Namen aus der Tabelle Citizens, die sich nicht in Employees befinden, in die neue Tabelle geladen werden.

Beachten Sie, dass zwei Werte für Lucy in der Tabelle Citizens vorhanden sind, aber nur einer in die Ergebnistabelle eingeschlossen wird. Wenn Sie die erste Zeile laden, wird der Wert in die Employee-Symboltabelle eingeschlossen. Wenn daher die zweite Zeile geprüft wird, ist der Wert bereits vorhanden.

Das nächste Beispiel zeigt, wie alle Werte geladen werden.

Beispiel 4 – Ergebnisse
EmployeeAddress
MaryLondon
LucyMadrid

Beispiel 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;
 

Um alle Werte für Lucy abrufen zu können, müssen Sie zwei Dinge ändern:

  • Fügen Sie einen vorangehenden load-Befehl zu Employees hinzu, wo Sie Employee in Name umbenennen.

    Load Employee As Name, ID, Salary;

  • Ändern Sie die Where-Bedingung in Citizens zu:

    not Exists (Name, Employee).

Dadurch wird eine unterschiedliche Symboltabelle für Name und Employee erstellt. Wenn die zweite Zeile für Lucy geprüft wird, ist der Wert immer noch nicht in Name vorhanden.

Beispiel 5 – Ergebnisse
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

Im Beispiel verwendete Daten:

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 '|');

Hat diese Seite Ihnen geholfen?

Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!

Nehmen Sie am Analyse-Modernisierungsprogramm teil

Remove banner from view

Modernisieren Sie mit dem Analyse-Modernisierungsprogramm, ohne Ihre wertvollen QlikView-Apps zu gefährden. Klicken Sie hier für weitere Informationen oder kontaktieren Sie uns: ampquestions@qlik.com