Cuando se crea una aplicación y base de datos pluridimensional OLAP, DB2 OLAP Server cataloga la nueva aplicación y la nueva base de datos y crea un conjunto de tablas relacionales, conocido como un esquema en estrella. Además, DB2 OLAP Server crea y gestiona varias vistas que simplifican el acceso de la aplicación SQL a los datos pluridimensionales. Se pueden utilizar aplicaciones personalizadas y herramientas estándar de consulta para acceder a los datos pluridimensionales utilizando estas vistas. Algunas aplicaciones están diseñadas para aprovechar al máximo los datos almacenados en el esquema en estrella creado por DB2 OLAP Server.
La siguiente lista muestra el conjunto completo de vistas gestionadas por DB2 OLAP Server:
DB2 OLAP Server almacena todas las tablas y vistas base en el esquema nombreusuario, donde nombreusuario es el identificador de usuario asignado a DB2 OLAP Server. Para los ejemplos de este capítulo se utiliza el nombre de esquema OLAPSERV.
Todos los nombres de vista se encuentran en mayúsculas. No encierre los nombre de vista entre comillas. DB2 OLAP Server construye nombres de vista y los almacena en vistas de catálogo. Las aplicaciones SQL pueden consultar los nombres de vista desde las vistas de catálogo. La Figura 9 muestra las vistas primarias de DB2 OLAP Server.
Figura 9. esquema de DB2 OLAP Server
![]() |
Existe una vista de catálogo de cubos que DB2 OLAP Server utiliza en el esquema nombreusuario. Esta vista contiene una fila por cada cubo. Utilice esta vista para obtener detalles acerca de todas las aplicaciones y cubos OLAP almacenados en un esquema. La vista de catálogo de cubos cataloga todas las aplicaciones y bases de datos OLAP gestionadas por DB2 OLAP Server.
El nombre de la vista de catálogo de cubos es CUBECATALOGVIEW. Al igual que todas las otras vistas, es propiedad del esquema asignado a DB2 OLAP Server.
La Tabla 14 muestra las columnas de la vista de catálogo de
cubos.
Tabla 14. Contenido de la vista de catálogo de cubos
Para obtener una lista de las aplicaciones OLAP, utilice esta sentencia SQL:
SELECT DISTINCT APPNAME FROM OLAPSERV.CUBECATALOGVIEW
Para obtener una lista de las bases de datos pluridimensionales de la aplicación Sample, utilice esta sentencia SQL:
SELECT CUBENAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample'
Para obtener los nombres de vista de la base de datos pluridimensional Basic de la aplicación Sample, utilice esta sentencia SQL:
SELECT CUBEVIEWNAME,FACTVIEWNAME,STARVIEWNAME,ALIASIDVIEWNAME,LROVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
La vista de cubo y las vistas de dimensiones contienen información acerca de las dimensiones y los miembros de un cubo relacional. Existe una vista de cubo por cada cubo relacional y una vista de dimensiones por cada dimensión dentro de un cubo relacional. Estas vistas pueden utilizarse para consultar muchos de los atributos que se asignan a dimensiones y miembros del boceto de OLAP.
Existe una vista de cubo por cada cubo relacional que gestiona DB2 OLAP Server. La vista de cubo contiene una fila por cada dimensión del cubo relacional. Utilice esta vista para obtener información acerca de las dimensiones de un cubo.
El nombre de la vista de cubo se obtiene de la columna CubeViewName de la vista de catálogo de cubos.
La Tabla 15 muestra las columnas en la vista de cubo.
Tabla 15. Contenido de la vista de cubo
Para acceder a los datos de la vista de cubo, la aplicación debe determinar en primer lugar el nombre de la vista de cubo a partir de la vista de catálogo de cubos.
Por ejemplo, para determinar el nombre de la vista de cubo para la base de datos Basic de la aplicación Sample, consulte la base de datos utilizando la siguiente sentencia SQL:
SELECT CUBEVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
El resultado de esta consulta podría ser:
OLAPSERV.SAMPBASI_CUBEVIEW
Para listar los nombres de dimensión y los correspondientes nombres de la vista de dimensiones para la base de datos Basic:
SELECT DIMENSIONNAME.DIMENSIONVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW
Para listar los nombres de dimensión de las dimensiones densas de la base de datos Basic:
SELECT DIMENSIONNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONTYPE = 0
Para determinar los nombres de las dimensiones no ancla utilizadas para nombrar las columna de la vista en estrella:
SELECT RELDIMENSIONNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONTYPE <> 2
Para devolver el nombre de la vista de atributos relacionales para la dimensión Product:
SELECT RATVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONNAME='Product'
El nombre de la vista de dimensiones se obtiene de la columna DimensionViewName de la vista de cubo.
La Tabla 16 muestra las columnas de una vista de
dimensiones.
Tabla 16. Contenido de una vista de dimensiones
Nombre | Tipo | Tamaño | Contenido |
---|---|---|---|
MemberName | VarChar | 80 | El nombre del miembro. |
RelMemberName | VarChar | 18 | Dimensión ancla únicamente. El nombre de miembro de DB2 OLAP
Server. Este nombre se utiliza para nombrar columnas en las vistas de
Hechos y en Estrella que corresponden a miembros de la dimensión ancla.
Este nombre es exclusivo, si se compara con todos los demás nombres de miembro
de dimensión Ancla de este cubo relacional. Se trata de una versión
modificada de MemberName. Los cambios que puede ser necesario realizar
en MemberName son:
|
RelMemberID | Integer | Ninguno | El identificador de DB2 OLAP Server para este miembro. Este identificador se utiliza para unir la tabla de dimensiones a la tabla de hechos. |
ParentRelId | Integer | Ninguno | El identificador relacional del padre del miembro en el boceto de OLAP. Para el miembro de nivel más alto, el valor es NULL. |
LeftSiblingRelId | Integer | Ninguno | El identificador relacional del hermano izquierdo del miembro en el boceto de OLAP. Para los miembros que no tienen un hermano izquierdo, este valor es NULL. |
Status | Integer | Ninguno | El estado de este miembro puede contener una combinación de:
|
CalcEquation | Long VarChar (estación de trabajo); VarChar (OS/390) | 32700 (estación de trabajo); 250 (OS/390) | La ecuación de cálculo por omisión para miembros calculados. Observe que la ecuación de cálculo por omisión puede no ser la ecuación utilizada para calcular el valor del miembro, si se especifica un cálculo diferente en el script de cálculo utilizado para calcular el cubo relacional. |
UnarySymbol | Small Ineger | Ninguno | El símbolo de cálculo unitario:
|
AccountsType | Integer | Ninguno | Este atributo se utiliza únicamente para la dimensión Accounts.
Puede contener una combinación de los siguientes valores:
|
NoCurrencyConv | Small Ineger | Ninguno | Valor de conversión de divisa:
|
CurrencyMemberName | VarChar | 80 | Un nombre de miembro del cubo de divisa asociado a este miembro. |
GenerationNumber | Integer | Ninguno | El número de generación para este miembro. |
GenerationName | VarChar | 80 | El nombre de generación para este miembro. |
LevelNumber | Integer |
| El número de nivel para este miembro. |
LevelName | VarChar | 80 | El nombre de nivel para este miembro. |
nombre de tabla de alias Hay una columna de alias por cada tabla de alias de OLAP utilizada en el boceto. | VarChar | 80 | El alias para este miembro en una tabla de alias de OLAP asociada. Si no se proporciona un alias para un miembro, el valor es nulo. Consulte Utilización de las vistas de ID de alias. |
nombre de columna de atributos relacionales Hay una columna de atributos relacionales por cada atributo RatCol definido por el usuario. | El tipo de datos especificado cuando se creó la columna de atributos relacionales. | El tamaño especificado cuando se creó la columna de atributos relacionales. | El valor del atributo relacional para este miembro. |
Para acceder a los datos de una vista de dimensiones, la aplicación debe determinar en primer lugar el nombre de la vista de dimensiones a partir de la vista de cubo.
Por ejemplo, para encontrar el nombre de la vista de dimensiones para la dimensión Time de la base de datos Basic, se consulta la base de datos utilizando la siguiente sentencia SQL:
SELECT DIMENSIONVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONNAME='Time'
El resultado de la consulta podría ser: OLAPSERV.SAMPBASID_TIME
Para listar los nombres de miembro para la dimensión Time:
SELECT MEMBERNAME FROM OLAPSERV.SAMPBASID_TIME
DB2 OLAP Server crea y mantiene dos vistas de la tabla de hechos y del esquema en estrella:
Dado que una tabla de hechos contiene valores con diferentes niveles de agregación, si escribe una aplicación SQL para agregar, debe asegurarse de que el conjunto de miembros seleccionados en cada dimensión tiene el mismo nivel de agregación. En caso contrario, las agregaciones serán incorrectas. Una manera de cumplir este requisito consiste en incluir una restricción en el campo de número de generación o en el campo de número de nivel en la tabla de dimensiones.
La tabla de hechos que crea DB2 OLAP Server tiene una columna por cada dimensión no ancla y una columna por cada miembro de la dimensión ancla que almacena datos. La tabla de hechos que corresponde al boceto utilizado en la Figura 9 tiene las siguientes secciones:
Las columnas de dimensiones almacenan identificadores de miembro que hacen referencia a miembros de cada dimensión no ancla. Los identificadores de miembro pueden correlacionarse con nombres de miembro utilizando las vistas de dimensiones. Las columnas de miembro de ancla almacenan los valores reales de datos. Los miembros de dimensión ancla pueden correlacionarse con columnas de la vista de hechos utilizando la vista de dimensiones para la dimensión ancla.
DB2 OLAP Server utiliza nombres internos para las columnas de la tabla de hechos e identificadores internos para los miembros. La vista de hechos sustituye los nombres internos de columna por nombres de miembro y de dimensión, pero no correlaciona identificadores de miembro de columna de dimensiones con nombres de miembro. La vista en estrella sustituye los nombres internos de columna por nombres de miembro y de dimensión y correlaciona los identificadores de miembro de columna de dimensiones por nombres de miembro uniendo la tabla de hechos a las tablas de dimensiones.
Aunque puede especificar cualquier dimensión densa como la dimensión ancla, si va a acceder a la vista de hechos o en estrella desde aplicaciones SQL y ejecutar consultas ad-hoc, la correlación más natural se obtiene si se especifica la dimensión Accounts como la dimensión ancla.
El nombre de la vista de hechos se obtiene de la columna FactViewName de la vista de catálogo de cubos.
La vista de hechos contiene un número variable de columnas de dos tipos:
La Tabla 17 muestra detalles acerca de los dos tipos de columnas de la
vista de hechos.
Tabla 17. Contenido de la vista de hechos
Para acceder a los datos de una vista de hechos, la aplicación debe determinar en primer lugar el nombre de la vista de hechos a partir de la vista de catálogo de cubos.
Por ejemplo, para encontrar el nombre de la vista de hechos de la base de datos Basic de la aplicación Sample, utilice la siguiente sentencia SQL:
SELECT FACTVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
El resultado de la consulta podría ser:
OLAPSERV.SAMPBASI_FACTVIEW
Si la aplicación hace un seguimiento de los valores de RelMemberID para miembros, se puede consultar directamente la vista de hechos. Por ejemplo, para seleccionar los valores de datos para productos (dimensión Product) con RelMemberId 3 (100-20), en el mercado este (dimensión Market con RelMemberId 2) durante el tercer trimestre (dimensión Time con RelMemberID 4):
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_FACTVIEW WHERE PRODUCT=3 AND MARKET=2 AND TIME=4
De manera más común, las consultas contra la vista de hechos incluyen uniones con las vistas de dimensiones. Una consulta que utilice uniones y que sea equivalente a la anterior es:
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
El nombre de la vista en estrella se obtiene de la columna StarViewName de la vista de catálogo de cubos.
La vista en estrella contiene un número variable de columnas de dos tipos:
La Tabla 18 muestra detalles acerca de los dos tipos de columnas de la vista en estrella.
Tabla 18. Contenido de la vista en estrella
Para acceder a los datos de la vista en estrella, la aplicación debe determinar en primer lugar el nombre de la vista en estrella a partir de la vista de catálogo de cubos.
Por ejemplo, para encontrar el nombre de la vista en estrella de la base de datos Basic de la aplicación Sample, utilice la siguiente sentencia SQL:
SELECT STARVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='SAMPLE' and CUBENAME='BASIC'
El resultado de esta consulta podría ser: OLAPSERV.SAMPBASI_STARVIEW
Para seleccionar los valores de datos para el producto 100-10 (dimensión Product) en el mercado central (dimensión Market) durante el primer trimestre (dimensión Time):
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_STARVIEW WHERE PRODUCT='100-10' AND MARKET='Central' AND TIME='Q1'
Para seleccionar todos los productos con beneficios negativos en la región central durante el segundo trimestre:
SELECT PRODUCT,PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET='Central' AND TIME='Q2' AND PROFIT < 0
No todos los miembros de la vista en estrella se encuentran al mismo nivel jerárquico, así que construya las consultas cuidadosamente cuando utilice SQL para llevar a cabo operaciones de agregación. Los miembros seleccionados en una dimensión deben encontrarse al mismo nivel para evitar dobles agregaciones.
Por ejemplo, la siguiente sentencia SQL muestra miembros seleccionados a diferentes niveles en la vista en estrella. (Algunas ventas se contarán dos veces debido a que se agregan dos niveles de sumas.)
SELECT SUM(PROFIT) FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET IN ('Central','Illinois') AND PRODUCT='100' AND TIME IN ('Q1','1996')
Presuponiendo que Illinois es parte de la región Central y que Q1 (primer trimestre) es parte de 1996, esta consulta da como resultado cifras de beneficio (PROFIT) con los niveles de estado y de región y los niveles de trimestre y de año sumados. Dado que la región Central ya incluye los datos de Illinois, los datos de Illinois y del primer trimestre se cuentan dos veces en la suma. Si desea corregir la sentencia SQL para que sume las ventas de dos estados de la región Central durante dos trimestres diferentes, podría utilizar el siguiente ejemplo:
SELECT SUM(PROFIT) FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET IN ('Indiana','Illinois') AND PRODUCT='100' AND TIME IN ('Q1','Q2')