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';

实施自定义宏

使用自定义宏 (CDM) 的方式与使用 Essbase 本机计算命令的方式相同:在计算脚本中调用宏或将其与大纲公式关联。

要使用 CDM,请执行以下操作:

  1. 创建或打开现有的计算脚本或公式。
    • 如果是在本地注册的,则必须在创建宏的应用程序中使用计算脚本或公式。

    • 如果它是全局注册的,则可以在 Essbase 服务器上的任何应用程序中使用任何计算脚本或公式。

  2. 将 CDM 添加到计算脚本或公式。

    例如,要使用本章前面的 @COUNTRANGE 自定义宏,请创建以下计算脚本:

    CountMbr = @COUNTRANGE(Sales, Jan:Dec);

    将此计算脚本与 Sample.Basic 数据库一起使用,或将 "Sales, Jan:Dec" 替换为测试数据库中的成员范围。

  3. 保存计算脚本或公式,然后按常规方式运行。

查看自定义宏

Essbase 中查看自定义宏 (CDM),以确定是否已成功创建宏,以及它是本地还是全局的。

要查看 CDM,请使用 display macro MaxL 语句。

示例

以下 MaxL 语句仅显示示例应用程序中定义的宏:

display macro on application Sample;

如果您有权查看以下 MaxL 语句,则将显示所有全局和本地宏:

display macro;

更新自定义宏

要更改 Essbase 中自定义宏 (custom defined macro,CDM) 的语法或行为,请首先确定该宏在作用域中是本地还是全局,然后使用 MaxL 语句创建或替换宏来更新其定义。

要更新 CDM,请执行以下操作:

  1. 确定宏是本地注册还是全局注册。

    请参阅查看自定义宏

  2. 要更新宏定义,请使用 create macro MaxL 语句。

示例

以下 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,请执行以下操作:

  1. 确定宏是本地注册还是全局注册。

    请参阅查看自定义宏

  2. 验证没有计算脚本或公式正在使用 CDM。
  3. 要从宏目录中删除宏,请使用 drop macro MaxL 语句。
  4. 重新启动与宏关联的所有应用程序。

以下 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;