セマンティック リンク

通常は、目的の項目値をクリックすることで、明示的に選択を行います。一方、セマンティック リンクを使用して、間接的に選択を行う方法もあります。セマンティック リンクは、項目値に似ていますが、オブジェクト自体ではなく、オブジェクト間の関係を表す点が異なります。セマンティック リンクは、ボタンのリストとして表示されます。

セマンティック リンクをクリックすると、他の項目で選択が行われます。

セマンティック テーブルのルール

注: セマンティック テーブルは、テーブル ビューアーでは表示されません。

セマンティック リンクは、オブジェクト間のリレーションを含むテーブルをロードすることで作成されます。

  • このテーブルは、厳密に3つまたは4つの列を含む必要があります。
  • セマンティック テーブルには、異なる項目の項目値間のリレーション、または同じ項目の項目値間のリレーションのいずれかが含まれる必要があります。この2つを混在させることはできません。
  • セマンティック テーブルをロードする LOADまたは SELECT ステートメントは、その前に semantic 修飾子を使用して、論理テーブルでないことを示す必要があります。

通常は、4つの列が使用されます。1列目には、他の項目値へのリレーションを持つ項目値が含まれ、3列目には、関連付けられた項目値が含まれます。2列目には、リレーションの名前が含まれる必要があります。4列目には、逆リレーションの名前が含まれる必要があります。

3つの列を使用する場合は、逆リレーションの明示的な名前は指定できません。2列目に提供された名前がリレーションと逆リレーションの両方で使用されます。この名前の前または後に矢印が付けられます。

同じ項目内の項目値間にリレーションが存在する場合、1列目と3列目は同じ名前にする必要があります。また、2列目と4列目の名前、つまりリレーションのタイプ も同じにする必要があります。ただし、リレーションが異なる項目の項目値間のものである場合は、すべての列は相互に異なる名前である必要があります。

データからのセマンティック テーブルの抽出

セマンティック テーブルは、必ずしもQlikViewの外部のテーブルとして存在する必要はありません。個別の LOADステートメントを使用して、オブジェクトの既存のテーブルからこのテーブルを抽出する方が柔軟性は高くなります。

presidentsのサンプル ディレクトリに含まれる QlikView の例では、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;

2つ目のLOADステートメントは、右の図のようなテーブルを生成します。このテーブルはセマンティック テーブルとしてロードされます。最初のレコードでは、存在しない0番目の社長に最初の社長がリンクされるため、where句を使用して最初のレコードを取り除きます。

この LOADステートメントには、No というラベルの2つの項目とRelation というラベルの2 つの項目が含まれることにも注目してください。このようなLOADステートメントを使用して内部テーブルをロードすると、スクリプト実行エラーが発生します。1つの内部テーブルのロード手順では、同じ名前の項目が存在していないことが要求されるためです。同様に、このような SELECTステートメントも、ほとんどのODBC ドライバの要件に合わせるため、使用できません。代わりに、presidents テーブルがデータベース内に存在する場合は、次の構造を使用してください。

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;

presidentsの例は、セマンティック リンクを使用するための単なる一例です。これらのセマンティック リンクは、家系図でも使用できます。この場合、セマンティック リンクは、いとこ(cousin)、兄弟姉妹(sibling)、祖母 (grandmother)などになります。会社における社員の場合、セマンティック リンクは、superior(上役)、reports to(直属の上司)、secretary(秘書)などになります。

関連する値をリレーション名として使用する

関連する項目値をリレーションの名前として使用すると、よりわかりやすくなる場合があります。社長(presidents)の例では、すべての前任者(predecessor)を1つの列に含め、すべての後任者(successor)を別の列に含めることができます。

これらのリンクを作成するには次のロード スクリプトが必要です。

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;

セマンティック リンクをクリックすると、3 列目の項目 DuplicateOfNoが選択されます。これは常に、セマンティック テーブルでセマンティック リンクに表示される社長の数です。

最初は明確に認識することができない可能性がありますが、上記のコンストラクション内の逆リレーションはほとんど役にたちません。これらは社長の名前を表示し、クリックされると、表示されている社長の前任者/後継者が選択されます。これが Dummy1および Dummy2 と呼ばれている理由であり、最初のリレーション(2列目)だけが使用されます。

リスト ボックスにダミー リレーションが表示されるのを避けるために、2列目と4列目を異なるタイプのリレーションとして処理する必要があります。つまり、1列目と3列目を異なる項目名にする必要があります。そのために、社長の数を含む NoDuplicateOfNo の2つの列を使用しています。

リレーションを含む2つの異なるリスト ボックスが必要なので、2つの異なる semanticステートメントが必要です。

この例は、3列のセマンティック テーブルでも実行できますが、ほとんどの場合、逆リレーションを含むリスト ボックスは、ユーザーを混乱させる可能性があります。