Перейти к основному содержимому

Exists — функция скрипта

Функция Exists() определяет, загружено ли определенное значение поля в поле в скрипте загрузки. Функция возвращает значение TRUE или FALSE, таким образом, ее можно использовать в предложении where оператора LOAD или функции IF.

Примечание об информацииМожно также использовать Not Exists() для определения, не было ли значение поля загружено, но требуется осторожность, если Not Exists() используется в предложении where. Функция Exists() проверяет как ранее загруженные таблицы, так и ранее загруженные значения в текущей таблице. Поэтому будет загружено только первое вхождение. При обнаружении второго вхождения значение уже загружено. Для получения дополнительной информации посмотрите примеры.

Синтаксис:  

Exists(field_name [, expr] )

Тип возврата данных: Булево значение

Аргументы:  

аргументы Exists
Аргумент Описание
field_name

Имя поля, в котором нужно искать значение. Можно использовать явное имя поля без кавычек.

Поле уже должно быть загружено скриптом. Это означает, нельзя обратиться к полю, которое загружено в предложении, находящемся далее вниз в скрипте.

expr

Значение, существование которого требуется проверить. Можно использовать явное значение или выражение, которое ссылается на одно или несколько полей в текущем операторе load.

Примечание об информацииНа поля, которые не включены в текущий оператор load, сослаться нельзя.

Этот аргумент дополнительный. Если его опустить, функция проверит, существует ли значение field_name в текущей записи.

Пример 1:  

Exists (Employee)

Возвращает -1 (True), если значение поля Employee в текущей записи уже существует в любой ранее прочитанной записи, содержащей это поле.

Пример 2:  

Exists(Employee, 'Bill')

Возвращает -1 (True), если значение поля 'Bill' найдено в текущем содержимом поля Employee.

Операторы Exists (Employee, Employee) и Exists (Employee) эквивалентны.

Пример 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;
 

В результате в модели данных будет получена таблица с именем EmployeeAddresses, которую можно просмотреть как диаграмму таблицы с помощью измерений Employee и Address.

Предложение where: where Exists (Employee, Name), означает только имена из таблицы Citizens, загруженные в новую таблицу, которые также находятся в таблице Employees. Оператор Drop удаляет временные таблицы Employees и Citizens во избежание неопределенности.

Результаты примера 3
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Пример 4:  

Замена оператора в данных образца в предыдущем примере, образующего таблицу EmployeeAddresses, следующим оператором where not Exists.

NonEmployee:

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

 

Предложение where включает not: where not Exists (Employee, Name).

Это означает, что только имена из таблицы Citizens, которые не находятся в таблице Employees, загружаются в новую таблицу.

Обратите внимание, что есть два значения для Lucy в таблице Citizens, но только одно включается в результирующую таблицу. При загрузке первой строки значение включается в таблицу символов Employee. Следовательно, когда проверяется вторая строка, значение теперь существует.

Следующий пример показывает, как загрузить все значения.

Результаты примера 4
EmployeeAddress
MaryLondon
LucyMadrid

Пример 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;
 

Для получения всех значений для Lucy нужно изменить две вещи:

  • Добавьте предшествующий оператор load в Employees, где нужно переименовать Employee в Name.

    Load Employee As Name, ID, Salary;

  • Измените условие Where в Citizens на:

    not Exists (Name, Employee).

В результате создадутся различные таблицы символов для Name и Employee. Когда проверяется вторая строка для Lucy, она по-прежнему не существует в Name.

Результаты примера 5
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

Данные, используемые в примере:

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

Присоединяйтесь к программе модернизации аналитики

Remove banner from view

Модернизируйте ваши важные приложения QlikView без ущерба с помощью программы модернизации аналитики. Щелкните здесь для получения дополнительной информации или свяжитесь с нами: ampquestions@qlik.com