*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 故意或因其重大疏忽所造成。