自治数据仓库中的事实表存储具有联合分区的 Essbase 多维数据集的数据。如果您没有满足联合分区要求的事实表,则必须创建一个。您还需要了解透视维是什么,以便您可以从 Essbase 多维数据集选择一个透视维。
开始阅读本节之前,请先创建 Essbase 应用程序和多维数据集(如果还没有)。
对于联合分区,事实表存储 Essbase 多维数据集的数据值。如果您在自治数据仓库中没有所需的事实表,必须创建一个。
开始之前,请确保您有用于事实表的空方案。请参见创建用于联合分区的方案。
事实表必须采用 Essbase 支持的格式,这意味着其内容和配置满足以下要求:
多维数据集的每个(非属性)维都必须表示为单个列标题,例外是多维数据集的其中一个维(通常为包含度量/账户的维)必须透视到两列或更多列中。
注:
在本文档中的其他位置,透视的维称为透视维。
事实表必须包含唯一记录(无重复记录),每个 Essbase 单元格交叉点序列为一行。
如果您熟悉 Essbase 数据导出,您将注意到事实表的配置与 Essbase 列导出完全相同。
与列导出相似,事实表必须包括:
一个保存大纲的每个(非属性)维(透视维除外)的列
一个保存透视维的每个存储成员的列
下面是一个度量维已透视(意味着它是透视维)的事实表示例。透视维影响事实表的配置,例如,维的存储成员变为列标题:SALES、COGS、MARKETING、PAYROLL、MISC、INTITIAL_INVENTORY 和 ADDITIONS。
您可以使用 SQL 构建事实表,也可以通过 Essbase 数据导出创建事实表。您可以使用自治数据仓库工具或 Essbase 数据加载功能将数据加载到事实表。
事实表的其他构建准则包括:
事实表中的列数必须少于 1000。
不要包含 Essbase 中将映射到属性维的列。
事实表的精度不应低于 IEEE binary64(双精度)。
事实表应对维成员使用国际化字符串,类型为 NVARCHAR2 ,字符串长度为 1024 位。
事实表创建示例
要在自治数据仓库中创建事实表,可以使用 SQL。
使用 SQL Developer 或您选择的工具,以方案所有者身份登录自治数据仓库(从创建用于联合分区的方案步骤)。
使用 SQL 创建事实表(如果还没有)。
例如,以下 SQL 基于从 Essbase 多维数据集 Sample Basic 导出的数据创建事实表。
CREATE TABLE "SAMP_FACT" ( "PRODUCT" NVARCHAR2(1024), "MARKET" NVARCHAR2(1024), "YEAR" NVARCHAR2(1024), "SCENARIO" NVARCHAR2(1024), "SALES" NUMBER(38,0), "COGS" NUMBER(38,0), "MARKETING" NUMBER(38,0), "PAYROLL" NUMBER(38,0), "MISC" NUMBER(38,0), "INITIAL_INVENTORY" NUMBER(38,0), "ADDITIONS" NUMBER(38,0) ) NOCOMPRESS LOGGING PARALLEL 4;
注意
在上述示例中,事实表名称为 SAMP_FACT,并基于 Sample Basic。
为了获得最佳性能,事实表中的所有非数字列的类型应为 NVARCHAR2(1024),所有数字列的类型应为 NUMBER。
Oracle 建议通过添加 PARALLEL 4 以允许在自治数据仓库中并行创建索引。
元数据列不应允许包含空值。
如果在使用多维数据集时包含数据生成式过程(例如增量数据加载或批量脚本更新),Oracle 建议使用 NOCOMPRESS。如果多维数据集主要用于读取操作,则使用 COMPRESS 以优化事实表来进行报告。
如果在创建事实表时出现以下验证错误,请删除空值行。
ORA-18265: fact table key column ("<DIM_NAME>") with value ('') not in dimension("<Name_of_Column") star table key column
为了获得最佳性能,如果没有明确需求,不要对表添加任何特定约束条件。
在上述示例中,事实表名称基于 Sample Basic(在 Essbase 文件目录中的库中提供)。您可以从此示例多维数据集或任何其他 Essbase 多维数据集导出数据,然后加载这些数据来构建事实表。要执行此操作,您将需要设置身份证明以便将数据加载到联合分区应用程序。要设置身份证明以及了解如何使用 DATAEXPORT 命令将数据导出为 DBMS 格式,请参阅联合分区数据加载。
设计联合分区时,您需要选择透视维。透视维是基于 Essbase 多维数据集大纲指定的维,用于表示数字数据值。
透视维不必是度量/账户,但可以是度量/账户。
透视维的所有存储成员必须映射到表示您在自治数据仓库中的数字数据值的事实表列。
如果您需要运行 Essbase 块存储 (BSO) 计算脚本,请选择密集维作为透视维。如果透视维是稀疏维,则联合分区不支持计算脚本。
透视维应具有相当静态的成员名称,并且不应该具有大量成员。原因:如果更改 Essbase 多维数据集大纲中的透视维(例如添加或重命名存储成员),需要手动在自治数据仓库中相应地更新事实表,并且还需要重新创建联合分区。
不应将包含需要复杂的动态公式(以 Sample Basic 为例,例如 "Opening Inventory" 和 "Ending Inventory")的成员的 Essbase 维选为透视维。
在创建联合分区时要提供您选择的透视维。
Oracle 数据库存在 1,000 列的限制,并且透视维继承此限制。确定透视维中符合条件的列成员数,以确保不会达到或超过限制。透视维中潜在存储成员组合数加上多维数据集中的维数应不超过 1,000。
对于聚合存储多维数据集,不应选择包含多级存储成员层次的维作为透视维。应选择包含动态层次或属于平面单级层次的存储层次(其中所有成员都是 0 级存储成员)的透视维。