メイン コンテンツをスキップする

セマンティック リンク

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

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

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

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

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

  • このテーブルは、厳密に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列のセマンティック テーブルでも実行できますが、ほとんどの場合、逆リレーションを含むリスト ボックスは、ユーザーを混乱させる可能性があります。

Join the Analytics Modernization Program

Modernize by leveraging your QlikView investment to begin using Qlik Sense on the Cloud.

Want to know more?
Remove banner from view