語意連結

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

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

語意表格的規則

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

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

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

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

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