OLAP
Para empezar:
- Debes tener instalado el Apache Tomcat (Link).
- Tener una base de datos sea en MySQL, SQL Server, ORACLE, Informix, DB2, etc, en este caso solo usaron por ejemplo el primero.
- Bájate el Servidor OLAP Mondrian, de la pagina del SourceForge.
Una vez que la bajes descomprímela y dentro de la carpeta lib existe un archivo mondrian.war y este archivo la usaremos para trabajar con el Apache Tomcat, la copeamos en la ruta %TOMCAT_HOME%\webapps. Luego la invocamos desde con el Tomcat, prende el servidor e ingresa a http://localhost:8080/mondrian.war eso para que te cree la carpeta donde trabajaremos nuestro cubo OLAP, la carpeta mondrian.Cuando la invoques desde el navegador saldrá como la imagen que sigue:
Hasta allí todo normal, revisa que se halla creado la carpeta mondrian:
Ahora cuando ingreses a : http://localhost:8080/mondrian/ te aparecerá un index.html que tiene un listado y algunos ejemplos que solo trabajan con Access pero como decidimos trabajar con MySQL, cambiaremos algunos detalles en el archivo Mondrian.properties que esta dentro de la carpeta mondrian/WEB-INF / y editamos las últimas líneas:
mondrian.test.connectString=Provider=mondrian;Jdbc=jdbc:mysql://localhost/NOMBRE_BD?user=USUARIO;password=PASSWORD;JdbcDrivers=com.mysql.jdbc.Driver;
Obviamente reemplaza el NOMBRE_BD y USUARIO y PASSWORD por los datos correctos que conoces.
Ten cuidado con el formato del archivo no lo alteres al grabarlo.
La crearemos gráficamente con la aplicación Pentaho Cube Designer, descárgala de la pagina del SourceForge la última versión y descomprímela, ejecutamos el archivo CubeDesigner.exe y creamos un cubo desde el menú File -> New Cube Schema.
Lo que primero es indicarle el origen de datos (Select a data source) Utilizaremos una base de datos de prueba que es algo básico y con algunos desnormalizados pero esto solo para formar el cubo.
Veamos como sigue el grafico para el diseño del cubo: Seleccionamos el origen de datos:

Luego empecemos con darle un nombre y descripción al cubo:

Luego en la siguiente figura mostraremos todas las tablas que tenemos en nuestra base de datos. Para ir montando nuestra estrella que queremos formar simplemente arrastramos formamos nuestras dimensiones y listo, luego seleccionamos cada campo de las dimensiones así también como las medidas que ha de tener en nuestro cubo; también podemos ir relacionando cada ítem de las dimensiones de nuestra estrella.

Luego definiremos nuestras medidas (measures) que serán de nuestro cubo y también los filtros (dimensions) que luego se definirán, de todo esto nos permitirá armar criterios de consulta de nuestro cubo.

Definamos las dimensiones:

Ahora solo grabaremos el XML generado, también podrían publicarlo directamente si tienen el Pentaho Suite instalado pero en este caso solo utilizaremos el XML generado ya que será nuestra metada generada para nuestro cubo.<?xml version=”1.0″ encoding=”UTF-8″?>
<Schema name=“Neptuno”>
<Cube name=“Neptuno”>
<Table name=“pedidos”/>
<Dimension name=“Fecha pedido” foreignKey=“IdFecha”>
<Hierarchy name=“Fecha pedido” hasAll=“true” allMemberName=“All fecha pedido” primaryKey=“IdFecha”>
<Table name=“dimfecha”/>
<Level name=“dimfecha.AnioPedido” table=“dimfecha” column=“AnioPedido” uniqueMembers=“false”/>
<Level name=“dimfecha.MesPedido” table=“dimfecha” column=“MesPedido” uniqueMembers=“false”/>
</Hierarchy>
</Dimension>
<Dimension name=“Lugar Pedido”>
<Hierarchy name=“Lugar Pedido” hasAll=“true” allMemberName=“All lugar pedido”>
<Table name=“pedidos”/>
<Level name=“pedidos.PaisDestinatario” table=“pedidos” column=“PaisDestinatario” uniqueMembers=“false”/>
<Level name=“pedidos.RegionDestinatario” table=“pedidos” column=“RegionDestinatario” uniqueMembers=“false”/>
<Level name=“pedidos.CiudadDestinatario” table=“pedidos” column=“CiudadDestinatario” uniqueMembers=“false”/>
</Hierarchy>
</Dimension>
<Dimension name=“Clientes” foreignKey=“IdCliente”>
<Hierarchy name=“Clientes” hasAll=“true” allMemberName=“All clientes” primaryKey=“IdCliente”>
<Table name=“clientes”/>
<Level name=“clientes.NombreCompania” table=“clientes” column=“NombreCompania” uniqueMembers=“false”/>
</Hierarchy>
</Dimension>
<Measure name=“Total de pedidos” column=“IdPedido” aggregator=“count” datatype=“Integer” formatString=“Standard”/>
</Cube>
</Schema>
MOSTRANDO EL CUBO:
Luego que hemos creado el XML, lo guardamos en el mismo formato .xml en la carpeta mondrian que creamos en el apache tomcat, por ejemplo mondrian/WEB-INF/queries/cuboNeptuno.xml. En esa misma carpeta creamos un script Java Server Page para usar la libreria del JPivot del Mondrian, con el contenido:
<%@ page session=“true” contentType=“text/html; charset=ISO-8859-1″ %>
<%@ taglib uri=“http://www.tonbeller.com/jpivot” prefix=“jp” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jstl/core” %>
<jp:mondrianQuery id=“query01″ jdbcDriver=“com.mysql.jdbc.Driver” jdbcUrl=“jdbc:mysql://localhost/neptuno?user=pentahouser&password=TU_PASSWORD” catalogUri=“/WEB-INF/queries/cuboNeptuno.xml”>
SELECT {[Measures].[Total de pedidos]} ON COLUMNS, {([Lugar Pedido],[Clientes])} ON ROWS FROM Neptuno
</jp:mondrianQuery>
<c:set var=“title01″ scope=“session”>Cubo - Pedidos</c:set>
Con los parámetros correctos podremos generar el cubo en el servidor OLAP. Del código mostrado dentro de la etiqueta js:mondrianQuery podemos hacer consultas MDX que son consultas SQL para base de datos multidimensional.Arrancamos el Tomcat y colocamos el siguiente url: http://localhost:8080/mondrian/testpage.jsp?query=neptuno y veremos la siguiente pagina:
Hasta aquí les dejo para que puedan hacer los demas movimientos en el cubo con la barra de herramientas que se muestra en la parte superior.
Espero que les pueda servir en algo para poder armar y desarrollas más sobre OLAP.
Referencias:
- MySQL
- Java server page
- Apache Tomcat
- Pentaho Cube Designer
- Servidor OLAP Mondrian
- Pentaho Suite BI








