語意連結
一般明確選取的方式是按一下感興趣的欄位值。不過,還有另外一種方式是透過語意連結來間接選取。語意連結與欄位值相似,但差別在於所描述的是物件之間的關聯,而非描述物件本身。它們會顯示為一列按鈕。
按一下語意連結時,會在另一個欄位做出選取。
語意表格的規則
建立語意連結的方式是載入包含物件之間關聯的表格。
- 該表格必須包含剛好三個或四個資料行。
- 語意表格必須包含不同欄位的欄位值之間的關聯,或相同欄位的欄位值之間的關聯。但不接受兩者的混合體。
- 載入語意表格的 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 陳述式。
此範例也可利用含三個資料行的語意表格,但包含反向關聯的列表框很可能會讓使用者感到困惑。