27 开发自定义计算宏
使用 Essbase 自定义宏 (custom-defined macros,CDM),可以将多个计算函数合并为一个函数。可以在计算脚本或公式中使用它们。
在测试应用程序中本地创建新宏并对其进行测试。仅在测试应用程序中测试 CDM 并准备在生产环境中使用 CDM 后,才能在全球注册 CDM。
要创建和管理 CDM,您必须具有或更高级别的数据库管理器权限。
只有块存储多维数据集支持 CDM。
名称自定义宏
Essbase 自定义宏 (custom-defined macro,CDM) 名称必须唯一,并且以 @ 符号开头。本地宏前面带有应用程序名称。
命名 CDM 时,应遵守以下准则:
-
使用 "@" 符号启动宏名称;例如 @MYMACRO。名称的其余部分可以包含字母、数字和以下符号:@、#、$ 和 _。宏名称不能包含空格。
-
对于仅由其他宏调用的宏,请以 "@_" 开头宏名称,以将其与通用宏和函数区分开来。
-
为宏指定唯一的名称。此外,宏名称必须与自定义函数的名称和现有计算函数的名称不同。
注意:
如果应用程序包含与全局宏同名的本地宏,则本地宏优先并用于计算。
-
对于本地宏,必须将应用程序名称附加到宏名称前面,并将应用程序名称与宏名称分隔开:
AppName.@MacroName例如:
Sample.@MYMACRO -
由于全局宏可用于在创建宏的 Essbase Server 上运行的任何应用程序,因此您不会为其分配应用程序名称。
创建自定义宏
创建自定义宏 (CDM) 时, Essbase 会将其注册到目录中。宏可以是应用程序的全局宏,也可以是应用程序的本地宏。然后,您可以在公式和计算脚本中使用它,直到从目录中删除宏。
您可以通过以下方式注册 CDM:
-
作为本地,在其中,宏仅在创建宏的 Essbase 应用程序中可用
-
作为全局,在其中,宏可用于在创建宏的 Essbase Server 上运行的所有 Essbase 应用程序
要创建 CDM,请执行以下操作:
使用 create macro MaxL 语句。
以下 MaxL 语句创建名为 @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 中查看自定义宏 (CDM),以确定是否已成功创建宏,以及它是本地还是全局的。
要查看 CDM,请使用 display macro MaxL 语句。
示例
以下 MaxL 语句仅显示示例应用程序中定义的宏:
display macro on application Sample;如果您有权查看以下 MaxL 语句,则将显示所有全局和本地宏:
display macro;更新自定义宏
要更改 Essbase 中自定义宏 (custom defined macro,CDM) 的语法或行为,请首先确定该宏在作用域中是本地还是全局,然后使用 MaxL 语句创建或替换宏来更新其定义。
要更新 CDM,请执行以下操作:
示例
以下 MaxL 语句更改本地宏 @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 Server 和应用程序。您的应用程序权限级别必须为 Database Manager 或更高级别。
要复制 CDM,请使用 create or replace macro MaxL 语句。
示例
以下 MaxL 语句创建 @COVARIANCE 宏的副本:
create macro Sample.'@COVARIANCE2'(single, single) as '@COVARIANCE'(single, single);删除自定义宏
要从 Essbase 中删除自定义宏 (custom defined macro,CDM),请首先确定该宏在作用域中是本地还是全局,然后使用 MaxL 删除宏语句。
要删除 CDM,请执行以下操作:
以下 MaxL 语句将删除本地宏 @COUNTRANGE,该宏仅用于示例应用程序:
drop macro Sample.'@COUNTRANGE';以下 MaxL 语句将删除全局宏 @COUNTRANGE:
drop macro '@COUNTRANGE';刷新定制宏的目录
添加、更新或删除宏后,刷新自定义宏 (CDM) 的 Essbase 目录。如果更改是本地的,则使用 MaxL 语句刷新定制定义;如果更改是全局的,则重新启动 Essbase Server 。
要刷新服务器上所有应用程序的 CDM 目录,请重新启动服务器。有关独立部署,请参见 Start、Stop 和 Check Servers ;有关 OCI 上的堆栈部署,请参见 Use Commands to Start、Stop and View Status of Processes 。
要刷新一个应用程序的 CDM 目录,请使用 refresh custom definition MaxL 语句。
例如,以下 MaxL 语句将刷新示例应用程序的 CDM 目录:
refresh custom definition on application sample;