*FUNCTION/*ENDFUNCTION
ユーザ定義関数は、対応する MDX ステートメント (またはその一部) の代わりに式に挿入できるプレースホルダの名称です。これにより、ロジックステートメントの可読性が大きく改善されます。
ロジック関数の定義は、ロジックファイルや組み込まれたファイル内であればどこにでも挿入することができます。構文は以下のとおりです。
単一行関数の場合は次のとおりです。
*FUNCTION {functionname}({Param1}[,{Param2}…]) = {Function Text}
複数行関数の場合は次のとおりです。
*FUNCTION {functionname}({Param1}[,{Param2}…])
{Function text}
{Function text}
*ENDFUNCTION
スクリプトロジックファイル内で定義できる関数の数には制限がありません。
対応する MDX 文字列を動的に変更するために関数に受け渡すことができるパラメータ数には制限がありません。
関数は現在、ネストできません。つまり、関数には別の関数を含めることはできません。
同じ関数が再定義されない限り、ロジックファイルの関数の位置は関係ありません。この場合、関数の新規定義のみが再定義した時点から適用されます。
受け渡されたパラメータの値は、長い単語に埋め込まれていても、チェックは行われずに関数テキストに置き換えられます。
MDX 予約語やロジックにおける予約語を取り囲むテキストとの齟齬のリスクを避けるために、パラメータの名称を定義する際には注意が必要です。以下の例にあるように、パラメータ名を常にデリミタで囲むのがベストプラクティスです。
*FUNCTION Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION[#CE0661000] = Price([CE0004000],[CE0652000])
この例では価格を計算します。ゼロによる除算エラーを回避する目的でゼロ分母をチェックする必要はありません。スクリプトロジックエンジンにより、ゼロによる除算エラーが自動的にゼロに置き換えられます。
また、*FUNCTION を使用してメンバーまたはディメンションを置き換え、スクリプトをより読みやすくすることができます。
*FUNCTION PERSONAL_COST = CE0004000
*FUNCTION LAB_HOUR = CE0652000
*FUNCTION PER_PRICE = CE0661000
*FUNCTION ACCOUNT = P_ACCT
Price(%COST%,%HOUR%)
%COST%/%HOUR%
*ENDFUNCTION
[ACCOUNT].[#PER_PRICE] = Price([ACCOUNT].[PERSONAL_COST],[ACCOUNT].[LAB_HOUR])
以下の文字および空白文字がロジック関数名に無効です。
+ - / * ^ % > < = ( ) [ ] { } , .; ' : & \ | # ~ "
この文書に含まれるソフトウェアコーディングおよびコード行/文字列 (以下 "コード" という) は例として示されるものであり、本稼動システム環境で使用することを意図するものではありません。コードは、特定のコーディングの構文とフレージングルールを分かりやすく説明し、視覚化することを目的としています。SAP は、ここで提供されるコードの正確性や完全性を保証せず、コードの使用によって生じたエラーまたは損害に対して責任を負いません。ただし、当該損害が SAP の故意または重大な過失によって生じた場合は除くものとします。