在本教程中,您将查询使用 Analytic Workspace Manager 11g (AWM 11g) 创建的 OLAP 数据。 使用 SQL Developer,您可以直接使用 SQL 查询 OLAP 多维数据集。

了解如何创建多维数据集数据的分析报表(包括存储量度和计算量度),以及如何应用利用独特的多维数据集特性的技巧。

还可以了解如何使用多维数据集 MV 自动将针对关系事实表的 SQL 汇总查询重新写入多维数据集。

大约 60 分钟

本教程包括下列主题:

将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:此操作会同时加载所有屏幕截图,网速较慢时,响应时间可能会比较长。)

注意: 此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。

通过一组关系视图,SQL 可以直接访问 Oracle OLAP 多维数据集数据。这些视图将 OLAP 多维数据集表示为带有以下特征的星型模式:

- 多维数据集视图充当事实表。

- 维视图和层级视图充当维表。

OLAP 多维数据集的星型设计与传统的基于表的星型模型非常相似。维视图像星星一样分布在一个或多个多维数据集视图的周围。然而,有两个主要区别:

- 星型模式中的事实表存储详细数据(称为叶),而多维数据集视图显示大量汇总级别的信息。

- 多维数据集中的计算简单地公开为多维数据集视图中的列,而等式计算在 OLAP 引擎中进行。

这些区别影响您查询数据的方式。通过星型查询,您需要通过将聚合函数(例如,求和)和 GROUP BY 子句的结合来聚合数据。通过 OLAP 查询,您将只需选择希望作为列的数据(已存储或已计算的)。一般情况下,聚合函数不再是必需的,因为数据已经由多维数据集汇总。

对于绝大多数基于多维数据集的查询来说,都有四个基本步骤:

  • 选择量度和维属性。
  • 加入多维数据集和维视图。
  • 应用量度和维属性条件。
  • 使用“All”过滤器利用筛选出来的维列的汇总。
  • 返回主题列表

    用于本教程的 OLAP 数据是使用 构建 OLAP11g 多维数据集 教程中的步骤来创建的。有关本教程中使用的 OLAP 模型的信息,以及有关如何创建 OLAP 11g 多维数据集的分步说明,请单击该链接。

    返回主题列表

    开始本教程之前,您应该:

    安装带有 OLAP 选件的 Oracle Database 11g(补丁级别 11.1.0.7 或更高)。

    为 SQL Developer 创建桌面启动程序。(Oracle Database 11g 免费附带 SQL Developer。)

    然后,将以下文件下载并解压缩到包含 SQL Developer 的计算机上的某个位置:

    cube_queries.zip

    summary_queries.zip

    注意:这些文件包含本教程中使用的完整的 OLAP 多维数据集和 SQL 汇总查询。

    能够访问属于 Oracle OLAP 11g 示例模式程序包的 OLAP 数据模型。您可以:

    A. 成功完成 构建 OLAP11g 多维数据集 教程,或者

    B. 使用 安装 Oracle OLAP 11g 示例模式 中的说明安装 OLAPTRAIN 示例模式和 SALESTRACK 分析工作区。

    注意:示例模式安装程序包中包含的 SALESTRACK 分析工作区包含在“构建 OLAP11g 多维数据集”教程中创建的所有 OLAP 数据元素。还包含在其他 OLAP 11g 相关资料中引用的一些额外数据元素。

    返回主题列表

    使用 SQL Developer 连接到 OLAPTRAIN 模式

    在本教程中,使用 SQL Developer 来查询 OLAP 数据,但也可以使用任何 SQL 工具。

    要连接到 OLAPTRAIN 模式,请执行以下步骤:

    启动 SQL Developer。

    选择 View > Connections 在导航器窗格中显示 Connections 选项卡。

    在 Connections 选项卡中,右键单击 Connections 节点并从菜单中选择 New Connection

    选择 olaptrain > Views 以 olaptrain 模式显示 OLAP 数据的多维数据集视图。

    注意:当使用 AWM 11g 创建多维数据集时,将由 Oracle OLAP 自动创建和维护多维数据集视图。

    接下来,您将使用这些视图直接查询在“构建 OLAP 11g 多维数据集”教程中创建或使用示例模式安装程序创建的 OLAP 数据。

    垂直调整 SQL 语句窗格的大小以便您可以查看第一个查询。然后,在 Enter SQL Statement 窗格的右上角,从列表中选择 olaptrain 连接。

    结果:现在,可以针对 olaptrain 模式执行此 .sql 文件中的查询。

    查询说明:

    - 只选择 Sales 作为列。没有应用任何 SQL 聚合函数。

    - 使用 Product 维层次中的级别 DEPARTMENT 筛选产品成员。

    - 在 WHERE 子句中限定所有维,即使仅选择了 Product 维也是如此。在 OLAP 多维数据集查询中,查询中 没有 选择的维需要一个“ALL”条件 — 该条件指定每个维列的最高级别层次值 — 以便利用多维数据集已经计算的汇总。

    返回主题列表

    在查询中使用级别和成员条件

    在第一个查询中,对 Product 维(这是唯一选定的维)使用“级别”条件。在 OLAP 查询中,您可以将级别条件应用于所有维,在下面这个示例中您会看到这种情况。

    每个 OLAP 层次和维视图都包含一个 LEVEL_NAME 列。该列中的值是您在 AWM 中对维建模时创建的 OLAP 层次 Level 对象的名称。通过在 WHERE 子句中为该列指定值,您便可以筛选数据以只包含在该层次中处于指定级别的那些维成员。

    如下所示,您可以使用 SQL Developer 的 Connections 导航器检查 OLAP 多维数据集、维和层次视图,包括查询的列名称和值。只需展开要检查的视图即可。还可以通过双击所需的视图然后选择 Data 选项卡来查看任何列的数据值。

    如导航窗格中的 Connections 选项卡所示,OLAP 将列名称截断为 24 个字符。因此,它有助于在查询中使用列之前查看列的名称。

    以下查询为处于 CLASS 级别的 Channel、处于 DEPARTMENT 级别的 Product、日历年 2009 的 QUARTERS 以及 ALL REGIONS 返回 SALES。

    在 Enter SQL Statement 窗口中,向下滚动以查看第二个查询:

    查询说明:

    (A) 选择了四个维之中的三个 — Channel、Product 和 Time。

    (B) 对于每个所选择的维,使用维层次视图,在每个案例中选择 Long Description 列。(注意,列名称被截断为 24 个字符,与 SQL Developer 导航窗格中的显示完全匹配。)

    (C) 虽然 Geography 维不在 SELECT 语句中,但是在 FROM 子句中指定了 Geography 层次视图。这种方法使您能够使用维的层次视图(而不是多维数据集视图)为缺少的维指定“ALL”条件。

    (D) 由于 Geography 维不在查询中,因此需要使用“ALL”条件来利用 Geography 上的多维数据集聚合。这是使用以下 Level 条件在 WHERE 子句中指定的: g.level_name = 'ALL_REGIONS'

    (E) Level 条件用来使用适当的维层次视图和适当的层次级别值筛选查询中三个维的数据:

  • c.level_name = 'CLASS'
  • p.level_name = 'DEPARTMENT'
  • t.level_name = 'CALENDAR_QUARTER'
  • (F) 在 Time 维上的筛选通过应用“Member”条件进一步缩小。这种类型的条件选择一个特定的维成员,而不是处于特定级别的所有成员。该成员条件为: t.calendar_year_long_descr = 'CY2009'

    (E) 对于 Time 维,级别条件(选择处于“QUARTER”级别的所有成员)以及成员条件(从此子集中选择日历年长描述为“CY2009”的所有成员)的组合只返回日历年 2009 的那些季度。

    返回主题列表

    向查询中添加计算量度

    多维数据集视图将计算显示为列,这大大简化了分析查询的规范。计算量度的列将数据显示为完全解决。但是,计算是在 OLAP 引擎中进行的,并通过多维数据集视图传递。

    例如,在 SALES_CUBE_VIEW 中只有 SALES 和 QUANTITY 量度是存储量度。所有其他量度列都是计算量度。

    OLAP 计算在所有汇总级别都很正确,即使在聚合规则比较复杂的情况下也是如此。

    在下面的这个查询中,将向上一个查询添加三个 OLAP 计算量度。

    在 Enter SQL Statement 窗口中,向下滚动以查看第三个查询:

    三个计算量度已添加到 SELECT 语句中。

  • round(s.SALES_YTD) as ytd
  • round(s.SALES_YTD_PY_PCT_CHG, 2) as ytd_PY_pct_chg
  • how_is_sales_ytd
  • 不需要进行其他修改。计算量度是在 OLAP 引擎中计算的,并且只通过多维数据集视图传递。

    将光标放在查询中间的某个位置,并按 F9

    结果:查询执行得非常快,就像四个量度都已经存储一样。查询结果应该如下所示:

    向下滚动以查看其余结果。

    注意:有关如何使用 AWM 11g 创建计算量度的更多信息,请参阅 构建 OLAP11g 多维数据集

    返回主题列表

    由于维层次属于数据模型的一部分,因此可以将下钻指定为查询的一部分,以便返回指定父成员的子集。可以对任何类型的层次进行下钻,包括基于级别、越级、不齐整以及基于值的层次。

    在本例中,对上一查询进行修改以便在 Product 和 Geography 维上显示下钻。具体地说就是,该查询:

    - 在上一查询中,没有选择 Geography 维。

    - 在该查询中,包括了 Geography,但 Channel 不在 SELECT 语句中。因此,必须将“ALL”条件应用于 Channel 维。

    - 通过指定 Geography 层次视图 PARENT 列的成员在 Geography 维上执行下钻: G.PARENT = "ALL_REGIONS" 。该条件返回 All Regions 的子集,它们是 Geography 的 Regional 成员。

    - 通过指定 Product 层次视图 PARENT 列的成员在 Product 维上执行下钻: P.PARENT = "ALL_PRODUCTS" 。该条件返回 All Products 的子集,它们是 Product 的 Department 成员。

    - 在该查询中,从查询中删除了 Geography,但包含了 Channel。因此,将“ALL”条件应用于 Geography 维。

    - 采用与上一查询相同的方法在 Channel 和 Product 维上执行下钻。

    - 此外,使用该层次视图的 PARENT 列在 Time 维上执行参数化下钻。另外,使用 nvl 函数,以便在不提供值时,自动将“ALL_YEARS”成员用作父值。

    返回主题列表

    在 Oracle Database 11g 的物化视图 功能 扩展中,可以将 OLAP 多维数据集表示为按多维数据集组织的物化视图(多维数据集 MV)。查询优化器自动识别何时现有多维数据集 MV 可以且应该用来满足针对详细的事实表发出的 SQL 查询。多维数据集 MV 表示一个重要的汇总空间,它的优点是便于管理且能够提高查询性能。

    在本主题中,您将针对 OLAPTRAIN 模式运行一组汇总 SQL 查询。这些汇总查询是从针对 olaptrain 模式的 Oracle BI Answers 即时查询会话中捕获的,反映了常规 BI 工具所生成的汇总查询。

    首先,关闭查询重写,看一看如何针对事实表执行汇总查询。然后,打开重写并再次运行查询。打开重写后执行查询时,您将:

    - 有关如何启用多维数据集 MV 的查询重写的信息,请参阅 构建 OLAP11g 多维数据集 中的 启用多维数据集 MV 的查询重写 主题。

    - 要执行本主题中的步骤,您必须已完成(可选)“创建 OLAP11g 多维数据集”OBE 中的 启用多维数据集 MV 的查询重写 主题或按照 前提条件 一节所述安装了示例模式 AW。

    请按照以下步骤进行操作:

    在导航器窗格的 Connections 选项卡中,选择 olaptrain 连接下的 Materialized Views 节点。

    结果:出现按多维数据集组织的物化视图(CB$ 表)。每个多维数据集和关联的维层次各有一个 MV。这些多维数据集 MV 是由 Oracle 11g Database 的 OLAP 选件自动创建和维护的。

    在第二个汇总查询中单击,该查询用于返回 Sales by Year、Department、Class 和 Country。

    a. 按 F6 显示解释计划。和所有汇总查询一样,将执行事实表的全表扫描,以便返回请求的数据。

    b. 按 F9 执行查询,如下所示。再次记录您的查询时间。

    在 SQL 文件中向上滚动,并通过执行以下操作,启用该会话的查询重写,并写入 OLAP 多维数据集 MV:

    a. 单击 ALTER SESSION SET query_rewrite_integrity=stale_tolerated 语句,然后按 F9

    b. 单击 ALTER SESSION SET query_rewrite_enabled = force 语句,然后按 F9

    c. 单击 ALTER materialized VIEW cb$sales_cube enable query rewrite 语句,然后按 F9