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 Citizens i datamodellen, som kan visas som ett tabelldiagram med hjälp av dimensionerna Employee och Address.

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

Resultat för exempel 3
Employee Address
Bill New York
John Miami
Steve Chicago

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

 

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

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 med värdet Lucy inkluderas det i Employee-fältet. Alltså finns värdet redan när den andra raden kontrolleras.

Resultat för exempel 4
Employee Address
Mary London
Lucy Madrid

Exempel 5:  

I detta exempel visas hur du laddar alla värden.

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;

 

För att göra det möjligt att få alla värden för Lucy ändrades två saker:

  • En föregående laddning till Employees-tabellen infogades där Employee namnändrades till Name.

    Load Employee As Name;

  • Where-villkoret i Citizens ändrades till:

    not Exists (Name, Employee).

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

Resultat för exempel 5
Employee Address
Mary London
Lucy Madrid
Lucy Paris

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