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.
Sintaxe:
Exists(field_name [, expr] )
Tipo de dados de retorno: Booleano
Argumentos:
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:
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.
Employee | Address |
---|---|
Bill | New York |
John | Miami |
Steve | Chicago |
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.
Employee | Address |
---|---|
Mary | London |
Lucy | Madrid |
Exemplo 5:
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.
Employee | Address |
---|---|
Mary | London |
Lucy | Madrid |
Lucy | Paris |
Dados usados no exemplo: