Capítulo 11 Mondrian

Mondrian es un motor OLAP escrito en Java: ejecuta consultas MDX sobre datos en una BD relacional y devuelve los resultados en formato multidimensional (Hyde (2009), Back, Goodman, and Hyde (2014)). Ofrece una visión multidimensional sobre los datos en la BD relacional mediante un esquema multidimensional definido en XML. Es el motor OLAP de Pentaho BI Suite, conjunto de herramientas libres de Inteligencia de Negocio.

Como BD relacional usaremos PostgreSQL. Para definir el esquema multidimensional podemos utilizar directamente un editor de XML o utilizar Schema Workbench que permite definir los elementos del esquema basándonos en la BD relacional que contiene los datos. Necesitamos una herramienta que permita generar consultas MDX, enviárselas a Mondrian y presentar adecuadamente los resultados devueltos en formato multidimensional. Usaremos dos herramientas: JRubik y Pivot4J Analytics.

Objetivos del capítulo

  • Usar una herramienta OLAP profesional.

  • Aprender el funcionamiento básico del sistema OLAP Mondrian.

  • Entender el desarrollo de esquemas multidimensionales.

  • Definir los elementos de un esquema multidimensional para un caso sencillo.

  • Entender la estructura y la implementación de los cubos OLAP.

  • Acceder a cubos OLAP mediante herramientas de consulta.

11.1 Punto de partida

El punto de partida es la BD OLAP en PostgreSQL resultado del capítulo 10, la que habíamos nombrado con el nombre de la provincia asignada y el sufijo "_olap" (p.e., en mi caso, granada_olap). Esta BD contiene tres tablas, dos dimensiones (Cuándo, Dónde) y los hechos (Padrón), con el sufijo del nombre de la provincia asignada (p.e., en mi caso cuando_granada, donde_granada y padron_granada).

Si dispones de esa BD, puedes pasar al apartado 11.2. En caso contrario, en el resto de este apartado, se explica cómo obtenerla a partir de las tablas en formato CSV obtenidas en los capítulos 3 o 6.

11.1.1 Crear la BD y el esquema

Los pasos necesarios para crear una BD en PostgreSQL se describen en el apartado 10.1.1. El nombre de la BD será el de la provincia asignada con el sufijo "_olap" (p.e., en mi caso, granada_olap).

Crearemos dentro de la BD un esquema con el nombre del usuario de acceso a la BD, en el caso del entorno de prácticas deberá llamarse postgres. Necesitaremos este esquema porque las tablas se importarán en un esquema con el mismo nombre que el usuario que accede a la BD.

11.1.2 Importar archivos CSV

La importación de archivos la realizaremos desde LibreOffice. En primer lugar, conectaremos LibreOffice con la BD PostgreSQL; después, generaremos las tablas en la BD a partir de los datos en CSV abiertos en LibreOffice; por último, desde pgAdmin, modificaremos el esquema y otros elementos de las tablas obtenidas.

Conectar LibreOffice con PostgreSQL

LibreOffice nos permite trabajar con una BD PostgreSQL desde una Base de Datos de Base. Así, al importar los datos en LibreOffice, se importan directamente en PostgreSQL.

Para realizar la conexión, al abrir LibreOffice, seleccionamos la opción Base de Datos de Base (figura 11.1).

Base de Datos de Base en LibreOffice.

Figura 11.1: Base de Datos de Base en LibreOffice.

Se abre la ventana del Asistente de bases de datos (figura 11.2) para seleccionar la BD.

Selección de la BD.

Figura 11.2: Selección de la BD.

En lugar de crear una BD nueva, seleccionamos la opción Conectar con una base de datos existente y elegimos en el campo desplegable PostgreSQL. A continuación, pulsamos sobre el botón Siguiente.

Accedemos a la sección donde se define la URL de origen de datos (figura 11.3). En el campo, tenemos que completar la cadena de conexión según el ejemplo que nos ofrecen. Es suficiente con indicar el host y el nombre de la BD, si el puerto de la instalación es el que se usa por defecto para PostgreSQL, como es el caso en el entorno de prácticas.

URL de origen de datos.

Figura 11.3: URL de origen de datos.

En mi caso la cadena de conexión es host=localhost dbname=granada-jsamos. A continuación, pulsamos sobre el botón Siguiente.

En la sección siguiente se indica el usuario y, al conectarnos, la contraseña (figura 11.4). Tenemos que seleccionar la opción Contraseña obligatoria.

Usuario de la BD.

Figura 11.4: Usuario de la BD.

Es recomendable pulsar sobre el botón Probar conexión para comprobar que todo está bien. Al pulsar, se abre una ventana donde nos pide que introduzcamos la contraseña. Una vez realizada la comprobación, pulsamos sobre el botón Siguiente.

En el último apartado (figura 11.5), dejamos seleccionadas las opciones para que se registre la BD y se abra para su edición.

Registrar y abrir la BD.

Figura 11.5: Registrar y abrir la BD.

A continuación, se abre la ventana Guardar como para indicar dónde queremos que se guarde el archivo de la BD de LibreOffice.

En la figura 11.6, se muestra las tablas de la BD PostgreSQL a la que estamos accediendo. Podemos plegarlas o desplegarlas pulsando a la izquierda del nombre de los esquemas donde se ubican.

BD LibreOffice conectada a PostgreSQL.

Figura 11.6: BD LibreOffice conectada a PostgreSQL.

Las operaciones que realicemos sobre esta BD LibreOffice, las estaremos realizando sobre la BD PostgreSQL.

Importar una tabla

Para cada uno de los archivos en formato CSV obtenidos en los capítulos 3 o 6, cada uno con una tabla (hechos y dimensiones), repetiremos los pasos que se describen a continuación.

Para importar una tabla en un archivo en formato CSV, tenemos que abrir el archivo con LibreOffice: seleccionamos el tipo de archivo Libro de Calc, al seleccionar abrir el archivo en formato CSV, se abre la ventana de Importación de texto (figura 11.7).

Abrir un archivo CSV desde Libro de Calc.

Figura 11.7: Abrir un archivo CSV desde Libro de Calc.

Podemos modificar las opciones de importación y ver el contenido. Para los archivos que tenemos que importar, las opciones por defecto son adecuadas.

Una vez abierto, seleccionamos todos los datos pulsando en celda intersección de la fila de letras que identifican las columnas y la columna de números que identifican las filas y, en el menú contextual de la hoja de cálculo, seleccionamos la opción Copiar (figura 11.8).

Copiar el contenido de la hoja de cálculo.

Figura 11.8: Copiar el contenido de la hoja de cálculo.

Accedemos a la ventana de la BD en LibreOffice, a la zona donde se presentan las tablas, y en el menú contextual seleccionamos la opción Pegar (figura 11.9).

Pegar el contenido de la hoja de cálculo.

Figura 11.9: Pegar el contenido de la hoja de cálculo.

Como respuesta, se abre la ventana Copiar Tabla donde podemos definir las características de la tabla a copiar (figura 11.10).

Definir propiedades de la tabla a copiar.

Figura 11.10: Definir propiedades de la tabla a copiar.

En concreto, definimos el nombre de la tabla:

  • Como criterio, añadimos al nombre del fichero el sufijo de nuestra provincia de trabajo (p.e., en mi caso, para la dimensión Cuándo, se llamará cuando_granada).

Tenemos que marcar la opción Usar la primera fila para los nombres de las columnas, y pulsar sobre el botón Siguiente.

A continuación, seleccionamos los campos que queremos importar (figura 11.11), y pulsamos sobre el botón Siguiente.

Seleccionar los campos a importar.

Figura 11.11: Seleccionar los campos a importar.

Por último, tenemos que definir los campos que componen la clave principal de la tabla y también definir el tipo de todos los campos que importamos.

La clave principal se define seleccionando los campos que la componen, y pulsando sobre la opción Clave principal desde el menú contextual de los campos seleccionados (figura 11.12).

Definir la clave principal.

Figura 11.12: Definir la clave principal.

Debemos revisar la definición de los tipos de datos (figura 11.13).

Revisar la definición de los tipos de datos.

Figura 11.13: Revisar la definición de los tipos de datos.

Por ejemplo, las llaves generadas deben ser de tipo entero, el resto de campos de las dimensiones de tipo texto pero podemos limitar su longitud, en lugar del valor máximo asignado por defecto. En el caso de año o década bastan 4 posiciones, para el resto de campos de la dimensión Dónde podemos asignar 40 posiciones. Las medidas deben ser numéricas, en este caso están definidas como de tipo entero pero necesitaremos al menos 4 bytes.

Una vez definidos adecuadamente los tipos de los campos, pulsamos sobre el botón Crear. El resultado obtenido se muestra en la figura 11.14.

Tabla definida en el esquema del usuario.

Figura 11.14: Tabla definida en el esquema del usuario.

Las tablas importadas son accesibles desde el esquema con el nombre del usuario de la BD con el que estamos accediendo, en el caso del entorno de prácticas el esquema es postgres, que hemos creado junto a la BD.

Mover las tablas al esquema public y relacionarlas

Una vez tenemos las tablas importadas en el esquema con el nombre del usuario, vamos a moverlas al esquema public que es donde se generan siguiendo los pasos de la actividad del capítulo 10.

En pgAdmin, accedemos a la BD y el esquema donde están las tablas. Pulsamos primero sobre el nombre del esquema, para ubicarnos en él, y después sobre la operación Query Tool, en la barra de herramientas (figura 11.15).

Operación Query Tool.

Figura 11.15: Operación Query Tool.

En la ventana que se abre, podemos definir consultas en SQL sobre las tablas del esquema. En primer lugar, podemos moverlas al esquema public mediante las consultas siguientes.

ALTER TABLE cuando_granada
    SET SCHEMA public;

ALTER TABLE donde_granada
    SET SCHEMA public;

ALTER TABLE padron_granada
    SET SCHEMA public;

Las consultas se ejecutan pulsando sobre el botón Execute/Refresh(F5) en la barra de herramientas (figura 11.16).

Ejecutar sentencias en SQL.

Figura 11.16: Ejecutar sentencias en SQL.

Podemos definir las relaciones entre las tablas mediante las consultas siguientes, que ejecutaremos de forma similar a las anteriores.

ALTER TABLE padron_granada
 ADD CONSTRAINT FK_cuando
  FOREIGN KEY (cuando_key)
  REFERENCES cuando_granada(cuando_key);
  
ALTER TABLE padron_granada
 ADD CONSTRAINT FK_donde
  FOREIGN KEY (donde_key)
  REFERENCES donde_granada(donde_key);

En este punto, tenemos una BD similar a la obtenida como resultado del capítulo 10, a partir de la cual podemos continuar con la actividad de este capítulo.

11.2 Definición del esquema multidimensional

Un esquema multidimensional para Mondrian es un archivo XML. Para definirlo vamos a usar Schema Workbench. Con esta herramienta podemos definir todos los elementos del esquema que necesitamos. Se puede dar la situación en la que tengamos jerarquías muy parecidas dentro de una dimensión o incluso dimensiones similares. El archivo XML del esquema es bastante sencillo e intuitivo. Para agilizar su definición, podemos editar el archivo con uno de los editores XML disponibles. Para ello, deberemos salvar y cerrar el esquema en Schema Workbench, editarlo con el editor que elijamos, guardarlo y cerrarlo, y volverlo a abrir con Schema Workbench para comprobar que las modificaciones que hayamos hecho son correctas.

Para crear un nuevo esquema en Schema Workbench, pulsamos sobre New > Schema (figura 11.17).

Crear un nuevo esquema en Schema Workbench.

Figura 11.17: Crear un nuevo esquema en Schema Workbench.

Un esquema está asociado a una BD relacional. Para definir un esquema, lo ideal es estar conectados a la BD que contiene las tablas de hechos y dimensiones, y basarnos en ellas para realizar la definición. Schema Workbench valida las definiciones realizadas respecto al contenido de la BD. Por este motivo, al crear el esquema, nos avisa de que no se puede conectar a la BD (figura 11.18).

Aviso de que falta la conexión con la BD.

Figura 11.18: Aviso de que falta la conexión con la BD.

11.2.1 Conexión con la BD

Para definir la conexión con la BD, pulsamos sobre Options > Connection (figura 11.19).

Definir la conexión con la BD.

Figura 11.19: Definir la conexión con la BD.

En la ventana de definición de propiedades (figura 11.20), en el apartado Connection type, seleccionamos la opción PostgreSQL y automáticamente se configura la zona Settings con los campos a completar (en Port Number, el valor que indica es el correcto).

Definición de la conexión con la BD.

Figura 11.20: Definición de la conexión con la BD.

Los rellenamos con los valores siguientes:

  • Host Name: localhost (en el entorno de prácticas, está en la misma máquina en la que trabajamos).

  • Database Name: el nombre de nuestra BD OLAP (p.e., en mi caso granada_olap).

  • Username: postgres (el usuario con el que accedemos a la BD, el valor que se indica es el que usamos en el entorno de prácticas).

  • Password: postgres (la contraseña del usuario que usemos, en este caso el del entorno de prácticas).

También tenemos que asignarle un nombre a la conexión, en el campo Connection name:

  • El criterio que vamos a seguir es asignarle el mismo nombre de la BD (p.e., en mi caso granada_olap).

A continuación, pulsamos sobre Test para comprobar que se establece la conexión correctamente. Si todo va bien, pulsamos sobre OK.

11.2.2 Definición del esquema y el cubo

Para cada elemento que definamos, la pantalla de definición está estructurada en dos columnas: en una se indica el nombre de el atributo a definir, en la otra el valor (figura 11.21).

Nombre del esquema.

Figura 11.21: Nombre del esquema.

Para el esquema, vamos a definir el atributo name con el valor correspondiente al nombre de nuestra provincia asignada (p.e., en mi caso Granada).

Vamos al guardar el archivo XML del esquema (pulsando sobre el botón Save en la barra de herramientas):

  • Le asignaremos el nombre de la provincia y, a continuación, el nombre de nuestro usuario (p.e., en mi caso se llamará granada_jsamos.xml) y lo guardaremos en nuestra carpeta de trabajo44.

En la línea de estado de la ventana (figura 11.21), se puede apreciar información sobre la conexión establecida con la BD.

Una vez hemos creado un esquema, podemos ir añadiéndole elementos. En primer lugar, un elemento cube. Se puede añadir tanto desde la barra de herramientas (pulsando sobre el icono Add cube) o desde el menú contextual del esquema45 (figura 11.22).

Añadir elemento cube a un esquema.

Figura 11.22: Añadir elemento cube a un esquema.

La figura 11.23 muestra la definición del elemento cube del esquema. Al atributo name le damos el valor Padrón, en description añadimos el nombre de nuestra provincia (p.e., en mi caso Granada). El resto de atributos los dejamos vacíos o con el valor por defecto que incluyen.

Definición de cube en un esquema.

Figura 11.23: Definición de cube en un esquema.

Conforme vamos realizando la definición de los elementos, los valida con la BD. Si detecta algún problema, nos avisa (se puede ver el mensaje al pie de la zona Cube, donde definimos el valor de los atributos). Los mensajes de aviso se refieren al elemento en el que estamos situados, no necesariamente a la definición que estamos realizando en ese momento. Por ejemplo, el mensaje de la figura 11.23 se refiere a un elemento Fact name, que no aparece en la ventana de definición actual.

El mensaje anterior lo que nos indica es que el cubo todavía no está asociado a la tabla de hechos en la BD. Para definir la tabla de hechos, en el menú contextual, pulsamos sobre la opción Add Table (figura 11.24).

Añadir tabla al elemento cube a un esquema.

Figura 11.24: Añadir tabla al elemento cube a un esquema.

Para definir la tabla, tenemos que definir los atributos schema, donde seleccionamos el valor public46, y name, donde seleccionamos el nombre de la tabla de hechos(p.e., en mi caso padron_granada), como se muestra en la figura 11.25

Definición de la tabla de cube en un esquema.

Figura 11.25: Definición de la tabla de cube en un esquema.

Una vez asociada la tabla de hechos con el cubo, nos avisa de que un cubo debe contener dimensiones (figura 11.26) que es lo que vamos a definir a continuación.

Elemento cube en un esquema con su tabla asociada.

Figura 11.26: Elemento cube en un esquema con su tabla asociada.

Ejercicio 11.1 Usando los criterios de nomenclatura indicados en los apartados anteriores, define un esquema y un cubo para Mondrian (captura una pantalla donde se muestren las definiciones).

11.2.3 Definición de dimensiones

Para definir una dimensión asociada a un cubo, pulsamos sobre Add Dimension en el menú contextual del cubo (figura 11.27).

Añadir dimensión al esquema.

Figura 11.27: Añadir dimensión al esquema.

Los atributos de la dimensión que debemos definir son (figura 11.28):

  • name,

  • foreignKey: la llave externa de la dimensión en la tabla de hechos,

  • type: se distinguen dos tipos de dimensiones StandadDimension y TimeDimension.

Definición de dimension en un esquema.

Figura 11.28: Definición de dimension en un esquema.

Aunque se trate de la dimensión tiempo, vamos a definir todas las dimensiones como StandadDimension. Al definir una dimensión como TimeDimension lo que facilitamos es el uso de funciones específicas de MDX que se basan en la estructura típica de esta dimensión (día - semana - mes - cuatrimestre - año).

Cada dimensión puede incluir varias jerarquías con niveles que pueden tener definidas propiedades. Se definen mediante la operación Add Hierarchy desde el menú contextual de la dimensión correspondiente (figura 11.29).

Añadir Jerarquía a una dimensión.

Figura 11.29: Añadir Jerarquía a una dimensión.

En lugar de definir una tabla asociada a la dimensión, cada jerarquía tiene asociada una tabla de la BD. También se define desde el menú contextual de la jerarquía, seleccionando la operación Add Table. Así, para poder definir más fácilmente los atributos de una jerarquía (con la ayuda de validación respecto a la BD de la herramienta), es conveniente que lo primero que hagamos sea asociarle la tabla en la que se basa. A partir de ahí basta con definir su nombre (name) y la llave primaria de la tabla (primaryKey). También se puede definir si a la jerarquía se le añade un nivel Todo (hasAll), pudiendo indicar el nombre del nivel (allLevelName) y el valor de su única instancia (allMemberName), como se ha hecho en la figura 11.30.

Definición de hierarchy en una dimensión.

Figura 11.30: Definición de hierarchy en una dimensión.

Podemos definir y añadir niveles a una jerarquía desde su menú contextual correspondiente, seleccionando la operación Add Level.

Para definir un nivel (figura 11.31), definimos los atributos name, column (la columna de la tabla de la jerarquía en la que se basa el nivel) y type.

Definición de level en una jerarquía.

Figura 11.31: Definición de level en una jerarquía.

Hay un atributo booleano al que prestar atención, uniqueMembers. Se usa para optimizar la generación de código SQL: indica si un valor de un nivel inferior determina al valor correspondiente del nivel superior (dicho de otra forma, cada valor distinto de un nivel inferior solo está relacionado con un valor de un nivel superior). En nuestro caso, deberemos prestar atención a este atributo en la jerarquía en la que incluyamos a Nivel habitantes y Municipio.

Podemos definir propiedades asociadas a un determinado nivel, desde el menú contextual del nivel, pulsando sobre la operación Add Property. En nuestro caso, como no tratamos la comunidad autónoma como nivel (por tener datos de una sola provincia), podemos definirla como una propiedad de la Provincia. También podemos definir el código de municipio como una propiedad de municipio en cada jerarquía en la que aparece (figura 11.32).

Definición de propery en un nivel.

Figura 11.32: Definición de propery en un nivel.

Ejercicio 11.2 Define las dimensiones con las jerarquías (para cada jerarquía de cada dimensión captura una pantalla donde se muestre su definición).

Para la jerarquía con los niveles basados en las columnas nivel_habitantes y municipio, muestra la definición de los niveles y explica en qué se diferencia del resto de jerarquías.

11.2.4 Definición de medidas

Para definir una medida asociada a un cubo, pulsamos sobre Add Measure en el menú contextual del cubo (figura 11.33).

Añadir medida al esquema.

Figura 11.33: Añadir medida al esquema.

Los atributos de la medida que debemos definir son (figura 11.34):

  • name,

  • aggregator: la función de agregación (aunque sean medidas semi-aditivas, usaremos la suma en todos los casos del ejemplo),

  • column: columna de la tabla de hechos en la que se basa,

  • datatype: tipo (deberá ser numérico).

Definición de measure en un esquema.

Figura 11.34: Definición de measure en un esquema.

Las medidas calculadas se definen también desde el menú contextual del cubo, seleccionando la opción Add Calculated Member (figura 11.33).

Se pueden añadir elementos calculados tanto a las dimensiones como a los hechos. De hecho, los miembros calculados se añaden a las dimensiones y el conjunto de mediciones se considera como una dimensión más. Nos vamos a limitar a definir medidas calculadas.

Para definir una medida calculada, definimos su nombre (name) y, en el campo dimension hemos de dejar indicado el valor Measures que es el que aparece por defecto (figura 11.35).

Definición de calculated member en un esquema.

Figura 11.35: Definición de calculated member en un esquema.

Por último, en el atributo formula | formulaElement, hemos de indicar su expresión en función de medidas almacenadas u otras medidas calculas, indicando la dimensión en la que se encuentran ([Measures])47. Por ejemplo, para la medida Habitantes, la expresión que la define es:

  • [Measures].[Mujeres] + [Measures].[Hombres]

Así, para utilizar la nueva medida definida en otras expresiones, deberemos usar la forma:

  • [Measures].[Habitantes].

Ejercicio 11.3 Define el cubo que incluya como medidas calculadas: Habitantes, Densidad Ha (densidad de habitantes por hectárea) y Densidad Km2 (densidad de habitantes por Km2). Para cada medida calculada captura la pantalla de definición.

Incluye el contenido del archivo XML en el documento.

11.3 Heramientas de consulta OLAP

Vamos a definir consultas OLAP mediante varias herramientas de consulta que trabajan sobre Mondrian. Una vez tenemos los datos en la BD y hemos definido el esquema multidimensional en el archivo XML, las herramientas de consulta OLAP pueden configurar Mondrian con el archivo del esquema para acceder a la BD. Las herramientas se encargan de obtener la estructura de datos de acuerdo al esquema, generar las consultas MDX y presentar los resultados.

Estas herramientas ofrecen muchas posibilidades; aquí nos vamos a centrar en las básicas para mostrar el funcionamiento de Mondrian con nuestro esquema multidimensional sobre la BD relacional.

11.3.1 JRubik

JRubik es una herramienta de consulta OLAP que funciona sobre Mondrian y otros servidores multidimensionales. Está desarrollada en Java/swing y se basa en los componentes del proyecto JPivot.

Configuración

En primer lugar, deberemos situar el archivo XML del esquema multidimensional en la carpeta de catálogos de JRubik. Localizamos la carpeta de instalación de JRubik y, a partir de ella, tenemos que copiar el archivo del esquema en:

  • data/resources/catalogs

En la figura 11.36, se muestra el archivo de nuestro esquema junto al resto de esquemas en la carpeta indicada de JRubik.

Ubicación del esquema en JRubik.

Figura 11.36: Ubicación del esquema en JRubik.

Al iniciar JRubik se muestran las fuentes de datos disponibles, en el apartado Construcción de tablas (figura 11.37). Nuestra BD todavía no está incluida. Tenemos que definirla explícitamente.

Pantalla de inicio de JRubik.

Figura 11.37: Pantalla de inicio de JRubik.

Para definirla, tenemos que acceder a la configuración de la herramienta, pulsando sobre Archivo > Configuración. Para definir la fuente de datos, pulsamos sobre el apartado Configuración de Datasources, en la parte izquierda de la ventana (figura 11.38).

Configuración de una fuente de datos en JRubik.

Figura 11.38: Configuración de una fuente de datos en JRubik.

Creamos una nueva fuente de datos, pulsando sobre el botón Crea una nueva Fuentes de datos (en la zona superior izquierda). Una vez creada, definimos los valores de los campos necesarios para establecer la conexión con la BD y para localizar el esquema multidimensional.

Le asignamos un nombre a la fuente, el criterio adoptado es asignarle el nombre de la BD (p.e., en mi caso granada_olap). Para la conexión, seleccionamos el tipo de la BD, en este caso postgres, definimos el servidor de la BD (para PostgreSQL instalado localmente es jdbc:postgresql://localhost:5432); indicamos el nombre de la BD (p.e., en mi caso granada_olap), el usuario y la clave (en la instalación del entorno de prácticas ambos son postgres). Para indicar el esquema, le asignamos un nombre (le he asignado el mismo del esquema sin la extensión: granada_jsamos) e indicamos su ubicación: file:data/resources/catalogs/granada_jsamos.xml. Pulsamos sobre el botón Aplicar para guardar la definición.

Con estos elementos ya hemos definido la conexión con la BD utilizando el esquema XML definido, para que los pueda usar Mondrian. La nueva fuente de datos aparece disponible en el apartado Construcción de tablas de la hoja Descubridor (figura 11.39).

Disponibilidad de la nueva fuente de datos en JRubik.

Figura 11.39: Disponibilidad de la nueva fuente de datos en JRubik.

Construcción de tablas

Para definir una consulta OLAP, primero deberemos construir una tabla multidimensional desde la hoja Descubridor. Desplegamos el árbol de la conexión con la que queramos trabajar y pulsamos-arrastramos-soltamos el elemento que queramos representar sobre la tabla de la parte inferior: columnas, filas o filtro.

Sobre las filas o columnas se pueden situar dimensiones o jerarquías (las mediciones están definidas como una dimensión más, con una jerarquía con un solo nivel). Sobre el filtro solo se pueden situar instancias de las mediciones o de las dimensiones (las mediciones están definidas como instancias de un nivel llamado MeasuresLevel). No es necesario definir los tres elementos. Para obtener el resultado pulsamos sobre el botón Aplicar (debajo de la tabla de definición); para definir una nueva tabla pulsamos sobre el botón Limpiar.

En la figura 11.40 se puede ver una primera versión de un informe una vez hemos pulsado sobre el botón Aplicar.

Definición de una consulta OLAP en JRubik.

Figura 11.40: Definición de una consulta OLAP en JRubik.

El resultado obtenido se muestra en la parte de la derecha de la ventana: por una parte, en la zona superior, la tabla de resultados cuyos elementos se pueden desplegar y, por otra, en la zona inferior, la sentencia MDX generada mediante la definición de la tabla (esta sentencia es la que ha utilizado Mondrian para obtener el resultado). Al interaccionar con los datos de la tabla, la sentencia MDX se adapta adecuadamente. Lo incluido en el filtro se correspondería con la parte where de la sentencia generada (en este caso, el filtro está vacío).

Refinamiento

Podemos refinar la construcción de la tabla desde la hoja Navegador. Permite seleccionar elementos adicionales o elementos distintos de los componentes incluidos en las filas, columnas y filtro. Para llevar a cabo los cambios definidos debemos pulsar sobre el botón Aplicar (en la barra de herramientas de la zona izquierda). Los cambios se reflejan tanto en la tabla como en la sentencia MDX de la parte derecha.

En la figura 11.41 se muestra el resultado obtenido al desplegar los datos a nivel de comarca, seleccionar otra medida y el año 2019, y pulsar sobre el botón Aplicar.

Refinamiento de una consulta OLAP en JRubik.

Figura 11.41: Refinamiento de una consulta OLAP en JRubik.

En la figura 11.42, podemos ver el resultado en forma gráfica, obtenido pulsando sobre la hoja Gráfico de la zona de presentación de datos.

Representación gráfica del resultado de una consulta en JRubik.

Figura 11.42: Representación gráfica del resultado de una consulta en JRubik.

11.3.2 Pivot4J Analytics

Pivot4J Analytics48 es una herramienta de consulta OLAP que funciona sobre Mondrian y otros servidores multidimensionales. Es una aplicación Web en Apache Tomcat, está construida sobre PrimeFaces, un framework open source para JavaServer Faces, se basa en la librería Pivot4J.

Configuración

En primer lugar, deberemos situar el archivo XML del esquema multidimensional en la carpeta de catálogos de Pivot4J Analytics. Localizamos la carpeta de instalación de la herramienta dentro de Apache Tomcat y, a partir de ella, tenemos que copiar el archivo del esquema en:

  • WEB-INF

En la figura 11.43, se muestra el archivo de nuestro esquema junto al resto de esquemas en la carpeta indicada de Pivot4J Analytics.

Ubicación del esquema en Pivot4J Analytics.

Figura 11.43: Ubicación del esquema en Pivot4J Analytics.

Para definir la nueva fuente de datos, tenemos que acceder y editar el archivo XML de configuración de la herramienta, ubicado en la misma carpeta donde hemos copiado nuestro esquema, es el archivo pivot4j-config.xml (figura 11.43), y añadir la definición de la nueva fuente de datos dentro de la marca datasources, siguiendo los ejemplos que se muestran en ese archivo. En la figura 11.44, se muestra el fragmento añadido para el caso que estamos desarrollando.

Definición de una nueva fuente de datos en Pivot4J Analytics.

Figura 11.44: Definición de una nueva fuente de datos en Pivot4J Analytics.

Adaptaremos adecuadamente el nombre del esquema XML, de la BD PosgreSQL, así como la forma y credenciales de acceso (en caso de no usar el usuario del entorno de prácticas).

Para poder usar la aplicación, en primer lugar debemos iniciar el servidor ejecutando el archivo por lotes, ubicado en la carpeta de instalación de Apache Tomcat:

  • bin\startup.bat

Una vez iniciado el servidor Apache Tomcat, accedemos a Pivot4J Analytics desde cualquier navegador, accediendo a la URL:

  • http://localhost:8080/pivot4j-analytics-0.9

De igual manera, cuando acabemos de usar esta aplicación, podemos cerrar el servidor ejecutando el archivo por lotes siguiente:

  • bin\shutdown.bat

Una vez iniciado el servidor y la aplicación, aparece la pantalla de inicio de la figura 11.45 donde, antes de poder definir una consulta, debemos seleccionar el catálogo y el cubo sobre los que vamos a trabajar.

Selección del catálogo y el cubo en Pivot4J Analytics.

Figura 11.45: Selección del catálogo y el cubo en Pivot4J Analytics.

Una vez seleccionados los correspondientes a nuestro desarrollo, pulsamos sobre Aprobar para comenzar a definir consultas.

Definición de consultas

En la figura 11.46, se muestra la pantalla de la aplicación una vez ha establecido la conexión con nuestra BD.

Inicio de Pivot4J Analytics con una BD seleccionada.

Figura 11.46: Inicio de Pivot4J Analytics con una BD seleccionada.

Para definir un informe, pulsamos-arrastramos-soltamos elementos desde la zona Estructura de cubo hasta el componente de la zona Estructura de pivote que queramos (figura 11.47).

Definición de un informe.

Figura 11.47: Definición de un informe.

Se pueden seleccionar los elementos a mostrar en el informe pulsado sobre la lupa a la izquierda del nombre de los componentes, en la zona Estructura de pivote. Se abre la ventana que se muestra en la figura 11.48, donde se pueden seleccionar los elementos.

Configuración de la jerarquía en Pivot4J Analytics.

Figura 11.48: Configuración de la jerarquía en Pivot4J Analytics.

Para definir un filtro, pulsamos-arrastramos-soltamos los elementos en el campo Filtro y allí los seleccionamos (figura 11.49).

Definición de un filtro en Pivot4J Analytics.

Figura 11.49: Definición de un filtro en Pivot4J Analytics.

Podemos desplegar los elementos que se presentan en la zona de datos del informe (figura 11.50).

Resultados y consulta MDX en Pivot4J Analytics.

Figura 11.50: Resultados y consulta MDX en Pivot4J Analytics.

En todas las operaciones que realizamos sobre el entorno gráfico, la consulta MDX para obtenerlas se actualiza automáticamente en la zona inferior de la ventana.

Ejercicio 11.4 Para JRubik y Pivot4J Analytics, conecta con el cubo Mondrian y realiza un informe libre que incluya medidas calculadas (para cada una, captura una pantalla y explica el nivel de detalle de los datos que representa).

Bibliografía

Back, William D., Nicholas Goodman, and Julian Hyde. 2014. Mondrian in Action. Open Source Business Analytics. Manning.

Hyde, Julian. 2009. Mondrian 3.0.4 Technical Guide. Developing OLAP Solutions with Mondrian/JasperAnalysis. Mondrian.


  1. Desde la carpeta de trabajo lo copiaremos a las carpetas donde lo vayamos a utilizar.↩︎

  2. En adelante, solo se va a indicar la operación usando el menú contextual.↩︎

  3. Estamos trabajando con el esquema public de la BD, el que usa por defecto si no se indica uno específico.↩︎

  4. La expresión de definición está definida en MDX.↩︎

  5. Esta herramienta se ha incluido por la propuesta de Juan Carlos González Quesada y Alonso Bueno Herrero, estudiantes de Sistemas Multidimensionales del curso 2019-2020.↩︎