カスタム定義計算関数の作成

この項の内容:

カスタム定義関数を作成するためのプロセス

カスタム定義関数の要件

Javaクラスの作成とコンパイル

EssbaseサーバーへのJavaクラスのインストール

カスタム定義関数の登録

登録したカスタム定義関数の使用

カスタム定義関数の更新

カスタム定義関数の表示

カスタム定義関数の削除

カスタム定義関数のコピー

カスタム定義関数のパフォーマンスの考慮事項

カスタム定義関数のメモリーの考慮事項

この章の情報は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。集約ストレージとブロック・ストレージの比較。も参照してください。

カスタム定義関数を作成するためのプロセス

Essbaseに用意されている計算関数を強化するために、計算スクリプトで使用するカスタム定義関数を作成できます。Essbaseには、カスタム定義関数のサンプルは用意されていません。

カスタム定義計算関数はJavaで記述します。カスタム定義計算関数はJavaで記述します。Essbaseには、Javaのクラスとアーカイブを作成するためのツールがありません。このため、サポートされるバージョンのJDKが必要です。Oracle Hyperion Enterprise Performance Management System動作保証マトリックス(http://www.oracle.com/technology/software/products/ias/files/fusion_certification.html)を参照してください。

カスタム定義関数の例は、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

  カスタム定義関数を作成するには:

  1. カスタム定義関数の要件を確認します。

    カスタム定義関数の要件を参照してください。

  2. カスタム定義関数として使用するためのpublicかつstaticなメソッドを少なくとも1つ含む、publicなJavaクラスを記述します。

    Javaクラスの作成とコンパイルを参照してください。

  3. Javaクラスをインストールします。

    EssbaseサーバーへのJavaクラスのインストールを参照してください。

  4. カスタム定義関数を、ローカル関数またはグローバル関数として登録します。

    カスタム定義関数の登録を参照してください。

カスタム定義関数の要件

カスタム定義関数として使用するために、クラスに複数のメソッドを作成できます。通常は、Essbaseサーバー上のすべてのアプリケーションでカスタム定義関数として使用するメソッドを単一のクラス内に作成することをお薦めします。ただし、Essbaseサーバー上の一部のアプリケーションで使用するカスタム定義関数を追加する場合は、そのカスタム定義関数を個別のクラスに作成し、個別の.jarファイルに保管してEssbaseサーバーに追加します。

カスタム定義関数として使用するメソッドを含んだJavaクラスを複数作成する場合は、各クラス名が一意であることを確認します。重複するクラス名があると、重複するクラスのメソッドが認識されず、そのメソッドをカスタム定義関数として登録できません。

テスト・プログラムをJavaで使用して、Javaのクラスとメソッドをテストします。メソッドの出力が適切な場合は、そのメソッドをEssbaseサーバーにインストールして、単一のテスト・アプリケーションにそのメソッドを登録します。テストするために関数をグローバルに登録しないでください。グローバルに登録すると、問題が発生したときにその関数を更新することがより難しくなります。

カスタム定義関数のメソッドは、次のようなサポートされているデータ型のいずれの組合せでも、入力パラメータとして持つことができます:

  • boolean

  • byte

  • char

  • com.hyperion.essbase.calculator.CalcBoolean

  • float、double

  • java.lang.String

  • short、int、long

  • これらのいずれかの型の配列

CalcBooleanはEssbase固有のデータ型で、3つの値(TRUE、FALSEおよび#MISSING)を保管できます。他のリストされたデータ型の詳細は、JDKのドキュメンテーションを参照してください。

メソッドの戻りデータ型は、voidまたは前述のデータ型のいずれかにできます。戻されたデータ型はEssbase固有のデータ型に変換されます。文字列はstring型にマッピングされます。ブール値はCalcBooleanデータ型にマッピングされます。その他のすべての値はdouble型にマッピングされます。

注:

Essbaseでは、無限値または非数(Not-a-Number)値とともに戻されるdouble型の変数をサポートしません。このような値がJavaプログラムから戻された場合、その値はEssbaseで正しく記録されていないか、表示されていない可能性があります。Essbaseに戻される前に、double型の変数に、無限値と非数値があるかどうかを検査し、有限値に設定する必要があります。JDKのドキュメンテーションのクラスDoubleに関する説明を参照してください。

カスタム定義関数を作成、削除および管理するために、Essbaseでは次のセキュリティ権限が必要です:

  • ローカル、アプリケーション全体、カスタム定義関数: アプリケーション・マネージャ以上

  • グローバル、サーバー全体、カスタム定義関数: 管理者

カスタム定義関数をEssbaseに登録するときには、関数に名前を付けます。その名前は、計算スクリプトと式で使用され、関数によって使用されるJavaのクラス名とメソッド名とは異なります。

カスタム定義関数に名前を付けるときには次の要件に従います:

  • 名前は@記号で始めます。関数名の残りの部分には、文字、数字および記号(@、#、$、_)を使用します。スペースは関数名に使用できません。

    例: @MYFUNCTION

  • カスタム定義マクロによってのみ呼び出されるカスタム定義関数の名前は、一般用途の関数およびマクロと区別するため、@_で始めます。

    例: @_MYFUNCTION

  • カスタム定義関数の名前は一意でなければなりません。関数名は、他の関数名、カスタム定義マクロの名前および既存の計算関数の名前とも異なる必要があります。

  • Essbaseアプリケーションにグローバル関数と同じ名前のローカル関数がある場合、計算にはローカル関数が使用されます。

Javaクラスの作成とコンパイル

Javaクラスを作成およびコンパイルするには、テキスト・エディタとJDK javacツールを使用します。

  カスタム定義関数用のJavaクラスを作成するには:

  1. テキスト・エディタでJavaクラスを作成します。

    例:

                public class CalcFunc {
      public static double sum (double[] data) {
        int i, n = data.length;
        double sum = 0.0d;
        for (i=0; i<n; i++) {
          double d = data [i];
          sum = sum + d;
        }
        return sum;
      }
    }
    
             
  2. ファイルを.java拡張子で保存します。

    例:

                CalcFunc.java
             
  3. .javaファイルが保管されているディレクトリに移動します。コマンド・プロンプトで、次のコマンドを入力します:

                javac 
                java_filename
             

    例:

                javac CalcFunc.java
             
  4. コンパイラによって新しいファイルが.class拡張子で作成されるまでに、コンパイル・エラーを修正します。

    例:

                CalcFunc.class
             

EssbaseサーバーへのJavaクラスのインストール

Javaクラスは、JDK jarツールを使用してJARファイルにコンパイルする必要があります。

  .jarファイルを作成してEssbaseサーバーにインストールするには:

  1. .classファイルが保管されているディレクトリに移動します。コマンド・プロンプトで、次のコマンドを入力します:

                jar cf 
                jar_filename
                 
                class_filename
             

    例:

                jar cf CalcFunc.jar CalcFunc.class
             
  2. Essbaseサーバーを実行しているコンピュータで、.jarファイルを次のいずれかのディレクトリにコピーします(ディレクトリが存在しない場合は、作成します):

    • グローバル・カスタム定義関数を含んでいる.jarファイル:

                        ARBORPATH
                        /java/udf/
                     
    • 特定のアプリケーションでのみ使用する.jarファイル:

                        ARBORPATH
                        /app/
                        appName
                        /udf/
                     

      appNameは、ローカル・カスタム定義関数が使用されるアプリケーションの名前です。

    後で.jarファイルを別の場所に移動した場合は、CLASSPATH変数を変更して、.jarファイルへのフルパスとファイル名を含める必要があります。

  3. 特定のアプリケーションでのみ関数を使用する場合は、Essbaseでそのアプリケーションを再起動します。それ以外の場合は、Essbaseサーバーを再起動します。

カスタム定義関数の登録

カスタム定義関数用のJavaクラスを.jarファイルにコンパイルし、その.jarファイルをEssbaseサーバーにインストールしたら、カスタム定義関数を登録して、計算スクリプトと式で使用できるようにします。カスタム定義関数の要件を参照してください。

グローバル・カスタム定義関数を登録すると、Essbaseサーバー上のすべてのEssbaseアプリケーションでその関数を使用できます。カスタム定義関数をグローバル関数にする前に、単一のアプリケーションでその関数をテスト(およびそのアプリケーションでのみその関数を登録)します。

マクロのカタログを更新するプロセスと同じプロセスを使用して関数のカタログを更新します。カスタム定義マクロのカタログのリフレッシュを参照してください。

注意

テストするためにグローバル関数を登録しないでください。登録すると、問題が発生した場合に変更がより難しくなります。

  カスタム定義関数を登録するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

カスタム定義関数の作成

Oracle Essbase Administration Services Online Help

MaxL

create function

『Oracle Essbaseテクニカル・リファレンス』

ローカル・スコープでカスタム定義関数を登録する場合は、アプリケーション名を接頭辞として追加します。たとえば、次のMaxLステートメントによって、CalcFuncクラスのカスタム定義関数@JSUMが、Sampleアプリケーションでのみ使用するためのローカル関数として登録されます:

      create function Sample.'@JSUM'
as 'CalcFunc.sum'
spec '@JSUM(memberRange)'
comment 'adds list of input members';
   

グローバル・スコープでカスタム定義関数を登録する場合は、アプリケーション名を接頭辞として追加しません。たとえば、次のMaxLステートメントによって、CalcFuncクラスのカスタム定義関数@JSUMが、Essbaseサーバー上のすべてのアプリケーションで使用するためのグローバル関数として登録されます:

      create function '@JSUM'
as 'CalcFunc.sum'
spec '@JSUM(memberRange)'
comment 'adds list of input members';
   

注:

Javaメソッドの入力パラメータの指定はオプションです。入力パラメータを指定しなかった場合、Essbaseでは、Javaコードのメソッド定義から入力パラメータを読み取ります。ただし、複数のカスタム定義関数を同じメソッド名と異なるパラメータ・セットを使用して登録する場合は、関数のバージョンごとにパラメータを指定して、関数のバージョンごとに個別に登録する必要があります。

登録したカスタム定義関数の使用

登録したカスタム定義関数はネイティブのEssbase計算コマンドと同じように使用できます。

  登録したカスタム定義関数を使用するには:

  1. 計算スクリプトまたは式を作成するか、既存の計算スクリプトまたは式を開きます。

    • カスタム定義関数をローカルに(特定のアプリケーション内に)登録した場合には、そのアプリケーション内の計算スクリプトや式を使用する必要があります。

    • カスタム定義関数をグローバルに登録した場合には、Essbaseサーバー上のすべての計算スクリプトまたは式を使用できます。

  2. カスタム定義関数を計算スクリプトまたは式に追加します。

    たとえば、JSUMを使用するには、次の計算スクリプトを使用します:

    "New York" = @JSUM(@LIST(2.3, 4.5, 6.6, 1000.34));

    この計算スクリプトをSample.Basicサンプル・データベースで使用するか、"New York"をテスト・データベースにあるメンバーの名前に置換します。

  3. 計算スクリプトまたは式を保存したら、通常どおりに実行します。

カスタム定義関数の更新

カスタム定義関数を更新する手順は、次の条件によって異なります:

  • 関数がローカルとグローバルのどちらで登録されているか

  • カスタム定義関数のシグネチャ(クラス名、メソッド名または入力パラメータ)がカスタム定義関数のJavaコードで変更されているかどうか

通常、カスタム定義関数を更新するには、その関数のコードを含んでいる.jarファイルを置き換えて、その関数を再登録する必要があります。ただし、カスタム定義関数のシグネチャが変更されておらず、関数に1セットの入力パラメータしかない(オーバーロード・メソッドでない)場合は、関数を含んでいる.jarファイルを置き換えることができます。

注:

DBAのみによってグローバル・カスタム定義関数が更新されるようにしてください。

  カスタム定義関数を更新するには:

  1. 関数がローカルとグローバルのどちらであるかを確認します。

    カスタム定義関数の表示を参照してください。

  2. カスタム定義関数用のJavaクラスに変更を加え、Javaテスト・プログラムを使用してその出力をテストします。

  3. Javaクラスをコンパイルして、前の.jarファイルと同じ名前を使用して、新しい.jarファイルにアーカイブします。

    前の.jarファイルに含まれていたカスタム定義関数用の他のクラスとメソッドも含めます。

  4. 更新するカスタム定義関数の種類(ローカルまたはグローバル)に応じて、次のアクションを実行します:

    1. ローカル: .jarファイルの関数を使用するすべてのEssbaseアプリケーションをシャットダウンします。

    2. グローバル: すべてのEssbaseアプリケーションをシャットダウンします

    どのEssbaseアプリケーションが.jarファイルのどの関数を使用するか不明な場合は、すべてのEssbaseアプリケーションをシャットダウンします。

  5. 新しい.jarファイルをEssbaseサーバーにコピーして、既存の.jarファイルを同じ名前で置き換えます。

  6. カスタム定義関数のシグネチャが変更されていない場合は、手順8に進みます。

  7. カスタム定義関数を置き換えるには、次のツールを使用します:

    • Administration Services: Oracle Essbase Administration Services Online Helpの「カスタム定義関数の編集」を参照してください。

    • MaxL: create or replace functionステートメントを使用します。例:

      • ローカル:

                                create or replace function sample.'@JSUM'
        as 'CalcFunc.sum';
                             
      • グローバル:

                                create or replace function '@JSUM'
        as 'CalcFunc.sum';
                             
  8. シャットダウンしたアプリケーションを再起動して、カタログを更新します。

カスタム定義関数の表示

カスタム定義関数を表示して、関数が正常に登録されているかどうか、およびローカルとグローバルのどちらで登録されているのかを確認できます。カスタム定義関数は、作成して登録するまで表示されません。

  カスタム定義関数を表示するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

カスタム定義関数の表示

Oracle Essbase Administration Services Online Help

MaxL

display function

『Oracle Essbaseテクニカル・リファレンス』

たとえば、Sampleアプリケーションに含まれているカスタム定義関数、およびすべての登録済グローバル関数を表示するには、次のMaxLステートメントを使用します:

      display function Sample;
   

display functionステートメントによって、アプリケーション名なしでグローバル関数がリストされ、その関数がグローバルであることが示されます。アプリケーションにグローバル関数と同じ名前の関数が含まれている場合は、ローカル関数のみがリストされます。

カスタム定義関数の削除

カスタム定義関数を削除するには、次の権限が必要です:

  • ローカル: アプリケーションに対するアプリケーション・マネージャ権限、またはそれよりも範囲が広い権限

  • グローバル: 管理者権限

カスタム定義関数を削除する前に、その関数を使用している計算スクリプトまたは式がないことを確認します。グローバル・カスタム定義関数は、Essbaseサーバー全体の計算スクリプトと式で使用できるので、削除する前にこの関数を使用しているEssbaseサーバー上の計算スクリプトまたは式がないことを確認する必要があります。

注意

Essbaseデータベースにアクセスしているユーザーがおらず、計算ルーチンが実行されていないときにのみ、グローバル・カスタム定義関数を削除してください。

  カスタム定義関数を削除するには:

  1. 関数がローカルとグローバルのどちらであるかを確認します。

    カスタム定義関数の表示を参照してください。

  2. 削除するカスタム定義関数の種類(ローカルまたはカスタム)に応じて、次のアクションを実行します:

    1. ローカル: .jarファイルの関数を使用するすべてのEssbaseアプリケーションをシャットダウンします。

    2. グローバル: すべてのEssbaseアプリケーションをシャットダウンします。

  3. カスタム定義関数を削除するには、次のツールを使用します:

    • Administration Services: Oracle Essbase Administration Services Online Helpの、カスタム定義関数の削除に関する項を参照してください

    • MaxL: drop function MaxLステートメントを使用します。例:

    • ローカル:

                        drop function Sample.'@JSUM';
                     
    • グローバル:

                        drop function '@JSUM';
                     
  4. シャットダウンしたアプリケーションを再起動して、カタログを更新します。

カスタム定義関数のコピー

カスタム定義関数は、適切なアクセス権がある任意のEssbaseサーバーとアプリケーションにコピーできます。

カスタム定義関数をコピーするには、次のツールを使用します:

ツール

トピック

場所

Administration Services

カスタム定義関数のコピー

Oracle Essbase Administration Services Online Help

MaxL

create function

『Oracle Essbaseテクニカル・リファレンス』

カスタム定義関数のパフォーマンスの考慮事項

カスタム定義関数は、Essbase計算機フレームワークの拡張機能として実装されるので、カスタム定義関数の動作の効率は、Essbase計算機フレームワークにネイティブの関数よりも低いと考えられます。

パフォーマンスを最適化するため、特に計算スピードが重要となるアプリケーションにおいては、カスタム定義関数の使用は、ネイティブのEssbase計算コマンドで実行できない計算のみに限定してください。

カスタム定義関数のメモリーの考慮事項

JVM APIとJava API for XML Parsingの使用は、Essbaseを実行するために必要なメモリーに最初に影響します。これらの追加コンポーネントを実行するために必要なメモリーについては、Essbaseのメモリー要件で説明しています。Oracle Enterprise Performance Management System Installation and Configuration Guideを参照してください。

この起動メモリー要件を越えて、カスタム定義関数用に開発するJavaプログラムに追加のメモリーが必要なことがあります。起動時に、Win32オペレーティング・システム用のJVMによって、2MBのメモリーがプログラムにすぐに割り当てられます。この割当ては、JVMによって実行されるプログラムの要件に従って増加します。Win32オペレーティング・システム上のJVMに割り当てられるメモリーのデフォルトの上限値は、64MBです。Javaプログラムの実行によって、JVMのデフォルトのメモリー割当ての上限値を超えた場合、JVMによってエラーが生成されます。JVMメモリーの管理および他のオペレーティング・システムのメモリー割当ての詳細は、JDKのドキュメンテーションを参照してください。

JVMのデフォルトのメモリー要件およびサーバーを実行するハードウェアの制限を考慮して、メモリーの使用を注意深く観察します。特に、カスタム定義関数の開発者は、カスタム定義関数に大きいアーティファクトを作成するときに、JVMのメモリー制限値を超えないように注意する必要があります。