当创建 OLAP 应用程序和多维数据库时, DB2 OLAP 服务器会将新的应用程序和数据库编目并创建一组关系表,称为星形模式。另外,DB2 OLAP 服务器还会创建和管理大量的视图, 它们可以简化 SQL 应用程序对多维数据的访问。可以使用这些视图来使用自定义 应用程序和标准查询工具,以访问多维数据。一些应用程序是为充分利用存储在 DB2 OLAP 服务器创建的星形模式中的数据而设计的。
以下列表显示 DB2 OLAP 服务器管理的完整的一组视图:
DB2 OLAP 服务器将其所有的基础表和视图存储在用户名模式中, 其中,用户名是指定给 DB2 OLAP 服务器的用户 ID。对于本章中的 SQL 示例,使用模式名 OLAPSERV。
所有视图名都是大写的。不要在视图名两边加引号。DB2 OLAP 服务器构造视图名并将它们存储在目录视图中。您的 SQL 应用程序可从目录视图查询视图名。图 9显示主要的 DB2 OLAP 服务器视图。
![]() |
DB2 OLAP 服务器在其用户名模式中会使用一个方块目录视图。 此视图对每个方块包含一行。使用此视图可获得有关存储在一个模式中的所有 OLAP 应用程序和方块的详情。方块目录视图编目 DB2 OLAP 服务器管理的所有 OLAP 应用程序和数据库。
方块目录视图名是 CUBECATALOGVIEW。象所有其他视图一样,它由指定给 DB2 OLAP 服务器的模式拥有。
表 14显示方块目录视图中的列。
使用此 SQL 语句来获得 OLAP 应用程序的列表:
SELECT DISTINCT APPNAME FROM OLAPSERV.CUBECATALOGVIEW
使用此 SQL 语句来获得 Sample 应用程序中的多维数据库的列表:
SELECT CUBENAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample'
使用此 SQL 语句来获得 Sample 应用程序中的多维数据库 Basic 的视图名:
SELECT CUBEVIEWNAME,FACTVIEWNAME,STARVIEWNAME,ALIASIDVIEWNAME,LROVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
方块视图和维视图包含有关关系方块中的维和成员的信息。 每个关系方块都有一个方块视图, 并且关系方块内的每个维都有一个维视图。这些视图可用于查询指定给 OLAP 轮廓中的维和成员的许多属性。
DB2 OLAP 服务器管理的每个关系方块都有一个方块视图。 对于该关系方块中的每个维,此视图都包含一行。使用此视图,可获取有关方块的维的信息。
方块视图名是从方块目录视图的 CubeViewName 列获取的。
表 15显示方块视图中的列。
要访问方块视图中的数据,您的应用程序必须首先从方块目录视图中确定该方块视图的名称。
例如,要查找 Sample 应用程序中 Basic 数据库的方块视图名,应使用以下 SQL 语句查询数据库:
SELECT CUBEVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
此查询的结果可能是:
OLAPSERV.SAMPBASI_CUBEVIEW
要列示 Basic 数据库的维名和对应的维视图名:
SELECT DIMENSIONNAME.DIMENSIONVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW
要列示 Basic 数据库的紧凑维的维名:
SELECT DIMENSIONNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONTYPE = 0
要确定用于命名星形视图中的列的非亮点维的名称:
SELECT RELDIMENSIONNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONTYPE <> 2
要返回 Product维的关系属性视图的名称:
SELECT RATVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONNAME='Product'
维视图名是从方块视图的 DimensionViewName 列获取的。
表 16显示维视图中的列。
名称 | 类型 | 大小 | 内容 |
---|---|---|---|
MemberName | VarChar | 80 | 该成员的名称。 |
RelMemberName | VarChar | 18 | 仅亮点维。DB2 OLAP 服务器成员名。
此名称用于命名“事实”和“星形”视图中与“亮点”维的成员对应的列。
它相对于此关系方块的所有其他“亮点”维成员名和非亮点维名是唯一的名称。
它是 MemberName 的修改版本。可能需要对 MemberName 进行的更改有:
|
RelMemberID | Integer | None | 此成员的 DB2 OLAP 服务器 ID。此 ID 用于将维表与事实表连接。 |
ParentRelId | Integer | None | 在 OLAP 轮廓中成员的父代的关系 ID。对于最高级别的成员,此值是空值。 |
LeftSiblingRelId | Integer | None | OLAP 轮廓中该成员的左同级成员的关系 ID。对于没有左同级成员的成员,此值是空值。 |
状态 | Integer | None | 此成员的状态可包含下列项的组合:
|
CalcEquation | Long VarChar(工作站);VarChar (OS/390) | 32700(工作站);250 (OS/390) | 计算的成员的缺省计算方程式。注意如果在用于计算该关系方块的计算脚本中指定了不同的计算,则缺省计算方程式可能不是用于计算该成员值的方程式。 |
UnarySymbol | Small Integer | None | 一元计算符号:
|
AccountsType | Integer | None | 此属性仅用于 Accounts 维。它可包含下列值的组合:
|
NoCurrencyConv | Small Integer | None | 货币转换设置:
|
CurrencyMemberName | VarChar | 80 | 与此成员相关的货币方块中的成员名。 |
GenerationNumber | Integer | None | 此成员的代号。 |
GenerationName | VarChar | 80 | 此成员的代名。 |
LevelNumber | Integer |
| 此成员的级号。 |
LevelName | VarChar | 80 | 此成员的级名。 |
别名表名对于 在轮廓中使用的每个 OLAP 别名表,都有一个别名列。 | VarChar | 80 | 此成员在相关的 OLAP 别名表中的别名。如果未对成员提供别名,此值为空值。参阅使用别名 ID 视图。 |
关系属性列名对于每个 RatCol 用户定义属性,都有一个关系属性列。 | 创建关系属性列时指定的数据类型。 | 创建关系属性列时指定的大小。 | 此成员的关系属性的值。 |
要访问维视图中的数据,您的应用程序必须首先从方块视图中确定该维视图的名称。
例如,要查找 Basic 数据库中 Time 维的维视图名,应使用以下 SQL 语句查询数据库:
SELECT DIMENSIONVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONNAME='Time'
查询的结果可能是:OLAPSERV.SAMPBASID_TIME
要列示 Time 维的成员名:
SELECT MEMBERNAME FROM OLAPSERV.SAMPBASID_TIME
DB2 OLAP 服务器创建和维护星形模式的事实表的两个视图:
因为一个事实表包含不同聚集级别的值,您必须确保在每个维中选择的成员集拥有相同的聚集级别(如果编写一个 SQL 应用程序来聚集)。否则,您的聚集将是不正确的。满足此需求的一个方法是在维表的代号或级号字段上包括一个约束。
对于每个非亮点维,DB2 OLAP 服务器创建的事实表都有一列,且对于存储数据的亮点维的每个成员,也都有一列。与图 9中使用的轮廓对应的事实表有如下的列:
该维列存储引用每个非亮点维的成员的成员 ID。通过使用维视图可以将成员 ID 映射至成员名。亮点成员列存储实际数据值。使用该亮点维的维视图可以将亮点维成员映射至事实视图中的列。
DB2 OLAP 服务器使用内部名称表示事实表的列,使用内部 ID 表示成员。 该事实视图将内部列名置换为维名和成员名,但它不把维列成员 ID 映射至成员名。 星形视图将内部列名置换为维名和成员名,并通过将事实表与维表连接来将维列成员 ID 映射至成员名。
虽然可以将任何紧凑维指定为亮点维,但是,当您正在从 SQL 应用程序访问事实视图或星形视图并正在运行即时查询时,如果您将 Accounts 维指定为亮点维,就可以获取最自然的映射。
从方块目录视图的 FactViewName 列获取事实视图名。
事实视图包含两种类型的可变数目的列:
表 17显示有关事实视图中这两种类型的列的详情。
名称 | 类型 | 内容 |
---|---|---|
对于维列:
该维的简称取自方块视图的 RelDimensionName 列。 | Integer | 此维的成员的 RelMemberID。 |
对于亮点成员列:
该成员的短成员名取自亮点维的维视图的 RelMemberName 列。 | Double | 此单元的数据值。 |
要访问事实视图中的数据,您的应用程序必须首先从方块目录视图中确定该事实视图的名称。
例如,要查找 Sample 应用程序中 Basic 数据库的事实视图名,应使用以下 SQL 语句:
SELECT FACTVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
该查询的结果可能是:
OLAPSERV.SAMPBASI_FACTVIEW
如果您的应用程序跟踪成员的 RelMemberID 值,则您可以直接查询事实视图。 例如,要选择产品 RelMemberId 3 (100-20) 在市场 RelMemberId 2 (East) 的 RelMemberID 4 (Q3) 时间的数据值:
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_FACTVIEW WHERE PRODUCT=3 AND MARKET=2 AND TIME=4
更常见的是,对事实视图的查询包括与维视图的连接。与先前查询等效的使用连接的查询是:
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_FACTVIEW, OLAPSERV.SAMPBASID_TIME, OLAPSERV.SAMPBASID_MARKET, OLAPSERV.SAMPBASID_PRODUCT, WHERE OLAPSERV.SAMPBASID_TIME.MEMBERNAME='Q3' AND OLAPSERV.SAMPBASID_PRODUCT.MEMBERNAME='100-20' AND OLAPSERV.SAMPBASID_MARKET.MEMBERNAME='East' AND OLAPSERV.SAMPBASI_FACTVIEW.TIME=OLAPSERV.SAMPBASID_TIME.RELMEMBERID AND OLAPSERV.SAMPBASI_FACTVIEW.PRODUCT=OLAPSERV.SAMPBASID_PRODUCT.RELMEMBERID AND OLAPSERV.SAMPBASI_FACTVIEW.MARKET=OLAPSERV.SAMPBASID_MARKET.RELMEMBERID
星形视图名是从方块目录视图的 StarViewName 列获取的。
星形视图包含两种类型的可变数目的列:
表 18显示有关星形视图中这两种类型的列的详情。
名称 | 类型 | 内容 |
对于维列:
该维的简称取自方块视图的 RelDimensionName 列。 | VarChar(80) | 成员名。 |
对于亮点成员列:
该成员的短成员名取自亮点维的维视图的 RelMemberName 列。 | Double | 此单元的数据值。 |
要访问星形视图中的数据, 您的应用程序必须首先从方块目录视图中确定该星形视图的名称。
例如,要查找 Sample 应用程序中 Basic 数据库的星形视图名,应使用以下 SQL 语句:
SELECT STARVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='SAMPLE' and CUBENAME='BASIC'
此查询的结果可能是:OLAPSERV.SAMPBASI_STARVIEW
要选择产品 100-10 在中部市场第一季度的数据值:
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_STARVIEW WHERE PRODUCT='100-10' AND MARKET='Central' AND TIME='Q1'
要选择第二季度中部地区利润亏损的所有产品:
SELECT PRODUCT,PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET='Central' AND TIME='Q2' AND PROFIT < 0
不是所有星形视图的成员均在同一分层级别,所以当使用 SQL 来执行聚集操作时要细心构造查询。从一个维中选择的成员应该处于相同的级别,以便避免双重聚集。
例如,下列 SQL 语句显示从星形视图的不同级别选择的成员。(某些销售额将统计两次,因为要聚集两个级别的总和。)
SELECT SUM(PROFIT) FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET IN ('Central','Illinois') AND PRODUCT='100' AND TIME IN ('Q1','1996')
假定 Illinois 位于 Central 地区且 Q1 属于 1996 年,此查询就会生成对 州级和地区级以及对季度级和年级总计的 PROFIT 数字。因为 Central 地区已经包括了 Illinois 的数据, 因此 Illinois 和 Q1 的数据在总计中被统计了两次。如果希望校正该 SQL 以便将两个不同的季度之间 Central 地区两个州的销售额相加,可能需要使用以下示例:
SELECT SUM(PROFIT) FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET IN ('Indiana','Illinois') AND PRODUCT='100' AND TIME IN ('Q1','Q2')