目的
在 Warehouse Builder 中设计关系目标仓库包括这样的一个过程,即建立可为数据仓库提供功能的关系(从第三常规表单到维)架构的模型。另外,您还可以设计提供高端分析的多维系统。
在本教程中,您将为一个小型的数据仓库建模,其中包含一个多维数据集和两个维。该目标仓库的数据源为平面文件。
注: 本教程及其设置脚本仅支持 OWB 11g 第 1 版。该 Oracle 示例教程的早期版本可用于 OWB 10g 第 1 版和第 2 版。
本教程包括下列主题:
概述
前提条件
定义目标仓库模块
创建外部表
设计维
设计多维数据集
总结
Oracle Warehouse Builder 提供了高级的关系建模和维度建模功能。该软件允许您为关系对象(如表、视图、物化视图、序列和外部表)和维度目标对象(如维和多维数据集)创建定义。
Oracle Warehouse Builder 将维度设计 与物理实施 进行了明确的分区。您通过简单的单击操作即可为维度对象选择关系实施或多维实施。因此,同一个维度对象设计可以实施为关系目标仓库,也可以实施为多维(在 OLAP 中实施)仓库。
在本教程中,您将设计一个实施为关系目标仓库的维度模型。对于关系建模,Warehouse Builder 同时支持星形和雪花形架构的设计和实施。
您还将为一个简单的星形架构建模,该架构包含的多维数据集带有引用两个维的外键。
开始学习本教程之前,您应该完成以下操作:
1. | 下载 owbdemo_files.zip 文件,并将该文件解压缩到计算机硬盘驱动器上的目录中 |
2. | 完成教程 1 和 2。继续以 rep_owner/rep_owner 身份登录。 |
要开始设计目标仓库模型,您应该首先定义一个目标模块。目标模块包含您设计的目标对象的元数据定义。每个目标模块都必须与一个目标用户架构进行映射。
因此,在创建 Warehouse Builder 目标模块之前,您需要先创建一个目标架构存储部署中的目标对象。然后再分配一个合适的位置,从而确保该目标模块引用了此目标架构。
要设置目标仓库模块,执行以下步骤:
![]() | 创建目标用户和目标位置 | |
![]() | 创建目标模块 |
创建目标用户和目标位置
作为工作区的所有者登录到 Warehouse Builder Design Center 之后,Warehouse Builder 将在控制台的右下角显示 Global Explorer。您可以根据实施要求在此 Global Explorer 面板中定义元数据安全策略。
现在,您将通过执行下列步骤来创建目标用户和目标位置:
注:您还可以使用 Repository Assistant 来创建该目标用户。
1. | 在 Global Explorer 面板中展开 Security 节点。右键单击 Users 节点,并选择 New。 注:在创建新用户之前,您必须先保存或恢复您的更改。要保存以前的更改,请在 Design 菜单中选择 Save All,或者单击工具栏中的 | ||||||||||||||||||||||||
2. | 在 Create User 对话框中,您可以从数据库用户的可用列表中选择一个用户,或者创建一个新用户。 单击 Create DB User 在数据库中创建一个新的目标用户。
| ||||||||||||||||||||||||
3. | 您需要具有 DBA 权限才能创建新的目标用户。在 Create Database User 对话框中,输入 system 作为用户名和系统帐户口令。 输入 EXPENSE_WH/EXPENSE_WH 作为新数据库用户的用户名/口令。接受所有表空间属性的默认值。单击 OK。 您将返回到 Create User 对话框。您会看到 EXPENSE_WH 已经添加到 Selected Users 列表中。单击 OK。 | ||||||||||||||||||||||||
4. | 当进度窗口关闭后,检查 Users 节点。您会发现 EXPENSE_WH 用户已经添加到现有目标用户列表中。 | ||||||||||||||||||||||||
5. | 现在,为 EXPENSE_WH 用户创建目标位置。 注:位置定义的是您要在其中部署对象的数据库架构或目标工具的相关信息。位置特定于 Oracle 数据库、SAP 或平面文件等模块类型。 展开 Locations > Databases。右键单击 Oracle 并选择 New。 | ||||||||||||||||||||||||
6. | 在 Create Oracle Database Location 窗口中,指定以下信息:
单击 Test Connection。此时应显示一条成功消息。 | ||||||||||||||||||||||||
7. | 单击 OK。查看 Locations > Database > Oracle 节点。您将发现 EXPENSE_WH_LOCATION 已经添加到现有位置列表中。 |
您已经创建了一个新的目标架构 EXPENSE_WH,该架构将以物理方式存储您的目标仓库对象。您还为新的目标架构创建了一个目标位置 EXPENSE_WH_LOCATION。
创建目标模块
现在,您将创建一个指向新目标架构的模块。
1. | 在 OWB_DEMO 项目中,展开 Databases 节点,右键单击 Oracle 节点,然后选择 New。 Create Module 向导启动。在 Welcome 页面中单击 Next。 |
2. | 在 Name and Description 页面中,输入 EXPENSE_WH 作为该模块的名称。接受 Development 作为模块的状态,并确保模块类型为 Warehouse Target。单击 Next。
|
3. | 在 Connection Information 页面的 Location 下拉列表中,选择 EXPENSE_WH_LOCATION 作为该模块的位置。您会看到系统已经指定了所有相关连接信息。这是因为 Warehouse Builder 直接从您创建的用户那里获取了位置信息。单击 Next。 注:从 Location 下拉列表中选择 EXPENSE_WH_LOCATION 之前,会默认选择 EXPENSE_WH_LOCATION1。这是因为,每当您尝试创建模块时,Warehouse Builder 都会自动分配一个以模块名称加 _LOCATION 后缀为名称的位置。 您已经选择了位置 EXPENSE_WH_LOCATION,这是在您创建目标用户 EXPENSE_WH 时创建的。 在 Summary 页面中,检查详细信息,然后单击 Finish。 |
4. | 您会看到 EXPENSE_WH 目标模块已被添加到 OWB_DEMO 项目的 Oracle 节点下方。展开 EXPENSE_WH 并查看它的内容。 |
您已经创建了一个空的目标模块 EXPENSE_WH,该模块映射到一个空的目标架构 EXPENSE_WH。现在,您可以开始在此目标模块中设计目标对象了。
在上一个教程中,您创建了一个平面文件模块,并在其中导入并抽样了两个平面文件。要将平面文件中的数据移动并转换到关系目标或维度目标,您可以使用平面文件操作器,也可以使用外部表。外部表允许您以关系表的格式表示文件源中的数据。
通过外部表,您能够直接查询 Oracle 数据库中的平面文件,还可以查询、连接、转换和约束平面文件。
使用外部表访问非关系源中的源数据具有以下优点:
![]() | SQL 支持和异构连接:在使用外部表时,您可以直接查询和转换平面文件中包含的数据;SQL 代码是由 Warehouse Builder 生成的。另外,平面文件和关系表之间的异构连接也可以实现。 |
![]() | 启用并行 SELECT 语句:您可以通过外部表以并行方式访问文件。例如,SELECT 语句可以并行方式运行,从而优化了系统的性能。 |
![]() | 消除了平面文件中间表:使用平面文件操作器时,Warehouse Builder 会生成 SQL*Loader 代码,这时您需要一个关系中间表加载数据。使用外部表消除了对中间表的需要,因此缩短了加载平面文件数据的处理时间并减少了对额外存储空间的需求。 |
在 Warehouse Builder 中,您可以基于平面文件结构定义外部表、将外部表部署到数据库中,还可以在映射中使用外部表。
现在,您需要创建两个外部表,它们将指向以前抽样的两个平面文件。
1. | 在 Project Explorer 面板中,展开 OWB_DEMO。展开 Databases > Oracle > EXPENSE_WH。右键单击 External Tables 并选择 New。 Create External Table 向导启动。在 Welcome 页面中单击 Next。该向导将带领您完成外部表的创建。 |
2. | 在 Name and Description 页面中,输入 EXPENSE_CATEGORIES 作为外部表的名称。单击 Next。 |
3. | 在 File Selection 页面中,选择 EXPENSE_CATEGORIES_CSV 并单击 Next。您在上一教程中抽样的这个文件包含了此外部表的元数据。 |
4. | 在 Locations 页面中,选择该外部表使用的默认位置。从位置下拉框中选择 SOURCE_LOCATION。单击 Next。 在 Summary 页面中,查看详细信息,然后单击 Finish。该向导创建了外部表。在 Project Explorer 中,您将看到 EXPENSE_CATEGORIES 已经添加到 External Tables 节点中。 现在,重复相同的步骤,为 export_csv 文件创建外部表。 |
5. | 右键单击 External Tables 并单击 New。单击 Next 跳过 Create External Table 向导的欢迎页面。在 Name and Description 页面中,输入 EXPENSE_DATA 作为外部表的名称。单击 Next。 |
6. | 在 File Selection 页面中,选择 EXPORT_CSV 并单击 Next。 |
7. | 在 Locations 页面中,选择与上一个外部表相同的默认位置。从位置下拉框中选择 SOURCE_LOCATION。单击 Next。在 Summary 页面中,查看详细信息,然后单击 Finish。该向导创建了外部表。 您会看到两个外部表均已添加到目标模块中。 |
8. | 您需要为两个外部表配置物理文件系统详细信息。右键单击 EXPENSE_CATEGORIES 并选择 Configure。 在 Configuration Properties 对话框中,右键单击 Data Files 并选择 Create。接受默认名称 NEW_DATAFILE_1。 |
9. | 在 Configuration Properties 对话框的右侧,为 Data File Location 属性选择 SOURCE_LOCATION。为 Data File Name 属性输入 expense_categories.csv。单击 OK。 |
10. | 重复相同的步骤来配置 EXPENSE_DATA 外部表。该配置应如以下屏幕截图所示。 单击 OK。 |
您已经完成了两个外部表的创建,它们分别指向两个已抽样的平面文件。
维是星形架构中数据的主要组织单位。一些常用的维包括 Customer、Product 和 Time。
维由一系列级别和使用这些级别定义的一系列层次结构组成。用户通常通过下钻已知维的层次结构来分析数据。因为查询优化器能够在选择数据时作出明智的决策,所以查询的性能得到了改善。
要创建维,您必须定义下列内容:
![]() | 维属性 | |
![]() | 等级 | |
![]() | 级别属性 | |
![]() | 层次结构 |
在本部分中,执行以下步骤:
![]() | 在 Data Object Editor 中查看预定义的 PRODUCTS 维 | |
![]() | 使用时间维向导创建 REL_TIME 维 | |
![]() | 使用向导创建 REL_CATEGORY 维 |
在 Data Object Editor 中查看预定义的 PRODUCTS 维
本主题将介绍一个基本的维示例。在创建维之前,您需要仔细探究一个现有维来了解维的基本设计。
我们将通过预定义的 PRODUCTS 维了解维属性、级别和层次结构。
1. | 在 Project Explorer 面板中,展开 OWB_DEMO > Databases > Oracle。展开 SALES_WH,然后展开 Dimensions。右键单击 PRODUCTS 并选择 Open Editor。 注:您也可以通过双击 PRODUCTS 完成此操作。 Data Object Editor 启动。Data Object Editor 是一个界面,您可以在其中轻松地设计、创建和管理各种数据库或维度对象。它是一个中心位置,通过使用图表和属性图,您可以在这个中心位置构建或修改各种仓库架构设计。以下是该界面的外观: 如图所示,这里有很多面板,但您将主要通过 Dimensions Details 面板了解维的详细信息。 | |||||||||
2. | 要查看维的属性,单击 Dimension Details 面板中的 Attributes 选项卡。 您会看到系统为该维分配了序列 PROD_DIM_SEQ,以便在加载数据时填充维键。 另外还要注意,其中一个属性 ID 标识为 Surrogate 标识符,而 SOURCE_ID 属性则分配了 Business 标识符。 注:维键列是维的主键,它提供每个级别的 surrogate 标识符。使用序列时,您可以利用唯一值填充维键。 surrogate 标识符唯一标识维的所有级别中的每个级别的记录,它是从维键字段中指定的序列加载的。 business 标识符则是一个从数据源的自然键派生而来的属性。 如果您要使用基于值的层次结构,还可以使用 parent 标识符。 在 Descriptor 列中,维属性标记为 Long Description,而 Short Description 用于显示业务智能工具中的维成员。 单击 Name 列并添加两个包含以下详细信息的 DATE 属性 VALID_FROM_DATE 和 VALID_TO_DATE,如以下屏幕截图所示。 | |||||||||
3. | 要查看维级别和级别属性,单击 Dimension Details 面板中的 Levels 选项卡。您会看到四个级别,每个级别都有一个适用的属性集,例如 PRODUCT 级别将所有维属性实施为级别属性,但上一步中添加的两个日期属性除外。 要将这两个日期属性包括在 PRODUCT 级别的适用属性中,选中 VALID_FROM_DATE 和 VALID_TO_DATE 属性的 Applicable 复选框,如以下屏幕截图所示。 注:系统并不要求一个级别实施所有的维属性。通过在某个级别上实施一个维属性,您可以在此级别上存储该维属性的相关信息。 在关系实施中,级别属性成为表中的一列。系统并不要求级别属性与维属性具有相同的名称,但是 Warehouse Builder 默认采用面板中的名称。 在定义级别时,您无需担心输入级别的顺序。这些级别只会按照层次结构方式进行组织。 | |||||||||
4. | 要查看维的层次结构,请单击 Dimension Details 面板中的 Hierarchies 选项卡。您会看到只有一个层次结构 PROD_STD,其级别按照一种特定的顺序进行了组织(面板列表中从上到下的顺序)。 通过 Default 复选框,您可以选择将在用户查询时显示的层次结构。所以,为此选取最常用的层次结构就非常重要了。 | |||||||||
5. | 定义维时,您还可以指定渐变维度策略。 渐变维度决定了维值历史更改的存储方式。如下方的屏幕截图所示,您可以从三种策略中选择。 单击 SCD 选项卡可以查看 PRODUCTS 维的渐变维度策略。 注:SCD Type 2 和 3 用于 OWB 11g 的企业 ETL 选件。利用核心 ETL 特性,只能使用 SCD Type 1,即 Do not keep history 选项。如果您使用核心 ETL 特性包,并且不能执行该步骤,仍然可以继续执行本教程的后续步骤以及后续教程。此步骤仅用于检查,不会影响今后的上机操作步骤。 如果您希望存储完整的更改历史,则应选择类型 2。即选择 Type2:Store the complete change history。请注意,此时 Settings 按钮处于启用状态。单击 Settings。 在 Type 2 slowly changing dimension 对话框的 Record History 下拉列表中,您需要将属性指定为:
例如,要在产品的 LIST_PRICE、NAME 和 PACK SIZE 每次发生更改时都记录更改历史,请将它们设置为 Trigger History 属性,如屏幕截图所示。另外,将 VALID_FROM_DATE 设置为 Effective Date 属性,VALID_TO_DATE 设置为 Expiration Date 属性。 在 Type 2 slowly changing policy 对话框中,单击 Close。 | |||||||||
6. | 先使用 Warehouse Builder 设计维度对象,然后以关系形式或多维形式将这些对象部署到数据库中。 在 Storage 选项卡页面中,决定为所设计的维进行关系实施还是多维实施之后,Warehouse Builder 将根据该类型生成相应的存储类型代码。 单击 Storage 选项卡可查看为 PRODUCTS 维选择的实施。对于关系实施,您可以选择 Star、Snowflake 或 Manual。 Data Object Editor 还提供了一个 Data Viewer,您可以通过它查看并下钻维的数据。 在 Diagram 菜单中,选择 Close Window 退出 Data Object Editor。 |
在下面的步骤中,您将创建与 Expenses 情景相关的两个简单维。您可以在 Data Object Editor 中创建维,但是在本教程中将使用向导创建维。向导会提供一系列默认值,使您能够使用一些易于理解的步骤创建维。
使用时间维向导创建 REL_TIME 维
时间维在数据仓库中广泛用于解决如查询之类的时间序列(例如:本季度与上一年该季度相比,花销如何?)。
时间维也是由一系列级别和基于这些级别定义的一系列层次结构组成的。您可以使用 Warehouse Builder 创建财政时间维和日历时间维。
利用 Warehouse Builder,您不但可以创建时间维,还能够填充时间维。当您使用向导创建时间维时,Warehouse Builder 将自动创建映射来填充时间维。
另外,加载到时间维的数据还遵守有关时间维属性的 OLAP 标准。
现在,您将执行下列步骤,以使用时间维向导创建 REL_TIME 维。
1. | 您在前面已经查看过 SALES_WH 模块。现在,展开 EXPENSE_WH,右键单击 Dimensions 并选择 New > Using Time Wizard。 Create Time Dimension 向导启动。在 Welcome 页面中,单击 Next。 |
2. | 在 Name and Description 页面中,输入 REL_TIME 作为维的名称。单击 Next。 |
3. | 在 Storage 页面中,选择 ROLAP:Relational storage 以指定维的关系实施。单击 Next。 |
4. | 在 Data Generation 页面中,指定仓库所需的时间数据范围。此信息将用于生成填充时间维的映射。在此映射中,您输入的数据将作为参数添加到系统中,这将允许您在将来重新运行具有日期的映射。 对于 Start Year,输入 2003;对于 Number of Years,输入 3。确保选中 Calendar,如以下屏幕截图所示。 注:层次结构定义了时间维中相邻级别之间的层次关系。一个时间维可能具有一个或多个层次结构。每个层次结构必须为财政结构或日历结构。 如果您的时间维包含财政数据,则必须指定该财政年度的开始月份和日期以及财政周的开始日期。 单击 Next。 |
5. | 在 Levels 页面中,选择 Normal Hierarchy 并选中所有级别:Calendar Year、Calendar Quarter、Calendar Month 和 Day。单击 Next。 |
6. | 在 Pre Create Settings 页面中,查看详细信息,然后单击 Next。 当向导创建必要的对象时,进度栏会显示创建进度。 操作成功完成后,单击 Next。在 Summary 页面中,再次检查详细信息,然后单击 Finish。 您会看到该向导已经为一个功能完整的时间维生成了四个必要的对象:REL_TIME 维对象、填充时间维级别 Surrogate ID 的 REL_TIME_SEQ 序列、用于支持存储时间数据的时间维关系实施的 REL_TIME 表,以及最重要的用于填充时间维的 REL_TIME_MAP 映射。 如果您想知道 REL_TIME_MAP 的构成,双击 Mappings 节点下的 REL_TIME_MAP,以启动映射编辑器。 从 View 菜单中选择 Auto Layout。您可以看到展开的映射。根据需要,您可以滚动查看该映射,或者从 View 菜单中选择缩放选项来查看该映射。Warehouse Builder 可以自动创建这个复杂的映射,从而提高了生产率并节省了时间。 在 Mapping 菜单中,选择 Close 退出映射编辑器。 |
您已经完成了 REL_TIME 维的创建。接下来,您将使用向导创建 REL_CATEGORY 维。
使用向导创建 REL_CATEGORY 维
1. | 在 EXPENSE_WH 模块中,右键单击 Dimensions 并选择 New > Using Wizard。 Create Dimension 向导启动。在 Welcome 页面中,单击 Next。 | ||||||
2. | 在 Name and Description 页面中,输入 REL_CATEGORY 作为维的名称。单击 Next。 | ||||||
3. | 在 Storage Type 页面中,选择 ROLAP:Relational Storage 以指定维的关系实施。单击 Next。 | ||||||
4. | 在 Dimension Attributes 页面中,您会看到三个预定义列:ID、NAME 和 DESCRIPTION。注意,ID 属性的标识符设置为 Surrogate,而 Name 属性的标识符设置为 Business。 您可以按照自己的喜好更改这些属性,但是列表中必须存在一个 Surrogate 标识符和一个 Business 标识符。Surrogate 标识符的数据类型必须是 NUMBER。 将 NAME 属性的 Length 更改为 30。单击 Next。 | ||||||
5. | 在 Levels 页面中,为维的默认层次结构指定下列级别:
单击 Next。 | ||||||
6. | 在 Level Attributes 页面中,为定义的每个级别选择适用于该级别的维属性。接受默认选择,然后单击 Next。 | ||||||
7. | 在 Slowly Changing Dimension 页面中,保留默认的渐变维度选项为选中状态。单击 Next。 注:SCD Type 2 和 3 用于 OWB 11g 的企业 ETL 选件。利用核心 ETL 特性,只能使用 SCD Type 1,即 Do not keep history 选项。 如果选择任何其他策略,Warehouse Builder 会默认将实施放到层次结构的最低级别,并自动创建日期属性。 在 Pre Create Settings 页面中,单击 Next。此时出现 Dimension Creation Progress 页。操作成功完成后,单击 Next。单击 Summary 页上的 Finish。 您会看到 REL_CATEGORY 维已被添加到 EXPENSE_WH 目标模块中。Warehouse Builder 还会利用该维创建一个将在星形架构中实施该维的表,并创建一个用于加载该维的 ID 列的序列。 |
多维数据集中包含度量以及到一个或多个维的链接。多维数据集的轴中包含维值,而其主体则包含了度量值。大多数度量都属于数字型和附加型。例如,销售额数据可以组织到一个多维数据集中,其轴中包含 Time、Product 和 Customer 维的值,而主体则包含度量 Value 销售额和 Dollar 销售额的值。
在关系实施中,多维数据集通过外键约束链接到维表,并由一系列度量组成。要创建多维数据集,您必须定义下列内容:
![]() | 多维数据集度量 | |
![]() | 多维数据集维度 |
您将执行以下步骤:
![]() | 在 Data Object Editor 中查看预定义的 SALES 多维数据集 | |
![]() | 使用向导创建 REL_EXPENSE 多维数据集 |
现在,我们来查看预定义的 SALES 多维数据集,了解它的度量和维度。
在 Data Object Editor 中查看预定义的 SALES 多维数据集
本主题将为您介绍一个多维数据集的示例。通过查看一个现有的预定义多维数据集,您将了解多维数据集的基本设计。在本主题的后面部分中,您将使用向导创建一个简单的多维数据集,该多维数据集包含对花销情况的引用。
1. | 在 Project Explorer 面板中,展开 OWB_DEMO > Databases > Oracle。展开 SALES_WH,然后展开 Cubes。右键单击 SALES 并选择 Open Editor。 注:您也可以通过双击 SALES 完成此操作。 此时 Data Object Editor 启动。 | ||||
2. | 在中间的 Dimensional 面板中,通过上下滚动来了解该设计图。您将看到,SALES 多维数据集链接到五个维:PRODUCTS、CHANNELS、CUSTOMERS、PROMOTIONS 和 TIMES。 | ||||
3. | 要查看 SALES 多维数据集的维度,单击 Data Object Editor 的 Cube Details 面板中的 Dimensions 选项卡。您会发现 SALES 多维数据集与五个维中的级别进行了链接。 例如,SALES 多维数据集引用了 PRODUCTS 维的 PRODUCT 级别。Role 列的下拉列表将显示选定维所包含的维角色(如果事先已定义)。 | ||||
4. | 要查看 SALES 多维数据集的度量,请单击 Cube Details 面板中的 Measures 选项卡。注意,有三个数字类型的度量。可以将这些度量聚集到一起,以确定某个时间段、特定客户或特定产品的总销售成本、金额或数量。 | ||||
5. | 单击 Aggregation 选项卡,定义必须为多维数据集引用的每个维执行的聚合。 选择用于聚合数据的聚合函数。还可以根据多维数据集引用的每个维预先计算度量。默认的聚合函数为 SUM。 您需要指定的内容有:
|
转载于:http://blog.itpub.net/1384/viewspace-219068/