Exists - scriptfunctie
Exists() bepaalt of een specifieke veldwaarde al is geladen in het veld in het load-script. De functie retourneert TRUE of FALSE, zodat deze kan worden gebruikt in de where-clausule van een LOAD -opdracht of een IF-functie.
Syntaxis:
Exists(field_name [, expr] )
Retourgegevenstype: Booleaanse waarde
Argumenten:
Argument | Beschrijving |
---|---|
field_name |
De naam van het veld waarin u een waarde wilt zoeken. U kunt een expliciete veldnaam gebruiken zonder aanhalingstekens. Het veld moet al door het script zijn geladen. Dit betekent dat u niet naar een veld kunt verwijzen dat in een clausule verderop in het script wordt geladen. |
expr |
De waarde waarvan u wilt controleren of deze bestaat. U kunt een expliciete waarde gebruiken of een uitdrukking die verwijst naar een of meer velden in de huidige laadinstructie. InformatieU kunt niet verwijzen naar velden die niet in de huidige laadinstructie zijn opgenomen.
Dit argument is optioneel. Als u dit weglaat, controleert de functie of de waarde van field_name al bestaat in het huidige record. |
Voorbeeld 1:
Exists (Employee)
Retourneert -1 (True) als de waarde van het veld Employee in de huidige record al bestaat in een eerder gelezen record met dat veld.
Voorbeeld 2:
Exists(Employee, 'Bill')
Retourneert -1 (True) als de veldwaarde 'Bill' wordt gevonden in de huidige inhoud van het veld Employee.
De opdrachten Exists (Employee, Employee) en Exists (Employee) zijn equivalent.
Voorbeeld 3:
Dit resulteert in een tabel met de naam EmployeeAddresses in het gegevensmodel, die kan worden bekeken als een tabelgrafiek met de dimensies Employee en Address.
De clausule where: where Exists (Employee, Name), betekent dat alleen de namen uit de tabel Citizens die tevens in Employees voorkomen in de nieuwe tabel worden geladen. Met de opdracht Drop worden de tijdelijke tabellen Employees en Citizens verwijderd om verwarring te voorkomen.
Employee | Address |
---|---|
Bill | New York |
John | Miami |
Steve | Chicago |
Voorbeeld 4:
De opdrachten in de voorbeeldgegevens in het vorige voorbeeld waarmee de tabel EmployeeAddresses wordt samengesteld worden hierbij vervangen door de volgende, met behulp van where not Exists.
NonEmployee:
Load Name as Employee, Address Resident Citizens where not Exists (Employee, Name);
De clausule where bevat not: where not Exists (Employee, Name).
Dit betekent dat alleen de namen uit de tabel Citizens die niet in Employees voorkomen in de nieuwe tabel worden geladen.
Er zijn twee waarden voor Lucy in de tabel Citizens, maar slechts één waarde wordt opgenomen in de resultaattabel. Als u de eerste rij laadt, wordt de waarde opgenomen in de symbooltabel Employee. Als de tweede regel wordt gecontroleerd, is de waarde nu aanwezig.
In het volgende voorbeeld wordt getoond hoe u alle waarden kunt laden.
Employee | Address |
---|---|
Mary | London |
Lucy | Madrid |
Voorbeeld 5:
U moet twee dingen veranderen om alle waarden voor Lucy te krijgen.
Voeg een voorafgaande load toe aan Employees en wijzig de naam van Employee in Name.
Load Employee As Name, ID, Salary;
Wijzig de Where-conditie in Citizens in:
not Exists (Name, Employee).
Hierdoor worden andere symbooltabellen voor Name en Employee aangemaakt. Als de tweede rij voor Lucy wordt gecontroleerd, is deze nog steeds niet aanwezig in Name.
Employee | Address |
---|---|
Mary | London |
Lucy | Madrid |
Lucy | Paris |
Gebruikte gegevens in voorbeeld: