语义链接
单击感兴趣的字段值通常导致显式选择。然而,还可以直接通过语义链接进行选择。这些与字段值类似,除以下区别,即它们是描述对象之间的关系而非对象本身。显示为一列按钮。
当单击语义链接时,将会在其他字段中选择。
语义表格规则
语义链接通过加载包含对象间关系的表格创建。
- 此表格必须包含三列或四列。
- 语义表格要么包含不同字段字段值之间的关系,要么包含相同字段字段值之间的关系。混合这两种关系是不可接受的。
- 加载语义表格的 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 语句。
还可使用三列式语义表格进行示范,但这时用户很容易将包含反置关系的列表框搞混淆。