Gå till huvudinnehåll

Exists - skriptfunktion

Exists() avgör om ett specifikt fältvärde redan har laddats in i fältet i laddningsskriptet. Funktionen returnerar TRUE eller FALSE och kan alltså användas i where-satsen i en LOAD-sats eller en IF-funktion.

Anteckning om informationDu kan även använda Not Exists() för att avgöra om ett fältvärde inte har laddats, men du bör vara försiktig med att använda Not Exists() i en where-sats. Funktionen Exists() testar både tidigare laddade tabeller och tidigare laddade värden i den aktuella tabellen. Alltså laddas bara den första förekomsten. När den andra förekomsten påträffas har värdet redan laddats. Mer information finns i exemplen.

Syntax:  

Exists(field_name [, expr] )

Typ av returdata: Boolesk

Argument:  

Exists-argument
Argument Beskrivning
field_name

Namnet på det fält du vill söka efter ett värde i. Du kan använda ett explicit fältnamn utan citattecken.

Fältet måste redan vara laddat av skriptet. Det innebär att du inte kan referera till ett fält som laddas i en sats senare i skriptet.

expr

Värdet som du vill kontrollera om det finns. Du kan använda ett explicit värde eller ett uttryck som refererar till ett eller flera fält i den aktuella LOAD-satsen.

Anteckning om informationDu kan inte referera till fält som inte finns med i den aktuella LOAD-satsen.

Det här argumentet är valfritt. Om du utesluter det kommer funktionen att kontrollera om värdet för field_name i den aktuella posten redan finns.

Exempel 1:  

Exists (Employee)

Returnerar -1 (True) om fältets värde Employee i den aktuella posten redan finns i en tidigare läst post som innehåller detta fält.

Exempel 2:  

Exists(Employee, 'Bill')

Returnerar -1 (True) om fältvärdet 'Bill' hittas i det aktuella innehållet i fältet Employee.

Satserna Exists (Employee, Employee) och Exists (Employee) är ekvivalenta.

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

Detta resulterar i en tabell med namnet EmployeeAddresses i datamodellen, som kan visas som ett tabelldiagram med hjälp av dimensionerna Employee och Address.

where-satsen: where Exists (Employee, Name), betyder att enbart namnen från tabellen Citizens som också finns i Employees laddas till den nya tabellen. Satsen Drop avlägsnar de tillfälliga tabellerna Employees och Citizens för att undvika sammanblandning.

Resultat för exempel 3
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Exempel 4:  

Ersätter satsen i exempeldata i det föregående exemplet som bygger tabellen EmployeeAddresses med följande, med hjälp av where not Exists.

NonEmployee:

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

 

where-satsen innehåller: not: where not Exists (Employee, Name).

Det betyder att enbart de namn från tabellen Citizens som inte finns i Employees laddas in i den nya tabellen.

Observera att det finns två värden för Lucy i tabellen Citizens, men bara ett inkluderas i resultattabellen. När du laddar den första raden inkluderas det första värdet i Employee-symboltabellen. Alltså finns värdet redan när den andra raden kontrolleras.

I nästa exempel visas hur du laddar alla värden.

Resultat för exempel 4
EmployeeAddress
MaryLondon
LucyMadrid

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

För att du ska kunna få alla värden för Lucy måste du ändra två saker:

  • Lägg till ett inledande Load för Employees, där du ändrar namnet för Employee till Name.

    Load Employee As Name, ID, Salary;

  • Ändra Where-villkoret i Citizens till:

    not Exists (Name, Employee).

Detta skapar olika symboltabeller för Name och Employee. När andra raden för Lucy kontrolleras finns det fortfarande inte i Name.

Resultat för exempel 5
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

Data som används i exemplet:

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

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!

Gå med i programmet Analytics Modernization

Remove banner from view

Modernisera utan att kompromissa med dina värdefulla QlikView-appar med programmet för analysmodernisering. Klicka här för mer information eller ta kontakt: ampquestions@qlik.com