# 语义链接

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

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

## 语义表格规则

信息注释语义表格未显示在表格查看器中。

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

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

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

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

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

## 从数据解压缩语义表格

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

在 QlikView 示例目录的 presidents 示例中，生成链接 Predecessor 和 Successor 的脚本可以是：

`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 示例只是如何使用语义链接的一个简单例子。这些还可以用于家谱中，其中语义链接可以是诸如表亲，兄弟姐妹，祖母等；或用于公司的员工，其中语义链接可以是诸如 superior、reports to、secretary 等。

## 使用关联值作为关系名称

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

要创建这些链接，需要使用以下脚本：

`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 中进行选择，该字段在语义表格中始终是显示在语义链接上的总裁数。

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

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

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

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