27 カスタム定義計算マクロの開発
Essbaseカスタム定義マクロ(CDM)を使用すると、複数の計算関数を単一の関数に結合することができます。それらは、計算スクリプトまたは式で使用できます。
テスト・アプリケーション内にローカルに新しいマクロを作成してテストします。CDMは、テスト・アプリケーションでのテストが完了し、本番環境で使用できる状態の後にのみ、グローバルに登録します。
CDMを作成および管理するには、データベース・マネージャ以上の権限が必要です。
CDMは、ブロック・ストレージ・キューブでのみサポートされます。
カスタム定義マクロの名前
Essbaseカスタム定義マクロ(CDM)名は一意で、@記号で始まる必要があります。ローカルマクロの前にアプリケーション名が付加されます。
CDMに名前を付ける際は、次のガイドラインに従います。
-
マクロ名は、たとえば@MYMACROのように、@記号で始めます。名前の残りの部分には、文字、数字および記号(@、#、$、_)を含めることができます。マクロ名にスペースは含めないでください。
-
マクロが他のマクロによってのみ呼び出される場合、マクロ名を@_で始めて、一般用途のマクロおよび関数と区別します。
-
マクロには一意の名前を付けます。また、マクロ名は、カスタム定義関数の名前とも、既存の計算関数の名前とも異なる必要があります。
ノート:
アプリケーションにグローバル・マクロと同じ名前のローカル・マクロが含まれている場合、ローカル・マクロが優先され、計算に使用されます。
-
ローカル・マクロの場合、マクロ名の先頭にアプリケーション名を付けて、アプリケーション名とマクロ名をピリオドで区切る必要があります。
AppName.@MacroNameたとえば:
Sample.@MYMACRO -
グローバル・マクロは、そのマクロが作成されたEssbase Server上で実行されているすべてのアプリケーションで使用できるため、アプリケーション名を割り当てる必要はありません。
カスタム定義マクロの作成
カスタム定義マクロ(CDM)を作成すると、Essbaseによってカタログに登録されます。マクロは、アプリケーションに対してグローバルでもローカルでもかまいません。その後、マクロがカタログから削除されるまで、式と計算スクリプトで使用できます。
CDMは、次の方法で登録できます。
-
ローカルとして。マクロは、作成されたEssbaseアプリケーションでのみ使用できます
-
グローバルとして。マクロは、作成されたEssbaseサーバーで実行されているすべてのEssbaseアプリケーションで使用できます
CDMを作成するには:
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';カスタム定義マクロの実装
カスタム定義マクロ(CDM)は、Essbaseネイティブ計算コマンドと同じ方法で使用します。計算スクリプトで呼び出すか、アウトライン式に関連付けます。
CDMを使用するには:
カスタム定義マクロの表示
Essbaseでカスタム定義マクロ(CDM)を表示して、そのマクロが正常に作成されたかどうか、またはローカルとグローバルのどちらのどちらであるかを確認します。
CDMを表示するには、display macro MaxL文を使用します。
例
次のMaxL文では、Sampleアプリケーションに定義されているマクロのみが表示されます。
display macro on application Sample;次のMaxL文は、すべてのグローバル・マクロおよびローカル・マクロを表示します(それらを表示する権限がある場合)。
display macro;カスタム定義マクロの更新
Essbaseでカスタム定義マクロ(CDM)の構文または動作を変更するには、最初にそれがスコープ内でローカルかグローバルかを決定してから、MaxL文のcreate or replace macroを使用して定義を更新します。
CDMを更新するには:
例
次の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))';カスタム定義マクロのコピー
カスタム定義マクロ(CDM)は、適切なアクセス権がある任意のEssbaseサーバーとアプリケーションにコピーできます。アプリケーション権限レベルは、データベース・マネージャ以上である必要があります。
CDMをコピーするには、MaxLのcreate or replace macro文を使用します。
例
次のMaxL文は、@COVARIANCEマクロのコピーを作成します。
create macro Sample.'@COVARIANCE2'(single, single) as '@COVARIANCE'(single, single);カスタム定義マクロの削除
カスタム定義マクロ(CDM)をEssbaseから削除するには、最初にそれがスコープ内でローカルかグローバルかを決定してから、MaxL drop macro文を使用します。
CDMを削除するには:
次のMaxL文では、Sampleアプリケーションでのみ使用されているローカル・マクロ@COUNTRANGEが削除されます。
drop macro Sample.'@COUNTRANGE';次のMaxL文では、グローバル・マクロ@COUNTRANGEが削除されます。
drop macro '@COUNTRANGE';カスタム定義マクロのカタログの更新
マクロを追加、更新または削除した後、カスタム定義マクロ(CDM)のEssbaseカタログをリフレッシュします。変更がローカルである場合はMaxL文のカスタム定義のリフレッシュを使用し、変更がグローバルである場合はEssbaseサーバーを再起動します。
サーバー上のすべてのアプリケーションのCDMのカタログをリフレッシュするには、サーバーを再起動します。独立したデプロイメントの場合はサーバーの起動、停止およびチェック、OCIでのスタック・デプロイメントの場合は「コマンドを使用したプロセスの起動、停止およびステータスの表示」を参照してください。
1つのアプリケーションのCDMのカタログをリフレッシュするには、refresh custom definitionのMaxL文を使用します。
たとえば、次のMaxL文は、SampleアプリケーションのCDMのカタログをリフレッシュします。
refresh custom definition on application sample;