28 カスタム定義計算マクロの開発

Essbaseカスタム定義マクロ(CDM)を使用すると、複数の計算関数を単一の関数に結合できます。それらは、計算スクリプトまたは式で使用できます。

テスト・アプリケーション内でローカルに新しいマクロを作成しテストします。カスタム定義マクロは、テスト・アプリケーションでのテストが完了し、本番環境で使用できる状態になった後にのみ、グローバルに登録します。

カスタム定義マクロを作成し管理するには、データベース・マネージャ以上である必要があります。

カスタム定義マクロは、ブロック・ストレージ・キューブの場合のみサポートされています。

カスタム定義マクロの命名

Essbaseカスタム定義マクロの名前は、一意である必要があり、@記号で始まる必要があります。ローカル・マクロは、前にアプリケーション名が付加されます。

カスタム定義マクロに名前を付けるときには、次のガイドラインに従います。

  • マクロ名は、たとえば@MYMACROのように、@記号で始めます。名前の残りの部分には、文字、数字および記号(@、#、$、_)を含めることができます。マクロ名にスペースは含めないでください。

  • マクロが他のマクロによってのみ呼び出される場合、マクロ名を@_で始めて、一般用途のマクロおよび関数と区別します。

  • マクロには一意の名前を付けます。また、マクロ名は、カスタム定義関数の名前とも、既存の計算関数の名前とも異なる必要があります。

    ノート:

    アプリケーションにグローバル・マクロと同じ名前のローカル・マクロが含まれている場合、ローカル・マクロが優先され、計算に使用されます。

  • ローカル・マクロの場合、マクロ名の先頭にアプリケーション名を付けて、アプリケーション名とマクロ名をピリオドで区切る必要があります。

    AppName.@MacroName

    例:

    Sample.@MYMACRO
  • グローバル・マクロは、そのマクロが作成されたEssbase Serverサーバー上で実行されているすべてのアプリケーションで使用できるため、アプリケーション名を割り当てる必要はありません。

カスタム定義マクロの作成

カスタム定義マクロを作成すると、Essbaseによってそれがカタログ内に登録されます。マクロは、グローバルにすることも、アプリケーションに対してローカルにすることもできます。その後、そのマクロは、カタログから削除されるまで、式と計算スクリプトで使用できます。

カスタム定義マクロは次の方法で登録します。

  • ローカルとして。マクロは、作成されたEssbaseアプリケーションでのみ使用できます

  • グローバルとして。マクロは、作成されたEssbaseサーバーで実行されているすべてのEssbaseアプリケーションで使用できます

カスタム定義マクロを作成するには:

create macro MaxL文を使用します。

次のMaxL文では、Sampleアプリケーションで使用する@COUNTRANGEという名前のローカル・マクロが作成されます。

create macro Sample.'@COUNTRANGE'(Any) AS
'@COUNT(SKIPMISSING, @RANGE(@@S))'
spec '@COUNTRANGE(MemberRange)'
comment 'counts all non-missing values';

次のMaxL文では、@COUNTRANGEという名前のグローバル・マクロが作成されます。

create macro'@COUNTRANGE'(Any) AS
'@COUNT(SKIPMISSING, @RANGE(@@S))'
spec '@COUNTRANGE(MemberRange)'
comment 'counts all non-missing values';

カスタム定義マクロの使用方法

カスタム定義マクロは、Essbaseのネイティブ計算コマンドと同じ方法で使用します: それらを計算スクリプトでコールするか、アウトライン式に関連付けます。

カスタム定義マクロを使用するには、次の操作を行います。

  1. 計算スクリプトまたは式を作成するか、既存の計算スクリプトまたは式を開きます。
    • ローカルに登録されている計算スクリプトまたは式は、マクロが作成されたアプリケーション内で使用する必要があります。

    • グローバルに登録されていすべての計算スクリプトまたは式は、Essbaseサーバー上のすべてのアプリケーションで使用できます。

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

    たとえば、この章で示した@COUNTRANGEカスタム定義マクロを使用するには、次の計算スクリプトを作成します。

    CountMbr = @COUNTRANGE(Sales, Jan:Dec);

    Sample.Basicデータベースでこの計算スクリプトを使用するか、「Sales, Jan:Dec」をテスト・データベース内の一定の範囲内のメンバーで置き換えます。

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

カスタム定義マクロの表示

Essbaseでカスタム定義マクロを表示して、それが正常に作成されたかどうか、およびそのスコープがローカルかグローバルかを確認します。

カスタム定義マクロを表示するには、MaxL文のdisplay macroを使用します。

次のMaxL文では、サンプル・アプリケーションで定義されているマクロのみが表示されます。

display macro on application Sample;

次のMaxL文では、すべてのグローバル・マクロおよびローカル・マクロが表示されます(それらを表示するアクセス権がある場合)。

display macro;

カスタム定義マクロの更新

Essbaseでカスタム定義マクロの構文または動作を変更するには、まずそのスコープがローカルかグローバルかを特定し、次にMaxL文のcreate or replace macroを使用してその定義を更新します。

カスタム定義マクロを更新するには、次のようにします。

  1. マクロがローカルとグローバルのどちらで登録されているかを確認します。

    カスタム定義マクロの表示を参照してください。

  2. マクロ定義を更新するには、MaxL文のcreate macroを使用します。

次のMaxL文によって、Sampleアプリケーションのみで使用されるローカル・マクロ@COUNTRANGEが変更されます。

create or replace macro Sample.'@COUNTRANGE'(Any)
as '@COUNT(SKIPMISSING, @RANGE(@@S))';

次のMaxL文により、グローバル・マクロ@COUNTRANGEが変更されます。

create or replace macro '@COUNTRANGE'(Any)
as '@COUNT(SKIPMISSING, @RANGE(@@S))';

カスタム定義マクロのコピー

カスタム定義マクロは、適切なアクセス権がある任意のEssbaseサーバーとアプリケーションにコピーできます。データベース・マネージャ以上である必要があります。

カスタム定義マクロをコピーするには、MaxLcreate or replace macro文を使用します。

次のMaxL文では、@COVARIANCEマクロのコピーが作成されます。

create macro Sample.'@COVARIANCE2'(single, single) as '@COVARIANCE'(single, single);

カスタム定義マクロの削除

Essbaseからカスタム定義マクロを削除するには、まずそのスコープがローカルかグローバルかを特定し、次にMaxL文のdrop macroを使用します。

カスタム定義マクロを削除するには:

  1. マクロがローカルとグローバルのどちらで登録されているかを確認します。

    カスタム定義マクロの表示を参照してください。

  2. カスタム定義マクロを使用している計算スクリプトや式がないことを確認します。
  3. マクロをマクロのカタログから削除するには、MaxLdrop macro文を使用します。
  4. そのマクロに関連付けられていたすべてのアプリケーションを再起動します。

次のMaxL文では、Sampleアプリケーションでのみ使用されているローカル・マクロ@COUNTRANGEが削除されます。

drop macro Sample.'@COUNTRANGE';

次のMaxL文では、グローバル・マクロ@COUNTRANGEが削除されます。

drop macro '@COUNTRANGE';

カスタム定義マクロのカタログのリフレッシュ

マクロを追加、更新または削除した後は、カスタム定義マクロのEssbaseカタログをリフレッシュします。変更がローカルである場合はMaxL文のrefresh custom definitionsを使用し、変更がグローバルである場合はEssbaseサーバーを再起動します。

サーバー上のすべてのアプリケーションのカスタム定義マクロのカタログをリフレッシュするには、サーバーを再起動します。独立デプロイメントの場合はサーバーの起動、停止およびチェックを、OCIでのスタック・デプロイメントの場合はコマンドの使用によるプロセスの起動、停止およびステータス表示を参照してください。

1つのアプリケーションのカスタム定義マクロのカタログをリフレッシュするには、MaxLrefresh custom definitions文を使用します。

たとえば、次のMaxL文によって、サンプル・アプリケーションのカスタム定義マクロのカタログがリフレッシュされます。

refresh custom definition on application sample;