语义链接

单击感兴趣的字段值通常导致显式选择。然而,还可以直接通过语义链接进行选择。这些与字段值类似,除以下区别,即它们是描述对象之间的关系而非对象本身。显示为一列按钮。

当单击语义链接时,将会在其他字段中选择。

语义表格规则

备注: 语义表格未显示在表格查看器中。

语义链接通过加载包含对象间关系的表格创建。

  • 此表格必须包含三列或四列。
  • 语义表格要么包含不同字段字段值之间的关系,要么包含相同字段字段值之间的关系。混合这两种关系是不可接受的。
  • 加载语义表格的 LOADSELECT 语句必须置于 semantic 限定符之后,以表示这并非逻辑表。

通常会使用四列,第一列包含与某些其他字段值相关的字段值,第三列包含相关的字段值。第二列必须包含关系名称,而最后,第四列必须包含反置关系的名称。

如果使用三列,将不会给出反置关系的显式名称。第二列给出的名称是关系和反置关系的名称。然后,这些名称前方或后方都将使用箭头。

如果是相同字段字段值之间的关系,则第一和第三列的名称必须相同。同样,第二和第四列,即关系类型这一列,也必须相同。但是,如果是不同字段字段值之间的关系,则所有列都必须具有不同的名称。

从数据解压缩语义表格

语义表格并非总是作为QlikView之外的表格存在。通过单独的 LOAD语句,从对象的现有表格中解压缩此表格会更加容易。

QlikView示例目录的 presidents 示例中,生成链接 PredecessorSuccessor 的脚本可以是:

Directory presidents;

LOAD * from presdnts.csv (ansi, txt, delimiter

is ',', embedded labels);

Semantic LOAD

No -1 as No,

'Successor' as Relation,

No,

'Predecessor' as Relation

from presdnts.csv (ansi, txt, delimiter is ',',

embedded labels) where No > 1;

第二个LOAD语句会生成一个如右边所示的表格,此表格作为语义表格载入。where子句用于省略第一条记录,因为这将链接第一个 president 到不存在的 0:th president。

还要注意,LOAD语句包含两个标签为 No 的字段以及两个标签为Relation 的字段。这样一个LOAD语句如果用于加载内部表格,会导致脚本执行错误,因为单个内部表格的加载程序要求任何字段都不可有相同的名称。同时,相应的 SELECT语句也不可能用于此目的,因为大多数ODBC 驱动程序也有此要求。相反,如果总裁 (president) 表格位于数据库,则应使用以下结构:

Connect to DataBase;

SELECT * from presdnts;

Alias No2 as No, Relation2 as Relation;

Semantic SELECT

No -1 as No,

'Successor' as Relation,

No as No2,

'Predecessor' as Relation2

from presdnts where No > 1;

presidents 示例只是如何使用语义链接的一个简单例子。这些还可以用于家谱中,其中语义链接可以是诸如表亲,兄弟姐妹,祖母等;或用于公司的员工,其中语义链接可以是诸如 superiorreports tosecretary 等。

使用关联值作为关系名称

有时使用关联字段值作为关系名称更具有描述性。在总裁之例中,您可能希望所有前任位于一列,而所有继任人位于另一列。

要创建这些链接,需要使用以下脚本:

LOAD

No as DuplicateOfNo,

FirstName & ' ' & LastName as Name,

*

from presdnts.csv;

Semantic LOAD

No -1 as No,

FirstName & ' ' & LastName as Successor,

No as DuplicateOfNo,

'Dummy1'

from presdnts.csv where No > 1;

Semantic LOAD

No +1 as No,

FirstName &' ' & LastName as Predecessor,

No as DuplicateOfNo,

'Dummy2'

from presdnts.csv;

单击一个语义链接后,将在第三列字段 DuplicateOfNo中进行选择,该字段在语义表格中始终是显示在语义链接上的总裁数。

起初可能并不明显,但上述结构的反置关系几乎无用。这些结构将会显示总裁名称,单击该名称后,选择所示总裁的前任/继任人。这就是他们被称为 Dummy1Dummy2 并仅使用第一关系(列二)的原因。

由于我们并不希望虚假关系显示在列表框中,所以必须将第二和第四列视为不同的关系类型。这意味着第一和第三列必须具有不同的字段名。这就是我们需要两列来包含总裁数 NoDuplicateOfNo 的原因。

由于我们希望两个不同的显示关系的列表框,因此我们需要两个不同的 semantic语句。

还可使用三列式语义表格进行示范,但这时用户很容易将包含反置关系的列表框搞混淆。