# Javaユーザー定義インジケーターの作成

利用対象...

* Big Data Platform
* Cloud API Services Platform
* Cloud Big Data Platform
* Cloud Data Fabric
* Cloud Data Management Platform
* Data Fabric
* Data Management Platform
* Data Services Platform
* MDM Platform
* Qlik Cloud Enterprise Edition
* Qlik Talend Cloud Enterprise Edition
* Qlik Talend Cloud Premium Edition
* Real-Time Big Data Platform

Javaインジケーターは個人用に作成してカスタマイズできます。

Javaユーザー定義インジケーターの管理手順は、システムインジケーターの管理手順と同じです。

また、[DQ Repository] (DQリポジトリー)ツリービューの[Exchange]フォルダーから、すぐに使用できるJavaユーザー定義インジケーターをインポートすることもできます。このJavaユーザー定義インジケーターは、メールサーバーに接続してメールがあるかどうかチェックします。

## カスタムインジケーターを定義

利用対象...

* Big Data Platform
* Cloud API Services Platform
* Cloud Big Data Platform
* Cloud Data Fabric
* Cloud Data Management Platform
* Data Fabric
* Data Management Platform
* Data Services Platform
* MDM Platform
* Qlik Cloud Enterprise Edition
* Qlik Talend Cloud Enterprise Edition
* Qlik Talend Cloud Premium Edition
* Real-Time Big Data Platform

### 手順

1. [DQ Repository] (DQリポジトリー)ツリービューで、[Libraries] (ライブラリー) &gt; [Indicators] (インジケーター)と展開します。
2. [User Defined Indicators] (ユーザー定義インジケーター)を右クリックします。

   ![User Defined Indicatorsノードのコンテキストメニュー。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/User_Defined_Indicator.png)
3. コンテキストメニューから[New Indicator] (新規インジケーター)を選択します。

   [New Indicator] (新規インジケーター)ウィザードが表示されます。
4. [Name] (名前)フィールドに、作成するJavaインジケーターの名前を入力します。

   情報メモ重要:

   ~ ! ` # ^ * & \\ / ? : ; \ , . ( ) ¥ ' " " " < > といった特殊文字は項目名に使用しないでください。

   ファイルシステムでは、これらの文字はすべて"\_"に置き換えられ、重複する項目が作成されてしまう場合があります。
5. オプション: 該当するフィールドで、その他のメタデータ(目的、説明、作成者)を設定して[Finish] (終了)をクリックします。

   インジケーターエディターが開き、ユーザー定義インジケーターのメタデータが表示されます。

   ![\[インジケーターメタデータ\]セクション、\[インジケーターカテゴリー\]セクション、\[インジケーター定義\]セクションの概要。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/Java_Indicator3.png)

## カスタムインジケーターの定義およびカテゴリーの設定

利用対象...

* Big Data Platform
* Cloud API Services Platform
* Cloud Big Data Platform
* Cloud Data Fabric
* Cloud Data Management Platform
* Data Fabric
* Data Management Platform
* Data Services Platform
* MDM Platform
* Qlik Cloud Enterprise Edition
* Qlik Talend Cloud Enterprise Edition
* Qlik Talend Cloud Premium Edition
* Real-Time Big Data Platform

### 始める前に

Profilingパースペクティブを選択済みであること。

### 手順

1. [Indicator Category] (インジケーターカテゴリー)をクリックし、リストからJavaインジケーターのカテゴリーを選択します。

   カテゴリーによって、このインジケーターを使用する分析の結果セットから予想されるカラムの数が決まります。

   次のテーブルで、各カテゴリーを説明します。
   | インジケーターカテゴリー | 説明 | 予想されるクエリー結果 |
   | --- | --- | --- |
   | [User Defined Match] (ユーザー定義一致) | 条件に一致するデータの数を評価します。 | 結果セットは1行と2カラムになります。1番目のカラムには一致する値の数が、2番目のカラムには合計カウントが含まれます。 |
   | [User Defined Frequency] (ユーザー定義の頻度) | 個々のレコードに対してユーザー定義インジケーターを使用してレコードの頻度を評価します。 | 結果セットは0以上の行と2カラムになります。1番目のカラムには値が、2番目のカラムにはこの値の頻度(カウント)が含まれます。 |
   | [User Defined Real Value] (ユーザー定義実数) | データの実ファンクションを評価します。 | 結果セットは実数を含む1行と1カラムになります。 |
   | [User Defined Count] (ユーザー定義のカウント) | レコードの数を分析し、行数を返します。 | 結果セットは行数を含む1行と1カラムになります。 |
2. [Indicator Definition] (インジケーター定義)をクリックし、[+]ボタンをクリックします。
3. [Database] (データベース)リストから[Java]を選択します。
4. [Java Class] (Javaクラス)フィールドにJavaクラスを入力します。

   情報メモ注: クラス名にパッケージパスが含まれていることをご確認ください。この文字列パラメーターが正しく指定されていないと、Javaユーザー定義インジケーターを保存しようとする時にエラーメッセージが表示されます。
5. Javaクラスを含むJavaアーカイブを選択します。
   1. [Edit...] (編集...)ボタンをクリックします。[UDI selector] (UDIセレクター)ダイアログボックスが開きます。
   2. [Select libraries] (ライブラリーを選択)ビューで、Javaクラスが含まれているアーカイブのチェックボックスをオンにし、ウィザードの下部のパネルでクラスを選択します。
   3. OKをクリックします。

      ダイアログボックスが閉じ、インジケーターエディターにJavaアーカイブが表示されます。

      このダイアログボックスの[Manage Libraries] (ライブラリー管理)ビューからJavaアーカイブを追加または削除できます。

      Javaアーカイブの作成方法の詳細は、 [ユーザー定義インジケーターのJavaアーカイブを作成](https://help.qlik.com/talend/ja-JP/studio-user-guide/8.0-R2024-12/creating-java-user-defined-indicators#creating-a-java-archive-for-the-user-defined-indicator_t "ユーザー定義インジケーターにJavaアーカイブを作成する前に、ワークスペースプラグインのコンパイルとテストの対象となるターゲットプラットフォームをEclipseで定義する必要があります。")をご覧ください。
6. [Indicator Parameters] (インジケーターパラメーター)をクリックしてビューを開き、パラメーター値を取得するためのパラメーターを定義しながらJavaインジケーターをコーディングできます。

   ![\[インジケーターパラメーター\]セクションの概要。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/User_Defined_Indicator5.png)

   次のようなコードでパラメーター値を取得できます。このサンプルではパラメーターEMAIL\_PARAMを取得しています。
   ```
   // Check prerequisite
           IndicatorParameters param = this.getParameters();
           if (param == null) {
               log.error("No parameter set in the user defined indicator " + this.getName()); //$NON-NLS-1$
               return false;
           }
           Domain indicatorValidDomain = param.getIndicatorValidDomain();
           if (indicatorValidDomain == null) {
               log.error("No parameter set in the user defined indicator " + this.getName()); //$NON-NLS-1$
               return false;
           }

           // else retrieve email from parameter
           EList<JavaUDIIndicatorParameter> javaUDIIndicatorParameter = indicatorValidDomain.getJavaUDIIndicatorParameter();
           for (JavaUDIIndicatorParameter p : javaUDIIndicatorParameter) {
               if (EMAIL_PARAM.equalsIgnoreCase(p.getKey())) {
   ```

   Javaユーザー定義インジケーターでパラメーターを使用する詳細なサンプルは、[このドキュメンテーション](https://github.com/Talend/tdq-studio-se/tree/master/sample/test.myudi/src/main/java/org/talend/dataquality/indicator/userdefine/email) (英語のみ)をご覧ください。
7. テーブルの下部にある[+]ボタンをクリックしてパラメーターキーと値の新しい行を定義します。

   カラム分析でインジケーターを使用する際は、いつでもデフォルトのパラメーターを編集したり、新しいパラメーターを追加したりできます。そのためには、分析エディターでインジケーターオプションアイコンをクリックしてダイアログボックスを開き、必要に応じてデフォルトのパラメーターを編集するか、新しいパラメーターを追加します。
8. エディターの上部にある保存アイコンをクリックします。

   インジケーターが、[DQ Repository] (DQリポジトリー)ツリービューの[User Defined Indicators] (ユーザー定義インジケーター)フォルダーの下にリスト表示されます。このインジケーターは、[DQ Repository] (DQリポジトリー)ツリービューからエディターにリストされたカラムにドラッグ＆ドロップするだけで、分析済みカラムに対して使用できます。

## ユーザー定義インジケーターのJavaアーカイブを作成

利用対象...

* Big Data Platform
* Cloud API Services Platform
* Cloud Big Data Platform
* Cloud Data Fabric
* Cloud Data Management Platform
* Data Fabric
* Data Management Platform
* Data Services Platform
* MDM Platform
* Qlik Cloud Enterprise Edition
* Qlik Talend Cloud Enterprise Edition
* Qlik Talend Cloud Premium Edition
* Real-Time Big Data Platform

ユーザー定義インジケーターにJavaアーカイブを作成する前に、ワークスペースプラグインのコンパイルとテストの対象となるターゲットプラットフォームをEclipseで定義する必要があります。

### 始める前に

Profilingパースペクティブを選択済みであること。

### 手順

1. ターゲットプラットフォームを定義します。
   1. Eclipseで、[Preferences] (環境設定)を選択して[Preferences] (環境設定)ウィンドウを表示します。
   2. [Plug-in Development] (プラグイン開発)を展開して[Target Platform] (ターゲットプラットフォーム)を選択し、[Add...] (追加...)をクリックしてターゲット定義を作成するためのビューを開きます。
   3. [Nothing: Start with an empty target definition] (なし: 空のターゲット定義で始める)オプションを選択し、[Next] (次へ)をクリックします。
   4. [Name] (名前)フィールドに新しいターゲット定義の名前を入力し、[Next] (次へ)をクリックします。
   5. [Add Content] (コンテンツを追加)リストから[Installation] (インストール)を選択し、[Next] (次へ)をクリックします。
   6. [Browse...] (参照...)ボタンを使ってインストールディレクトリーのパスを設定し、[Next] (次へ)をクリックします。

      ![\[参照...\]ボタンの場所。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/Java_target_platform5.png)

      場所のリストに新しいターゲット定義が表示されます。

      場所のリストに新しいターゲット定義が表示されます。 ![\[場所\]タブに新しいターゲット定義が表示されます。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/Java_target_platform6.png)
   7. [Finish] (終了)をクリックしてダイアログボックスを閉じます。
2. ユーザー定義インジケーターのJavaアーカイブを作成
   1. Eclipseでは、[project from Git](https://github.com/Talend/tdq-studio-se/tree/master/sample/test.myudi) (英語のみ)をご覧ください。

      このJavaプロジェクトには、インジケーターエディターの[Indicator Category] (インジケーターカテゴリー)ビューにリスト表示されたインジケーターカテゴリーに対応する4つのJavaクラスがあります。

      このJavaプロジェクトには、インジケーターエディターの[Indicator Category] (インジケーターカテゴリー)[Indicator Category] (インジケーターカテゴリー)ビューにリスト表示されたインジケーターカテゴリーに対応する4つのJavaクラスがあります。 ![Javaプロジェクトからの4つのJavaクラスの例。](https://help.qlik.com/talend/ja-JP/studio-user-guide/Resources/images/Java_Classes.png)

      どのJavaクラスもUserDefIndicatorImplインジケーターを拡張します。下の図は、MyAvgLength Javaクラスを使った例を示したものです。

      どのJavaクラスもUserDefIndicatorImplUserDefIndicatorImplインジケーターを拡張します。下の図は、MyAvgLengthMyAvgLength Javaクラスを使った例を示したものです。
      ```
      package test.udi;

      import org.talend.dataquality.indicators.sql.impl.UserDefIndicatorImpl;

      /**
       * @author mzhao
       * 
       * A very simple example of a java implementation of a user defined indicator. This indicator returns a user defined
       * real value. It implements the minimum number of required methods.
       */
      public class MyAvgLength extends UserDefIndicatorImpl {

          private double length = 0;

          @Override
          public boolean reset() {
              super.reset();
              length = 0;
              return true;
          }

          @Override
          public boolean handle(Object data) {
              super.handle(data);
              // an indicator which computes the average text length on data which are more than 2 characters (this means that
              // text values with less than 2 characters are not taken into account).
              int dataLength = (data != null) ? data.toString().length() : 0;
              if (dataLength > 2) {
                  length += dataLength;
              }
              return true;
          }

          /*
           * (non-Javadoc)
           * 
           * @see org.talend.dataquality.indicators.impl.IndicatorImpl#finalizeComputation()
           */
          @Override
          public boolean finalizeComputation() {
              value = String.valueOf(this.length / (this.getCount() - this.getNullCount()));
              return super.finalizeComputation();
          }

      }
      ```

      `package test.udi;

      import org.talend.dataquality.indicators.sql.impl.UserDefIndicatorImpl;

      /**
       * @author mzhao
       * 
       * A very simple example of a java implementation of a user defined indicator. This indicator returns a user defined
       * real value. It implements the minimum number of required methods.
       */
      public class MyAvgLength extends UserDefIndicatorImpl {

          private double length = 0;

          @Override
          public boolean reset() {
              super.reset();
              length = 0;
              return true;
          }

          @Override
          public boolean handle(Object data) {
              super.handle(data);
              // an indicator which computes the average text length on data which are more than 2 characters (this means that
              // text values with less than 2 characters are not taken into account).
              int dataLength = (data != null) ? data.toString().length() : 0;
              if (dataLength > 2) {
                  length += dataLength;
              }
              return true;
          }

          /*
           * (non-Javadoc)
           * 
           * @see org.talend.dataquality.indicators.impl.IndicatorImpl#finalizeComputation()
           */
          @Override
          public boolean finalizeComputation() {
              value = String.valueOf(this.length / (this.getCount() - this.getNullCount()));
              return super.finalizeComputation();
          }

      }`
      ```
      package test.udi;

      import org.talend.dataquality.indicators.sql.impl.UserDefIndicatorImpl;

      /**
       * @author mzhao
       * 
       * A very simple example of a java implementation of a user defined indicator. This indicator returns a user defined
       * real value. It implements the minimum number of required methods.
       */
      public class MyAvgLength extends UserDefIndicatorImpl {

          private double length = 0;

          @Override
          public boolean reset() {
              super.reset();
              length = 0;
              return true;
          }

          @Override
          public boolean handle(Object data) {
              super.handle(data);
              // an indicator which computes the average text length on data which are more than 2 characters (this means that
              // text values with less than 2 characters are not taken into account).
              int dataLength = (data != null) ? data.toString().length() : 0;
              if (dataLength > 2) {
                  length += dataLength;
              }
              return true;
          }

          /*
           * (non-Javadoc)
           * 
           * @see org.talend.dataquality.indicators.impl.IndicatorImpl#finalizeComputation()
           */
          @Override
          public boolean finalizeComputation() {
              value = String.valueOf(this.length / (this.getCount() - this.getNullCount()));
              return super.finalizeComputation();
          }

      }
      ```

      `package test.udi;

      import org.talend.dataquality.indicators.sql.impl.UserDefIndicatorImpl;

      /**
       * @author mzhao
       * 
       * A very simple example of a java implementation of a user defined indicator. This indicator returns a user defined
       * real value. It implements the minimum number of required methods.
       */
      public class MyAvgLength extends UserDefIndicatorImpl {

          private double length = 0;

          @Override
          public boolean reset() {
              super.reset();
              length = 0;
              return true;
          }

          @Override
          public boolean handle(Object data) {
              super.handle(data);
              // an indicator which computes the average text length on data which are more than 2 characters (this means that
              // text values with less than 2 characters are not taken into account).
              int dataLength = (data != null) ? data.toString().length() : 0;
              if (dataLength > 2) {
                  length += dataLength;
              }
              return true;
          }

          /*
           * (non-Javadoc)
           * 
           * @see org.talend.dataquality.indicators.impl.IndicatorImpl#finalizeComputation()
           */
          @Override
          public boolean finalizeComputation() {
              value = String.valueOf(this.length / (this.getCount() - this.getNullCount()));
              return super.finalizeComputation();
          }

      }``package test.udi;

      import org.talend.dataquality.indicators.sql.impl.UserDefIndicatorImpl;

      /**
       * @author mzhao
       * 
       * A very simple example of a java implementation of a user defined indicator. This indicator returns a user defined
       * real value. It implements the minimum number of required methods.
       */
      public class MyAvgLength extends UserDefIndicatorImpl {

          private double length = 0;

          @Override
          public boolean reset() {
              super.reset();
              length = 0;
              return true;
          }

          @Override
          public boolean handle(Object data) {
              super.handle(data);
              // an indicator which computes the average text length on data which are more than 2 characters (this means that
              // text values with less than 2 characters are not taken into account).
              int dataLength = (data != null) ? data.toString().length() : 0;
              if (dataLength > 2) {
                  length += dataLength;
              }
              return true;
          }

          /*
           * (non-Javadoc)
           * 
           * @see org.talend.dataquality.indicators.impl.IndicatorImpl#finalizeComputation()
           */
          @Override
          public boolean finalizeComputation() {
              value = String.valueOf(this.length / (this.getCount() - this.getNullCount()));
              return super.finalizeComputation();
          }

      }`package test.udi; import org.talend.dataquality.indicators.sql.impl.UserDefIndicatorImpl; /\*\* \* @author mzhao \* \* A very simple example of a java implementation of a user defined indicator. This indicator returns a user defined \* real value. It implements the minimum number of required methods. \*/ public class MyAvgLength extends UserDefIndicatorImpl { private double length = 0; @Override public boolean reset() { super.reset(); length = 0; return true; } @Override public boolean handle(Object data) { super.handle(data); // an indicator which computes the average text length on data which are more than 2 characters (this means that // text values with less than 2 characters are not taken into account). int dataLength = (data != null) ? data.toString().length() : 0; if (dataLength &gt; 2) { length += dataLength; } return true; } /\* \* (non-Javadoc) \* \* @see org.talend.dataquality.indicators.impl.IndicatorImpl#finalizeComputation() \*/ @Override public boolean finalizeComputation() { value = String.valueOf(this.length / (this.getCount() - this.getNullCount())); return super.finalizeComputation(); } }
   2. 必要に応じて、各@Overrideに続くメソッドのコードを編集してください。
   3. オプション: 次のメソッドをコードで使い、インジケーターのパラメーターを取得します。
      | メソッド | 説明 |
      | --- | --- |
      | ndicatorParameters | IndicatorParametersオブジェクトを返します |
      | omain | ドメインオブジェクトを返します |
      | JavaUDIIndicatorParameter | パラメーターを定義するキー/値の各ペアを保存するJavaUDIIndicatorParameterのリストを返します。 |
   4. 変更を保存します。
   5. Eclipseを使用してこの新しいJavaアーカイブをエクスポートします。

### タスクの結果

以上で、Profilingパースペクティブで作成するどのJavaインジケーターにもJavaアーカイブを添付できるようになります。