要使数据源更加灵活,可以在查询中实施运行时参数,以允许数据源使用变量。
这可以是 Essbase 中定义的替代变量、Smart View 用户穿透钻取到外部数据时网格上下文定义的运行时参数,或在外部源系统中编写的用户定义函数。
每当您计划在 Essbase 数据源中使用变量时,首先需要:
在数据源查询中包含变量语法。例如,数据源查询的语法中必须包含 ?
,其中 ?
是表示要在运行时定义的某个变量的占位符。
执行以下操作之一:
要定义数据源并为其实施参数,您必须是应用程序管理者或更高级别的角色。
能够在 Essbase 数据源中使用变量,可减少要维护的数据源,从而有助于简化操作。通过对数据源实施变量,您可以指定运行时查询上下文,以便在用户访问与 Essbase 多维数据集关联的数据源时应用该上下文。
例如,假设以下用例。
一位数据库管理者监督一项定期进行的数据加载作业,此作业每月向多维数据集加载数据。该数据库管理者现在可以使用替代变量加载当前月份的数据,而不是维护每月使用的加载规则。
一位应用程序管理者为不同的业务用例维护穿透钻取报表定义。该应用程序管理者在 Smart View 用户进行穿透钻取操作时从其拉取数据的基础数据源中实施变量。因此,该应用程序管理者要维护和调试的穿透钻取报表定义相应减少。
如果您要在 Essbase 使用多维数据集外部存储的数据时生成的查询中使用变量,则在数据源中设置默认参数。
要设置默认参数,请执行以下操作:
获取或创建与外部数据源的连接(例如,创建与 Oracle 数据库的连接)。
您可以使用全局连接(如果 Essbase Web 界面的“源”页中已存在全局连接),也可以创建应用程序级别连接。
基于将用于访问 Oracle 数据库的连接创建数据源。
您可以全局定义数据源(如果它应对所有应用程序可用),也可以在应用程序级别定义数据源。
要创建全局数据源,您必须是服务管理员。依次单击源、您的用户名下的数据源选项卡以及创建数据源。
或者,要创建应用程序级别数据源,您必须是应用程序管理者或对指定应用程序具有应用程序管理权限的超级用户。在应用程序选项卡上,单击应用程序名称。然后依次单击源、您的用户名下的数据源选项卡以及创建数据源。
在常规步骤中,对于连接,选择您创建的 Oracle 数据库连接。
对于名称,提供数据源名称。
对于查询,提供查询(此示例使用 SQL)。要使其成为参数化查询,必须包含筛选条件(WHERE 子句),以将源中的关系列映射到占位符。通过在查询语法中使用占位符 ? 指示变量的位置。该占位符用于将在后面的步骤中传递的参数。
select * from SB_DT where DIMENSION_YEAR=?
例如,假定您的关系数据库包含以下名为 SB_DT 的表。该表中 DIMENSION_YEAR 列的值为月份:
要在从 DIMENSION_YEAR 列选择月份值时使用变量,请在查询中应用以下筛选语法:where DIMENSION_YEAR=?
单击下一步。
在列步骤中,应用 Essbase 应将其与关系源数据中的每个列关联的适当数据类型。
例如,将数字列设置为双精度类型,将字母数字列保留字符串类型。
单击下一步。
在“参数”步骤中,创建了 Param1 — 存在此参数是因为在“常规”步骤中的查询中使用了 ?。
将使用变量保留未选中状态,双击值下的文本字段,然后键入运行时参数的默认值。此默认值的目的是为了在运行时参数具有无效上下文的情况下,Essbase 可以将此值用作回退。如果您要在穿透钻取报表定义中使用运行时参数,此步骤很重要。
您还可以将 Param1 重命名为对您的用例有意义的名称。例如,您可以将其重命名为 param_G_month 以指示参数使用全局变量表示当前月份,也可以将其重命名为 param_<appName>_month 以指示参数使用应用程序级别变量表示当前月份。使用 Essbase 服务器日志文件调试参数时,定制参数名称会很有用。
如果您要定制参数以引用替代变量,则不必提供默认值。请参见在数据源中使用替代变量,而不是本主题。
单击下一步。
请注意,在预览中默认参数已应用于查询。因此,预览中仅填充了 DIMENSION_YEAR 列值为 Jan 的外部源记录。
尽管该预览仅显示应用了默认参数的值,但以后,当您为穿透钻取报表定义实施运行时参数时,您可以访问的外部数据比该预览中可见的数据多。
单击创建以根据对外部源数据的此查询创建数据源。现在即可为数据源实施运行时参数。
以下工作流展示了如何使用 Essbase 中定义的替代变量基于对外部源数据的查询创建 Essbase 数据源。通过使用替代变量,可以更加灵活地设计从源数据拉取数据的查询。
在此示例中,将在 Essbase 中使用一个替代变量来声明当前月份。您不必每月更新数据源以拉入当前月份的数据,而是可以保留数据源不变,仅更新定义的替代变量。
创建全局或应用程序级别替代变量。
获取或创建与外部数据源的连接(例如,创建与 Oracle 数据库的连接)。
您可以使用全局连接(如果 Essbase Web 界面的“源”页中已存在全局连接),也可以创建应用程序级别连接。
基于将用于访问 Oracle 数据库的连接创建数据源。
您可以全局定义数据源(如果它应对所有应用程序可用),也可以在应用程序级别定义数据源。
在常规步骤中,对于连接,选择您创建的 Oracle 数据库连接。
对于名称,提供数据源名称。
对于查询,提供查询(此示例使用 SQL)。要使其成为参数化查询,必须包含筛选条件(WHERE 子句),以将源中的关系列映射到占位符。通过在查询语法中使用占位符 ?
指示变量的位置。该占位符用于将在后面的步骤中传递的参数。
select * from SB_DT where DIMENSION_YEAR=?
例如,假定您的关系数据库包含以下名为 SB_DT 的表。该表中 DIMENSION_YEAR 列的值为月份:
要在从 DIMENSION_YEAR 列选择月份值时使用变量,请在查询中应用以下筛选语法:where DIMENSION_YEAR=?
单击下一步。
在列步骤中,应用 Essbase 应将其与关系源数据中的每个列关联的适当数据类型。
例如,将数字列设置为双精度类型,将字母数字列保留字符串类型。
单击下一步。
在“参数”步骤中,创建了 Param1 — 存在此参数是因为在“常规”步骤中的查询中使用了 ?
。要定制 Param1 以引用替代变量,请单击使用变量,并从值下拉列表中选择替代变量。
如果要在应用程序中创建数据源,全局和应用程序级别替代变量都可供选择。应用程序级别变量以应用程序名称作为前缀。如果要创建全局数据源,则仅全局替代变量可供选择。
您可以将 Param1 重命名为对您的用例有意义的名称。例如,您可以将其重命名为 param_G_month 以指示参数使用全局变量表示当前月份,也可以将其重命名为 param_<appName>_month 以指示参数使用应用程序级别变量表示当前月份。使用 Essbase 服务器日志文件调试参数时,定制参数名称会很有用。
单击下一步。
请注意,在预览中替代变量已应用于查询。因此,预览中仅填充了 DIMENSION_YEAR 列值为 Aug 的外部源记录。
单击创建以根据对外部源数据的此查询创建数据源。