Semantische koppelingen

Selecties worden gewoonlijk uitdrukkelijk gemaakt door te klikken op de veldwaarden die van belang zijn. Er is echter ook een manier om selecties indirect te maken met behulp van semantische koppelingen. Deze koppelingen lijken op veldwaarden, met het verschil dat ze de relaties tussen de objecten beschrijven in plaats van de objecten zelf. Ze worden als een lijst met knoppen weergegeven.

Wanneer u op een semantische koppeling klikt, wordt in een ander veld een selectie gemaakt.

Regels voor semantische tabellen

Opmerking: Semantische tabellen worden niet weergegeven in de tabelweergave.

Semantische koppelingen worden gemaakt door tabellen met de relaties tussen de objecten te laden.

  • De tabel moet exact drie of vier kolommen bevatten.
  • Een semantische tabel moet relaties bevatten tussen veldwaarden van verschillende velden of tussen veldwaarden van hetzelfde veld. Een combinatie van deze twee is niet toegestaan.
  • De LOAD- of SELECT-opdracht die een semantische tabel laadt, moet worden voorafgegaan door de kwalificatie semanticom aan te geven dat het niet om een logische tabel gaat.

Doorgaans worden vier kolommen gebruikt. De eerste kolom bevat de veldwaarden die een relatie hebben met een andere veldwaarde en de derde kolom met de gerelateerde veldwaarde. De tweede kolom moet de namen van de relaties bevatten en de vierde kolom de namen van de omgekeerde relaties.

Bij het gebruik van drie kolommen kunnen geen expliciete namen voor de omgekeerde relaties worden opgegeven. De namen in de tweede kolom worden dan gebruikt voor zowel de relatie als de omgekeerde relatie. De namen worden dan voorafgegaan of gevolgd door pijlen.

Bij relaties tussen veldwaarden van hetzelfde veld moeten de eerste en derde kolom dezelfde naam hebben. Bij relaties tussen veldwaarden van hetzelfde veld moeten de eerste en derde kolom dezelfde naam hebben. Ook de namen van de tweede en vierde kolom (het type relaties) moeten aan elkaar gelijk zijn. Bij relaties tussen veldwaarden van verschillende velden moeten echter alle kolommen een andere naam hebben.

 Een semantische tabel uit gegevens extraheren

De semantische tabel hoeft niet altijd te bestaan als een tabel buiten QlikView. Het geeft meer flexibiliteit om deze tabel te extraheren uit de bestaande tabel met objecten via een afzonderlijke LOAD-opdracht.

In het voorbeeld presidents in de directory met voorbeelden van QlikView, kan het script dat de koppelingen Predecessor en Successor genereert, er als volgt uitzien:

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;

De tweede LOAD-opdracht resulteert in een tabel zoals rechts is afgebeeld, die als semantische tabel wordt geladen. De where-clausule wordt gebruikt om de eerste record weg te laten, anders zou de eerste president worden gekoppeld aan de niet-bestaande 0de president.

Denk eraan dat deze LOAD-opdracht twee velden bevat die gelabeld zijn als No en twee velden als Relation. Een dergelijke LOAD-opdracht zou bij het laden van een interne tabel een scriptuitvoeringsfout veroorzaken, omdat geen van de velden in dat geval dezelfde naam mag hebben. De corresponderende SELECT-opdracht is evenmin mogelijk omdat voor de meeste ODBC-stuurprogramma's dezelfde vereiste geldt. In plaats daarvan gebruikt u de volgende structuur als de tabel met presidenten zich bevindt in een database:

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;

Het voorbeeld met de presidenten is slechts een eenvoudig voorbeeld van het gebruik van semantische koppelingen. Deze kunnen ook worden gebruikt in de genealogie, waar semantische koppelingen bijvoorbeeld neef, broer, grootmoeder, etc. kunnen zijn, of voor mensen in bedrijven waar de semantische koppelingen bijvoorbeeld superior, reports to, secretary etc. kunnen zijn

 De gerelateerde waarden als relatienamen gebruiken

Soms is het meer beschrijvend om de gerelateerde veldwaarde als naam van de relatie te gebruiken. In het geval van de presidenten wilt u alle voorgangers mogelijk in de ene kolom en alle opvolgers in de andere kolom weergeven:

Om deze koppelingen te maken, is het volgende script vereist:

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;

Wanneer u op een semantische koppeling klikt, wordt een selectie gemaakt in het veld van de derde kolom, DuplicateOfNo, dat in de semantische tabel altijd het nummer is van de president die in de semantische koppeling wordt weergegeven.

Hoewel dit niet direct voor de hand lijkt te liggen, zijn de omgekeerde relaties in de bovenstaande constructie vrijwel nutteloos. De naam van een president wordt weergegeven en door erop te klikken wordt de voorganger/opvolger geselecteerd van die president. Daarom heten ze Dummy1 en Dummy2 en wordt alleen de eerste relatie (kolom twee) gebruikt.

De dummy-relaties moeten niet in keuzelijsten worden getoond, zodat de tweede en vierde kolom als een ander type relatie moet worden behandeld. Dit betekent dat de eerste en derde kolom andere veldnamen moeten hebben. Daarom hebben we ook twee kolommen met het nummer van de president, No en DuplicateOfNo.

Er zijn twee verschillende semantic-opdrachten vereist, omdat we twee verschillende keuzelijsten met relaties willen.

Dit voorbeeld gaat ook op voor semantische tabellen met drie kolommen, maar de keuzelijsten met de omgekeerde relaties zal de gebruiker waarschijnlijk in verwarring brengen.