跳到主要内容

Exists - 脚本函数

Exists() 用于确定是否已经将特定字段值加载到加载脚本中的字段。此函数用于返回 TRUEFALSE,这样它可以用于 LOAD 语句或 IF 函数中的 where 子句。

信息注释也可以使用 Not Exists() 来确定字段值是否尚未加载,但如果在 where 子句中使用 Not Exists() 则建议多加小心。Exists() 函数可测试以前加载的表和当前表中以前加载的值。所以,只会加载第一次出现的项。如果遇到第二次出现的项,值已被加载。更多信息请参见示例。

语法:  

Exists(field_name [, expr] )

返回数据类型:布尔值

参数:  

Exists 参数
参数 说明
field_name

要在其中搜索值的字段的名称。可以使用不带引号的显式字段名称。

字段必须已经由脚本加载。这意味着,不能引用在脚本中后面的子句中加载的字段。

expr

要检查其是否存在的值。可以使用显式值或引用当前 LOAD 语句中一个或多个字段的表达式。

信息注释不能引用当前 LOAD 语句中未包含的字段。

该参数是可选的。如果省略它,函数将检查当前记录中 field_name 的值是否已存在。

示例 1:  

Exists (Employee)

如果当前记录中的字段值 Employee 已存在于任何以前已读入的包含该字段的记录,则返回 -1 (True)。

示例 2:  

Exists(Employee, 'Bill')

如果在字段 Employee 的当前内容中发现字段值 'Bill',则返回 -1 (True)。

语句 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 的表格,可将该表格看作是使用维度 EmployeeAddress 的表格图表。

where 子句:where Exists (Employee, Name),是指只能从表格 Citizens 中将同时位于 Employees 中的姓名加载到新表格。Drop 语句将删除临时表格 EmployeesCitizens 以避免混淆。

示例 3 结果
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

示例 4:  

使用where not Exists,用以下内容替换构建表格 EmployeeAddresses 的之前示例中的示例数据内的语句。

NonEmployee:

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

 

where 子句包括 not: where not Exists (Employee, Name)

这意味着只能从表格 Citizens 将不在 Employees 中的姓名加载到新表格。

请注意,Citizens 表中有两个 Lucy 的值,但结果表中只包含一个。加载第一行时,该值将包含在 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 的所有值,您需要进行两项更改:

  • 向您在其中将 Employee 重命名为 NameEmployees 添加前置加载。

    Load Employee As Name, ID, Salary;

  • Citizens 中的 Where 条件更改为:

    not Exists (Name, Employee)。

这样将为 NameEmployee 创建不同的符号表格。如果检查 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