*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 不对因使用代码而造成的错误或损害负责,除非这些损害是由 SAP 故意或因其重大疏忽所造成。