Anlamsal bağlantılar
Seçimler normalde, ilgilenilen alan değerlerine tıklanarak açık bir şekilde yapılır. Ancak, seçimleri dolaylı olarak anlamsal bağlantılar üzerinden yapmanın da bir yolu mevcuttur. Bunlar alan değerlerine benzer, ancak nesnelerin kendilerini açıklamak yerine, nesneler arasındaki ilişkileri açıklamasıyla farklılık gösterir. Bunlar bir düğme listesi olarak görünür.
Bir anlamsal bağlantıya tıklandığında, başka bir alanda bir seçim yapılır.
Anlamsal tablolara yönelik kurallar
Anlamsal bağlantılar, nesneler arasındaki ilişkileri içeren tablolar yüklenerek oluşturulur.
- Tablo tam olarak üç veya dört sütun içermelidir.
- Bir anlamsal tablo, farklı alanların alan değerleri arasındaki veya aynı alanın alan değerleri arasındaki ilişkileri içermelidir. Bu ikisinin karışımı kabul edilmez.
- Bunun bir mantıksal tablo olmadığını göstermek için, bir anlamsal tabloyu yükleyen LOAD veya SELECT deyiminden önce semantic niteleyicisi gelmelidir.
Normalde dört sütun kullanılır; bunlardan birincisi başka bir alan değeriyle ilişkisi olan alan değerlerini ve üçüncüsü ilgili alan değerini içerir. İkinci sütun, ilişkilerin adlarını içermeli ve son olarak dördüncü sütun, ters ilişkilerin adlarını içermelidir.
Üç sütun kullanılırsa, ters ilişkiler için açık adlar verilemez. İkinci sütunda verilen adlar hem ilişki hem de ters ilişki için kullanılır. Bu durumda adların öncesinde veya sonrasında oklar bulunur.
İlişkiler, aynı alanın alan değerleri arasındaysa, birinci ve üçüncü sütunlar aynı ada sahip olmalıdır. Ayrıca ikinci ve dördüncü sütunun adı, yani ilişkilerin türleri de aynı olmalıdır. Ancak ilişkiler, farklı alanların alan değerleri arasındaysa, tüm sütunlar farklı adlara sahip olmalıdır.
Verilerden anlamsal tablo çıkarma
Anlamsal tablonun her zaman QlikView dışındaki bir tablo olarak var olması gerekmez. Bu tablonun var olan nesne tablosundan ayrı bir LOAD deyimiyle çıkarılması daha esnek bir yaklaşımdır.
QlikView örnek dizinindeki presidents örneğinde, Predecessor ve Successor bağlantılarını oluşturmaya yönelik kod şu şekilde olabilir:
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;
İkinci LOAD deyimi, sağdakine benzeyen bir tabloyla sonuçlanır ve bu tablo bir anlamsal tablo olarak yüklenir. where cümlesi birinci kaydı atlamak için kullanılır; bunun nedeni, bunun birinci başkanı var olmayan 0. başkana bağlayacak olmasıdır.
Ayrıca, bu LOAD deyiminin No olarak etiketlenmiş iki alan ve Relation olarak etiketlenmiş iki alan içerdiğine dikkat edin. Tek dahili tabloya yönelik yükleme aşaması, alanlardan hiçbirinin aynı ada sahip olmamasını gerektirdiğinden, bu tür bir LOAD deyimi, bir dahili tabloyu yüklemek için kullanılması durumunda kod yürütme hatasına neden olur. Çoğu ODBC sürücüsü de bunu gerekli kıldığından, karşılık gelen SELECT deyimi de mümkün değildir. Bunun yerine, başkanlar tablosu bir veritabanındaysa aşağıdaki yapı kullanılmalıdır:
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;
Başkanlar örneği, anlamsal bağlantıları kullanmaya yönelik tek bir basit örnek niteliğindedir. Bunlar ayrıca, anlamsal bağlantıların örneğin kuzen, kardeş, büyükanne vb. olabileceği soybilimde veya anlamsal bağlantıların örneğin superior, reports to, secretary vb. olabileceği şirketlerdeki kişiler için de kullanılabilir.
İlgili değerleri ilişki adları olarak kullanma
Bazen ilişkinin adı olarak ilgili alan değerinin kullanılması daha açıklayıcı olacaktır. Başkanlarla ilgili olan durumda, tüm öncelleri tek sütunda ve tüm ardılları başka bir sütunda isteyebilirsiniz:
Bu bağlantıları oluşturmak için şu kod gereklidir:
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;
Bir anlamsal bağlantıya tıklandığında, DuplicateOfNo üçüncü sütun alanında bir seçim yapılır; bu, anlamsal tabloda her zaman anlamsal bağlantıda gösterilen başkanın sayısıdır.
Bu başlangıçta belirgin olmayabilir, ancak yukarıdaki yapıda ters ilişkiler neredeyse yararsızdır. Bunlar bir başkanın adını gösterir ve tıklandığında, gösterilen başkanın öncelini/ardılını seçer. Dummy1 ve Dummy2 olarak adlandırılmalarının ve yalnızca birinci ilişkinin (sütun iki) kullanılmasının nedeni budur.
İşlevsiz ilişkilerin liste kutularında görünmesini istemediğimizden, ikinci ve dördüncü sütunları farklı ilişki türleri olarak ele almamız gerekir. Bu, birinci ve üçüncü sütunların farklı alan adlarına sahip olması gerektiği anlamına gelir. Başkan sayısını içeren No ve DuplicateOfNo adlı iki sütuna sahip olmamızın nedeni budur.
İlişkileri içeren iki farklı liste kutusu istediğimizden, iki farklı semantic deyimi gereklidir.
Bu örnek, üç sütunlu anlamsal tablolarla da oluşturulabilir; ancak bu durumda ters ilişkileri içeren liste kutuların büyük olasılıkla kullanıcının kafasını karıştırır.