セマンティック リンク
通常は、目的の項目値をクリックすることで、明示的に選択を行います。一方、セマンティック リンクを使用して、間接的に選択を行う方法もあります。セマンティック リンクは、項目値に似ていますが、オブジェクト自体ではなく、オブジェクト間の関係を表す点が異なります。セマンティック リンクは、ボタンのリストとして表示されます。
セマンティック リンクをクリックすると、他の項目で選択が行われます。
セマンティック テーブルのルール
セマンティック リンクは、オブジェクト間のリレーションを含むテーブルをロードすることで作成されます。
- このテーブルは、厳密に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列目を異なる項目名にする必要があります。そのために、社長の数を含む No と DuplicateOfNo の2つの列を使用しています。
リレーションを含む2つの異なるリスト ボックスが必要なので、2つの異なる semantic ステートメントが必要です。
この例は、3列のセマンティック テーブルでも実行できますが、ほとんどの場合、逆リレーションを含むリスト ボックスは、ユーザーを混乱させる可能性があります。