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

Exists - スクリプト関数

Exists() は、特定の項目値がロード スクリプトの項目にすでにロードされているかどうかを決定します。この関数は TRUE または FALSE を返すため、LOAD ステートメントまたは IF 関数の where 句で使用できます。

情報メモNot Exists() を使用して項目値がロードされていないかどうかを確認することもできますが、where 句で Not Exists() を使用する場合は注意が必要です。Exists() 関数は、以前にロードされたテーブルと現在のテーブルで以前にロードされた値の両方をテストします。したがって、最初の出現のみがロードされます。2 番目の出現が検出されると、値はすでにロードされています。詳細については、例を参照してください。

構文:  

Exists(field_name [, expr] )

戻り値データ型:ブール値

引数:  

Exists 引数
引数 説明
field_name

値を検索する項目の名前。引用符なしで明示的な項目名を使用できます。

項目はスクリプトによって既にロードされている必要があります。つまり、スクリプトのさらに下の句にロードされている項目を参照することはできません。

expr

存在するかどうかを確認する値。現在の [load] ステートメントの 1 つまたは複数の項目を参照する明示的な値または数式を使用できます。

情報メモ現在の [load] ステートメントに含まれていない項目は参照できません。

この引数はオプションです。省略すると、関数は現在のレコードの field_name の値が既に存在するかどうかを確認します。

例1:  

Exists (Employee)

現在のレコード内の項目 Employee の値が、その項目を含む読み取り済みのレコード内にすでに存在してれば、-1 (True) を返します。

例2:  

Exists(Employee, 'Bill')

項目値 'Bill' が項目 Employee の現在のコンテンツに含まれていれば、-1 (True) を返します。

ステートメント Exists (Employee, Employee)Exists (Employee) は同じ働きをします。

例3:  

Employees:
LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where Exists (Employee);   Drop Tables Employees;
 

この例では、データ モデルの EmployeeAddresses と呼ばれるテーブルがロードされ、このテーブルは Employee 軸と Address 軸を使用してテーブル チャートとして表示できます。

where 節:where Exists (Employee, Name) は、テーブル Citizens から Employees にも存在する名前のみを新しいテーブルにロードすることを意味します。Drop ステートメントは、一時的なテーブル EmployeesCitizens を混乱を避けるために削除します。

例 3 の結果
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

例4:  

後続を含むテーブル EmployeeAddresses を使用して構築する前の例で、where not Exists を使用してサンプル データのステートメントを置き換えます。

NonEmployee:

Load Name as Employee, Address Resident Citizens where not Exists (Employee, Name);

 

where 句には次のものが含まれます not: where not Exists (Employee, Name)

これは、テーブル Citizens から Employees にも存在する名前のみを新しいテーブルにロードすることを意味します。

Citizens テーブルには Lucy の値が 2 つありますが、結果テーブルには 1 つしか含まれていないことに注意してください。最初の行をロードすると、値は Employee シンボル テーブルに含まれます。したがって、2 行目がチェックされると、値が存在します。

次の例は、すべての値をロードする方法を示しています。

例 4 の結果
EmployeeAddress
MaryLondon
LucyMadrid

例5:  

Employees: Load Employee As Name, ID, Salary; LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|') where not Exists (Name, Employee);   Drop Tables Employees;
 

Lucy のすべての値を取得できるようにするには、次の 2 つを変更する必要があります。

  • Employee の名前を Name に変更する前のロードを Employees に追加します。

    Load Employee As Name, ID, Salary;

  • Citizens の Where 条件を次のように変更します。

    not Exists (Name, Employee)。

これにより、NameEmployee に異なるシンボル テーブルが作成されます。Lucy の 2 行目をチェックしても、Name にはまだ存在しません。

例 5 の結果
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

例で使用されているデータ:

LOAD * inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|');   Citizens: Load * inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|');

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。

分析の近代化プログラムに参加する

Remove banner from view

分析最新化プログラムにより、重要な QlikView app を危険にさらすことなく最新化しましょう。 ここをクリック して詳細を表示するか、次にお問い合わせください。 ampquestions@qlik.com