通过使用保存的连接和数据源,您可以设置多维数据集以便轻松与各种源数据进行交互。
例如,您可以在多维数据集与 RDBMS 表之间设置分区,在多维数据集与 Oracle 数据库之间共享数据,开发使用变量的安全筛选器以从源数据外部提取成员或用户名,并从 REST API 端点加载数据。
许多多维数据集操作需要连接信息(例如,登录详细信息)来访问远程源数据或主机。您可以将这些连接和数据源定义一次,并在各种操作中重新使用它们,这样一来,便无需在执行任务时指定详细信息。
您可以全局或按每个应用程序实施保存的连接和数据源。这些抽象实施有助于以下操作:
加载维和数据
导入多维数据集
定义变量安全筛选器
使用分区连接多维数据集,并访问实时数据
穿透钻取到远程数据源
本章中的主题:
关于连接和数据源
创建连接和数据源
为数据源实施参数
许多操作需要连接到多维数据集外部的源数据。您在
Oracle Essbase
中创建并保存为可重用对象的连接和数据源提供了高效完成此操作的方法。
如果在外部数据源和
Essbase
之间有网络连接,则可以在
Essbase
中定义连接和数据源,以便从外部源轻松“拉取”数据。如果在 Essbase 和外部数据源之间没有网络连接,则应当使用 CLI 工具通过流式传输完成数据加载或维构建,方法是首先创建本地连接,然后使用流式传输选项发出 dataload 或 dimbuild 命令。
连接
存储有关外部服务器的信息以及访问它所需的登录身份证明。通过定义可由多个进程和构件使用的连接,您可以简化分析的多个方面。例如,在需要更改系统密码时,您只需更新一个连接。
数据源
是另一种可以定义一次后重用的对象,可以帮助您管理进出多维数据集的数据流。您可以定义数据源来表示任何外部数据源,不论该源是关系型系统、表、文件还是其他多维数据集。
您可以定义一个连接并使用它来访问多个数据源。例如,请考虑这样的一个外部 Oracle 数据库服务器:它针对产品、经销商和销售领域分别具有表。您只需要一个连接来访问 Oracle 数据库,但您可能希望创建唯一数据源来访问各个表。
您可能会为每个连接定义多个数据源的一个用例是:如果您使用单独的加载规则在多维数据集中构建各个维,则可以设置每个规则文件访问 Oracle 数据库中的相关表。例如,假设您的多维数据集具有 Market 维,并且您使用 Dim_Market 加载规则定期构建维,从 SALES_TERRITORIES 表填充 Market 维。同样地,您使用 Dim_Product 加载规则,从 PRODUCT 表填充 Product 维。所有加载规则可使用同一个连接,但由于它们从单独的表提取数据,您定义了两个不同的数据源。
过去,您需要将连接和源数据详细信息硬编码到
Essbase
构件中,例如规则文件、位置别名和分区。虽然这些构件中仍支持硬编码的信息,但如果您全局(或者在应用程序级别)定义连接和数据源,则您可以更高效地工作。
创建连接和数据源
在创建从
Essbase
到外部源数据的连接之前,您必须从系统管理员获取连接详细信息,例如,主机名、用户名、密码以及任何其他服务身份证明。
创建全局连接
创建应用程序级别连接
特定于源的工作流
创建全局连接
要创建全局连接(可供多个应用程序访问),请执行以下操作:
以
服务管理员
身份登录到
Essbase Web 界面
。
单击
源
。
单击
创建连接
,然后选择需要连接到的源。
Essbase
附带的受支持源和版本列在认证表的
数据库
部分(请参见
平台 SQL
表)。如果您要使用自己上载的首选 JDBC 驱动程序,请参阅
为一般 JDBC 驱动程序创建连接和数据源
了解详细信息。
完成连接详细信息并保存连接。接下来,创建一个或多个使用连接的数据源。输入详细信息根据源类型而不同。
在
Essbase
中,在“源”页上单击
连接
。
或者,要在应用程序级别而不是全局定义连接和数据源,请从“应用程序”页开始,而不是从“源”页开始。从应用程序名称右侧的“操作”菜单,启动检查器并单击
源
。本主题中使用的示例是 Sample Basic 上定义的应用程序级别连接。
单击
创建连接
并选择
Oracle 数据库
。
输入连接名称、主机、端口号、用户名和密码。输入
用户
名时,输入 Oracle 数据库用户名,不需要输入角色。选择
SID
(服务器 ID)或
服务
,然后输入服务器详细信息。
单击
数据源
,然后单击
创建数据源
。
从
连接
下拉框中,选择您刚刚创建的连接的名称,例如 SAMPLE.OracleDB。应用程序级别连接以应用程序名称作为前缀,其格式为
appName.connectionName
。
提供数据源的名称,例如 OracleDB_DS。
(可选)输入数据源的说明;例如
SAMPLE_BASIC_TABLE on Oracle Database
。
在“查询”字段中,提供合适的 SQL 查询,该查询可选择您希望在此数据源中可用的 Oracle 数据库数据。
定义
Essbase
与自治数据仓库之间的连接和数据源。
如果将在
Essbase
与
共享基础结构上的自治数据仓库
之间创建联合分区,请参见以下主题,而不是本主题:
为联合分区创建连接
。
要创建全局连接,您需要具有
服务管理员
角色。要创建应用程序级别连接,您需要具有
用户角色
,以及对应用程序的
应用程序管理者权限
。
在
Essbase
中,在“源”页上单击
连接
。
要在应用程序级别而不是全局定义连接和数据源,请从“应用程序”页开始,而不是从“源”页开始。从应用程序名称右侧的“操作”菜单,启动检查器并单击
源
。
单击
创建连接
并选择
Oracle 数据库
。
使用切换开关选择
自治
。
如果您需要上载 Wallet,可从 Oracle Cloud Infrastructure 中的自治数据仓库管理页选择
下载客户端身份证明 (Wallet)
,获取 Wallet 文件。
输入自治数据仓库用户名、密码和(可选)说明。
单击
测试
验证连接,如果验证成功,则单击
创建
。
如果显示连接错误,您可能需要展开
高级选项
以调整最小和最大连接池大小。
请参见
《Universal Connection Pool Developer's Guide》
(《通用连接池开发人员指南》)中的“
About Controlling the Pool Size in UCP(关于控制 UCP 中的池大小)
”。
验证连接已成功创建并且显示在连接列表中。
接着,您需要为自治数据仓库连接创建数据源。单击
数据源
,然后单击
创建数据源
。
从“连接”下拉框中,选择刚创建的连接的名称,例如 EssbaseADW。对于应用程序级别的数据源,选择应用程序级别的连接名称,其格式为
appName.connectionName
。
提供数据源的名称,例如 ADW_DS。
(可选)输入数据源的说明,例如,自治数据仓库数据源。
在
查询
字段中,提供合适的 SQL 查询,该查询可选择您希望在此数据源中可用的自治数据仓库数据。
单击
下一步
。如果查询自治数据仓库区域时使用的 SQL 语句正确,则您应该会看到查询的列已填充。
更改任何其他源特定的参数(如果适用),然后单击
下一步
。
检查预览窗格。您应该可看到从自治数据仓库提取数据列的 SQL 查询的结果。
如果预览看上去正确,请单击
创建
以完成数据源创建。
在
Essbase
中,在“源”页上单击
连接
。
或者,要在应用程序级别而不是全局定义连接和数据源,请从“应用程序”页开始,而不是从“源”页开始。从应用程序名称右侧的“操作”菜单,启动检查器并单击
源
。本主题中使用的示例是 Sample Basic 上定义的应用程序级别连接。
单击
创建连接
并选择
Essbase
。
输入连接名称;例如
Essbase2
。
输入“主机”和“端口”信息,或选中
使用 URL
对应的复选框。连接信息可由服务管理员提供。
如果要使用 URL,请使用搜索 URL 格式。搜索 URL 是服务管理员提供的 URL,在结尾附加了
/agent
。例如:
https://192.0.2.1:443/essbase/agent
单击
测试
验证连接,如果验证成功,则单击
创建
。
验证连接已成功创建并且显示在连接列表中。
接下来,您将为
Essbase
连接创建数据源。
单击
数据源
,然后单击
创建数据源
。
从
连接
下拉框中,选择刚刚创建的连接的名称。
输入数据源的名称及可选说明。
选择将用于此数据源的应用程序和数据库。
提供有效的 MDX 查询,该查询选择您希望在此数据源中使其可用的多维数据集数据。
将源数据文件上载到
Essbase
上的文件目录中。
如果您需要此任务流的示例源数据文件,则可将文件目录的库部分中的
UserDetails.csv
复制并粘贴到应用程序的文件目录(或引用此文件,而无需移动它)。它表示 22 个用户的数据资料档案库,其中包含其关联的国家/地区、成本中心、货币、经理、公司、业务部门和办事处。
在
Essbase
中,在“源”页上单击
连接
。
或者,要在应用程序级别而不是全局定义连接和数据源,请从“应用程序”页开始,而不是从“源”页开始。从应用程序名称右侧的“操作”菜单,启动检查器并单击
源
。本主题中使用的示例是 Sample Basic 上定义的应用程序级别连接。
单击
创建连接
并选择
文件
。
输入连接的名称;例如
UserDetails
。
提供源数据文件的目录路径。
输入可选说明;例如
CSV file of user details
。
通过此工作流,
Essbase
可以使用您上载到
Essbase
服务器的驱动程序连接到任一 JDBC 数据源。
如果您是
Essbase
部署管理员,您可以配置
Essbase
以使用您上载到
Essbase
服务器计算机的首选驱动程序。Oracle 已使用 Oracle 驱动程序测试了
Essbase
JDBC 连接。要使用其他供应商提供的 JDBC 驱动程序,请查阅驱动程序文档,了解有关指定 JDBC 数据源的 URL 和身份证明的要求。有关性能相关的步骤,请参阅供应商 JDBC 文档。
确保用于
Essbase
的 JDBC 驱动程序支持使用
setFetchSize
方法控制在处理结果集时使用的内存。为了在数据加载和维构建过程中获得最佳性能,
Essbase
在每次网络调用中提取 1000 个记录。
要配置
Essbase
以使用一般 JDBC 驱动程序,请执行以下操作:
使用 SSH 连接到
Essbase
服务器计算机。
手动在服务器实例上的 <
Essbase 产品主目录
> 中创建
drivers
目录。
确保
drivers
全小写,因为路径区分大小写。
从供应商站点,下载要使用的的 JDBC 驱动程序 JAR。
Essbase
支持的 Oracle 数据库 JDBC 驱动程序为
ojdbc8.jar
。
如果使用
自治数据仓库
,则需要下载包含 Oracle JDBC 瘦驱动程序和配套 JAR 的完整档案 (
ojdbc8-full.tar.gz
)。
将 JDBC 驱动程序 jar 上载到
Essbase
实例上的
drivers
目录。
仅将每个数据库驱动程序的一个版本上载到
drivers
目录。例如,不要同时上载
sqljdbc41.jar
和
sqljdbc42.jar
,否则
Essbase
将使用较旧版本(因为在 CLASSPATH 中它位于首位)。
如果使用
自治数据仓库
,则提取档案 (
ojdbc8-full.tar.gz
) 并将所有内容直接移至
drivers
目录(不是子文件夹)。
创建与 JDBC 驱动程序的连接。
在
Essbase Web 界面
中,
创建全局连接:在“源”页上,单击
连接
。
创建应用程序级别连接:从应用程序名称右侧的“操作”菜单,启动检查器并单击
源
。
单击
创建连接
,然后选择
JDBC
。
Essbase
会在
drivers
文件夹中查找 JDBC 驱动程序。如果未找到
jar
文件,当您测试连接时,
Essbase
将返回“未找到类”(或无法加载驱动程序)。
在
创建连接
屏幕中,
提供 JDBC 连接的名称。例如 OrclJDBC。
在 "URL" 字段中,提供 JDBC 连接字符串。例如,
jdbc:oracle:thin:@myserver:1521:orcl
。从 JDBC 提供程序获取 JDBC 连接字符串。
对于“用户”和“密码”字段,输入有权访问数据库的用户的身份证明。
在“驱动程序”字段中,提供 JDBC 驱动程序的全限定类名。例如,
oracle.jdbc.driver.OracleDriver
。
要使用唯一标识数据库的 Oracle 系统 ID (Oracle System ID, SID),请使用语法
jdbc:oracle:thin:@<host>:<port>:<SID>
。例如:
jdbc:oracle:thin:@myhost:1521:orcl
如果在监听程序中注册了 Oracle 数据库,则您可以使用短语法
jdbc:oracle:thin:@<host>:<port>/<servicename>
在 URL 中使用服务名称,而不是 SID。示例:
jdbc:oracle:thin:@myhost.example.com:1521/orcl.esscs.myhost.example.com
以下示例采用长语法使用服务名称。
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(host=myhost.example.com)(protocol=tcp)(port=1521))(CONNECT_DATA=(SERVICE_NAME=orcl.example.com)))
如果您要在 URL 语法中使用
自治数据仓库
,则必须包含 TNS_ADMIN 环境变量,以指定 Wallet 的路径。Wallet 可以位于
Essbase
服务器计算机上的任何位置,但您必须使用类似于
jdbc:oracle:thin:@<database_service_name>?TNS_ADMIN=<walletpath>
的语法提供完整路径。
Linux 示例
jdbc:oracle:thin:@adwsql_low?TNS_ADMIN=/scratch/oracle_home/dist/essbase/drivers/adwConn
Windows 示例
jdbc:oracle:thin:@adwsql_low?TNS_ADMIN="C:\\Oracle123\\Middleware\\Oracle_Home\\essbase\\drivers\\adwConn"
OCI 部署上的示例
jdbc:oracle:thin:@adwsql_low?TNS_ADMIN=/u01/data/essbase/catalog/users/[email protected]/adwconn
单击
测试
验证连接,如果验证成功,则单击
创建
。
验证连接已成功创建并且显示在连接列表中。
从
连接
下拉框中,选择您刚刚创建的连接的名称,例如 SAMPLE.OrclJDBC。应用程序级别连接以应用程序名称作为前缀,其格式为
appName.connectionName
。
提供数据源的名称,例如 OrclJDBC_DS。
(可选)输入数据源的说明;例如
SAMPLE_BASIC_TABLE on Oracle Database
。
在“查询”字段中,提供合适的 SQL 查询,该查询可选择您希望在此数据源中可用的数据。
单击
下一步
。如果查询表时使用的 SQL 语句正确,则您应该会看到查询的列已填充。
将任何数值列更改为“双精度”,然后单击
下一步
。
更改任何其他源特定的参数(如果适用),然后单击
下一步
。有关参数使用的信息,请参见
为数据源实施参数
。
检查预览窗格。您应该会看到从外部源提取数据列的查询的结果。
如果预览看上去正确,请单击
创建
以完成数据源创建。
要使数据源更加灵活,可以在查询中实施运行时参数,以允许数据源使用变量。
这可以是
Essbase
中定义的替代变量、
Smart View
用户穿透钻取到外部数据时网格上下文定义的运行时参数,或在外部源系统中编写的用户定义函数。
每当您计划在
Essbase
数据源中使用变量时,首先需要:
在数据源查询中包含变量语法。例如,数据源查询的语法中必须包含
?
,其中
?
是表示要在运行时定义的某个变量的占位符。
执行以下操作之一:
在数据源中设置一个固定的
默认参数
值,以便在运行时变量具有无效上下文的情况下,
Essbase
可以将此值用作回退,或者
设置要由数据源使用的
替代变量
以参数形式传递用户定义的外部函数(或存储过程)
要定义数据源并为其实施参数,您必须是应用程序管理者或更高级别的角色。
能够在
Essbase
数据源中使用变量,可减少要维护的数据源,从而有助于简化操作。通过对数据源实施变量,您可以指定运行时查询上下文,以便在用户访问与
Essbase
多维数据集关联的数据源时应用该上下文。
例如,假设以下用例。
一位数据库管理者监督一项定期进行的数据加载作业,此作业每月向多维数据集加载数据。该数据库管理者现在可以使用替代变量加载当前月份的数据,而不是维护每月使用的加载规则。
一位应用程序管理者为不同的业务用例维护穿透钻取报表定义。该应用程序管理者在
Smart View
用户进行穿透钻取操作时从其拉取数据的基础数据源中实施变量。因此,该应用程序管理者要维护和调试的穿透钻取报表定义相应减少。
对于
查询
,提供查询(此示例使用 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
中使用一个替代变量来声明当前月份。您不必每月更新数据源以拉入当前月份的数据,而是可以保留数据源不变,仅更新定义的替代变量。
创建全局或应用程序级别
替代变量
。
对于
查询
,提供查询(此示例使用 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
服务器日志文件调试参数时,定制参数名称会很有用。