# 語意連結

一般明確選取的方式是按一下感興趣的欄位值。不過，還有另外一種方式是透過語意連結來間接選取。語意連結與欄位值相似，但差別在於所描述的是物件之間的關聯，而非描述物件本身。它們會顯示為一列按鈕。

按一下語意連結時，會在另一個欄位做出選取。

## 語意表格的規則

資訊備註語意表格不會顯示在表格檢視器中。

建立語意連結的方式是載入包含物件之間關聯的表格。

* 該表格必須包含剛好三個或四個資料行。
* 語意表格必須包含不同欄位的欄位值之間的關聯，或相同欄位的欄位值之間的關聯。但不接受兩者的混合體。
* 載入語意表格的 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 子句是用於省略第一筆記錄，因為這會將第一任總統連結到不存在的第 0 任總統。

另外請注意，此 LOAD 陳述式包含兩個標籤為 No 的欄位，以及兩個標籤為 Relation 的欄位。如果用於載入內部表格，這樣的 LOAD 陳述式會造成指令碼執行錯誤，因為單一內部表格的載入程序會要求欄位不要有相同的名稱。也不可以使用對應的 SELECT 陳述式，因為大部分的 ODBC 驅動程式也會有同樣的要求。所以，如果該總統表格位於資料庫中，就應改用下列結構：

`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;`

此總統範例只是如何使用語意連結的一個簡單範例。這也可用於家譜，其中語意連結可以是表兄弟姊妹、兄弟姊妹、祖母等，或者用於公司中的員工，其中語意連結可以是 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 陳述式。

此範例也可利用含三個資料行的語意表格，但包含反向關聯的列表框很可能會讓使用者感到困惑。