Ir para conteúdo principal

Exists - função de script

Exists() determina se um valor de campo específico já foi carregado no campo no script de carregamento. A função retorna TRUE ou FALSE, de forma que ela possa ser usada na cláusula wherede um comando LOAD ou de uma função IF.

Nota informativaVocê também pode usar Not Exists() para determinar se um valor de campo não foi carregado, mas convém ter cautela se você usar Not Exists() em uma cláusula Where. A função Exists() testa tabelas carregadas anteriormente e valores carregados anteriormente na tabela atual. Portanto, apenas a primeira ocorrência será carregada. Quando a segunda ocorrência for encontrada, o valor já estará carregado. Veja os exemplos para obter mais informações.

Sintaxe:  

Exists(field_name [, expr] )

Tipo de dados de retorno: Booleano

Argumentos:  

Argumentos Exists
Argumento Descrição
field_name

O nome do campo em que você deseja procurar um valor. É possível usar um nome de campo explícito sem aspas.

O campo já deve estar carregado pelo script. Isso significa que você não pode fazer referência a um campo carregado em uma cláusula mais abaixo no script.

expr

O valor que você deseja verificar, se ele existir. É possível usar um valor explícito ou uma expressão que faça referência a um ou vários campos na instrução de load atual.

Nota informativaNão é possível fazer referência a campos que não estejam incluídos na instrução de load atual.

Esse argumento é opcional. Se você o omitir, a função verificará se o valor de field_name no registro atual já existe.

Exemplo 1:  

Exists (Employee)

Retorna -1 (True) se o valor do campo Employee no registro atual já existir em qualquer registro lido anteriormente que contenha esse campo.

Exemplo 2:  

Exists(Employee, 'Bill')

Retorna -1 (True) se o valor de campo 'Bill' for encontrado no conteúdo atual do campo Employee.

Os comandos Exists (Employee, Employee) e Exists (Employee) são equivalentes.

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

Isso resulta em uma tabela chamada EmployeeAddresses no modelo de dados, que pode ser visualizado como um gráfico de tabela usando as dimensões Employee e Address.

A cláusula where: where Exists (Employee, Name), significa que apenas os nomes da tabelaCitizens que também estão em Employees são carregados na nova tabela. O comando Drop remove as tabelas temporárias Employees e Citizens para evitar confusão.

Resultados do exemplo 3
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Exemplo 4:  

Substituindo o comando nos dados de amostra do exemplo anterior que constrói a tabela EmployeeAddresses pelo seguinte, usando where not Exists.

NonEmployee:

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

 

A cláusula where inclui not: where not Exists (Employee, Name).

Isso significa que apenas os nomes da tabela Citizens que não estiverem em Employees serão carregados na nova tabela.

Observe que existem dois valores para Lucy na tabela Citizens, mas apenas um é incluído na tabela de resultados. Quando você carregar a primeira linha, o valor será incluído na tabela de símbolos Employee. Portanto, quando a segunda linha for verificada, o valor passará a existir.

O próximo exemplo mostra como carregar todos os valores.

Resultados do exemplo 4
EmployeeAddress
MaryLondon
LucyMadrid

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

Para poder obter todos os valores para Lucy, você precisa mudar duas coisas:

  • Adicione um carregamento anterior a Employees, onde você renomeará Employee para Name.

    Load Employee As Name, ID, Salary;

  • Altere a condição Where em Citizens para:

    not Exists (Name, Employee).

Isso criará tabelas de símbolos diferentes para Name e Employee. Quando a segunda linha para Lucy for verificada, isso ainda não existirá em Name.

Resultados do exemplo 5
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

Dados usados no exemplo:

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

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!

Participe do Programa de Modernização do Analytics

Remove banner from view

Modernize sem comprometer seus valiosos aplicativos QlikView com o Programa de Modernização do Analytics. Clique aqui para mais informações ou entre em contato: ampquestions@qlik.com