JasperAnalysis, creación de un cubo en JasperServer

jueves, 9 de diciembre de 2010

Con el post de hoy voy a continuar con los manuales de JasperSoftware herramienta OpenSource para Business Intelligence que empecé hace unos días. En este manual explicaré la herramienta JasperAnalysis, concretamente como crear un cubo, también veremos como explotar dicho cubo en JasperServer.
Si has seguido estos manuales desde el principio ya habrás creado el data warehouse de Northwind con la ayuda del primer manual "JasperETL, Creación de un data warehouse", si no es así, te recomiendo que lo leas antes de seguir con este. Por lo tanto, para poder hacer este manual y crear un cubo con JasperAnalysis, es necesario tener el data warehouse de Northwind en MySQL.

Para construir el cubo son necesarias dos herramientas: JasperAnalysis-Workbench y Jasper Analysis de Jasper Server que ya tendrás instaladas. JasperAnalysis-Workbench permite crear un schema y probarlo. Por su parte, JasperAnalysis permite crear vistas del cubo.

El resumen de los pasos a seguir para construir un cubo y sus vistas con JasperAnalysis se presenta a continuación:
  1. Crear un Schema con JasperAnalysis-Workbench y probarlo con consultas MDX.
  2. Crear un Datasource con JasperAnalysis (Jasper Server).
  3. Activar un Schema en JasperAnalysis (Jasper Server).
  4. Crear un Analysis Client Connection en JasperAnalysis (Jasper Server).
  5. Crear un Analysis view JasperAnalysis (Jasper Server).
  6. Utilizar Analysis view en JasperAnalysis (Jasper Server).
Sigue leyendo para ver como usar JasperAnalysis, creación de un cubo.



1. Crear un Schema con JasperAnalysis-Workbench y probarlo con consultas MDX

JasperAnalysis utiliza schemas lógicos para mapear fact tables y dimensiones con una BD multidimensional guardada en formato relacional (mysql en este caso). Un schema define  a una BD multidimensional (definición lógica). Esta definición consta de cubos, dimensiones, jerarquias, niveles (levels) y miembros (members). El formato de schema utilizado por Jasper Analysis es de tipo Mondrian.
Para diseñar un schema Mondrian conviene leer a partir de la página 17 de la guia “Mondrian Technical Guide”. En dicho documento se indica que para crear un schema se debe utilizar un editor de texto. En esta manual para crear un schema Mondrian usaremos JasperAnalysis-Workbench.

Lo primero que debemos hacer es lanzar JasperAnalysis-Workbench. Arrancamos un terminal (Application->Accesories->Terminal en Ubuntu) veremos algo similar a la siguiente imagen.


Ejecutamos el siguiente comando (dependerá del lugar donde tengamos JasperAnalysis-Workbench):

sudo /.../JasperAnalysis-Workbench-3.5.4/workbench.sh


Nos pedirá el password, lo introducimos. Aparecerá la siguiente aplicación en pantalla:

Una vez lanzada la aplicación Workbench tenemos que conectarnos a la base de datos Northwind_DW en Mysql antes de poder crear un nuevo schema. Para ello accedemos a la pestaña "Tools->Connection". Aparecerá un formulario que debemos rellenar como muestra la siguiente imagen.

Probamos la correcta conexión con la BD seleccionando la opción "Test". Si la conexión es correcta aparacerá un mensaje indicando “Database Connection susccessful”. Guardamos la conexión seleccionando la opción "Save".
Ahora para crear un nuevo schema seleccionamos la opción del menú principal "File->New->New Schema". El sistema nos solicitará que se le indiquemos la conexión deseada tal y como muestra la imagen.

Seleccionamos northwind y OK para continuar. Ahora debemos ver algo así:


Damos un nombre al schema, por ejemplo NorthwindSchema.
Ahora debemos crear un cubo en el schema. Para ello seleccionamos la opción "add cube" (primera imagen de la izquierda). Aparecerá una ventana similar a la anterior.

Asignamos un nombre al cubo por ejemplo NorthwindCube. La siguiente imagen muestra la ventana final.

Añadimos una tabla (fact table). Para ello seleccionar el cubo y presionar el botón derecho del ratón. Seleccionar la opción "Add table".

Seleccionamos la tabla (fact table) de la base de datos dimensional y rellenamos como se muestra en la imagen.

Ahora debemos añadir indicadores (measures). Seleccionamos el cubo y pulsamos el botón derecho. Seleccionamos "Add Measure" tal y como muestra la siguiente imagen.

Seleccionamos el indicador deseado, por ejemplo, Precio (amount).

Hacemos lo mismo con la Cantidad. Al final nos debe quedar algo así.

Ahora vamos a añadir una dimensión. Para añadir la dimensión DimCustomer, seleccionamos el cubo y pulsamos el botón derecho.

Rellenamos los datos tal como muestra la imagen:

Por defecto junto con la dimensión se añade una jerarquia. Antes de activar la jerarquia es necesario indicar con que tabla está relacionada la dimensión. Para ello hacemos doble click en la dimensión. Aparecerá la jerarquia que se crea por defecto (default). Seleccionamos la jerarquia default y pulsando el botón derecho seleccionamos "Add Table".

Rellenamos la tabla como se muestra en la siguiente imagen. 

Ahora podemos dar nombre a la jerarquia y seleccionar la clave principal (primary key). Seleccionamos la jerarquia default y modificamos los datos.

Si la jerarquia lo requiere tendremos añadir niveles (level) a esa jerarquia. Para el caso de la jerarquia CustomerHierarchy añadiremos tres niveles: Country, City y Company Name. Para añadir un nivel se seleccionamos la jerarquia y pulsando el botón de la derecha seleccionamos "Add Level".

Rellenamos los datos como se muestra en la imagen para el nivel Country.

Repetimos los dos pasos anteriores para City y Company Name. La jerarquia completa queda como se muestra a continuación.

Creamos las dimensiones DimTrabajadores, DimProductos, DimProveedores y DimTransportistas. Creamos las jerarquias para cada una de las dimensiones según nuestro criterio. La siguiente imagen muestra las dimensiones creadas junto con las jerarquias asociadas.

Guardamos el schema con la opción "save" del menú. El schema tiene formato xml que puede verse seleccionando el icono indicado como Schema y la opción "View XML".

El fichero XML final quedaría así.


<Schema name="NorthwindSchema">

    <Cube name="NorthwindCube" cache="true" enabled="true">

        <Table name="factorder" alias="">

        </Table>

        <Dimension type="StandardDimension" foreignKey="idCustomer" name="DimCustomer">

            <Hierarchy name="CustomerHierarchy" hasAll="true" primaryKey="idCustomer">

                <Table name="dimcustomer" alias="">

                </Table>

                <Level name="Country" column="Country" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

                <Level name="City" column="City" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

                <Level name="CompanyName" column="CompanyName" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

            </Hierarchy>

        </Dimension>

        <Dimension type="StandardDimension" foreignKey="idEmployee" name="DimTrabajadores">

            <Hierarchy name="JerarquiaTrabajadores" hasAll="true" primaryKey="idEmployee">

                <Table name="dimemployee" alias="">

                </Table>

                <Level name="Country" column="Country" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

                <Level name="City" column="City" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

                <Level name="LastName" column="LastName" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

            </Hierarchy>

        </Dimension>

        <Dimension type="StandardDimension" foreignKey="idProduct" name="DimProductos">

            <Hierarchy name="JerarquiaProducto" hasAll="true" primaryKey="idProduct">

                <Table name="dimproduct" alias="">

                </Table>

                <Level name="Product" column="Product" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

            </Hierarchy>

        </Dimension>

        <Dimension type="StandardDimension" foreignKey="idSupplier" name="DimProveedores">

            <Hierarchy name="JerarquiaProveedor" hasAll="true" primaryKey="idSupplier">

                <Table name="dimsupplier" alias="">

                </Table>

                <Level name="Country" column="Country" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

                <Level name="City" column="City" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

                <Level name="CompanyName" column="CompanyName" type="String" uniqueMembers="true" levelType="Regular" hideMemberIf="Never">

                </Level>

            </Hierarchy>

        </Dimension>

        <Dimension type="StandardDimension" foreignKey="idShipper" name="DimTransportistas">

            <Hierarchy name="JerarquiaTransportista" hasAll="true" primaryKey="idShipper">

                <Table name="dimshipper" alias="">

                </Table>

                <Level name="Transportista" column="shipper" type="String" uniqueMembers="true" levelType="Regular">

                </Level>

            </Hierarchy>

        </Dimension>

        <Measure name="Precio" column="Amount" aggregator="sum" visible="true">

        </Measure>

        <Measure name="Cantidad" column="Quantity" aggregator="sum" visible="true">

        </Measure>

    </Cube>

</Schema>


También podéis descargarlo aquí.
Se puede verificar si el formato del schema es correcto seleccionando la opción "Test Schema" (tic verde). Si es correcto aparecerá el siguiente mensaje.

Se pueden lanzar consultas MDX contra el schema para verificar el correcto funcionamiento. Para ello seleccionamos la opción MDX.

Nos aparecerá el siguiente mensaje.

La herramienta nos permite generar consultas MDX de modo automatico seleccionando la opción "Generate MDX Query".

Seleccionando esa opción genera una serie de consultas relacionadas con las dimensiones y jerarquias creadas para el cubo. Copiamos esas consultas en un fichero para poder utilizar luego en las vistas. En este punto solo nos interesa ver que el cubo se ha formado y podamos lanzar consultas.
Nota: La página 55 de la guia “Mondrian Technical Guide” explica como formar las consultas MDX.


Seleccionamos "Execute" para ejecutar las consultas generadas.

Con esto hemos finalizado el schema. No olvidéis guardar el schema.

2. Crear un Datasource con JasperAnalysis (Jasper Server)
A partir de ahora utilizaremos Jasper Analysis para generar el cubo y las vistas que queramos.

En primer lugar lanzamos la aplicación Jasper Server. Para ello abrimos un terminal (Applications->Accesories->Terminal) y ejecutamos la siguiente sentencia:

sudo /.../jasperctl.sh start

Introducimos el password de usuario.

Abrimos una ventana de cualquier navegador (en este caso hemos usado Firefox). Accedemos a Jasper Server escribiendo la siguiente URL: http://localhost:8080/jasperserver/login.html (si estamos trabajando en local).

Cuando se carga la página introducimos el usuario y contraseña de administrador para JasperServer, por defecto, el usuario será "jasperadmin" y el password "jasperadmin".

Una vez introducido el usuario y la clave veremos la página principal.

Para crear el cubo primero debemos disponer de una BD origen (Source Database). Para ello debemos abrir la vista repositorio. Seleccionamos "View->Repository" del menú principal.
Para añadir un nuevo Data Source seleccionamos Data Sorce en el menú de directorios que aparece a la izquierda de la página y con el botón de la derecha seleccionamos "Add Resource->Data Source" como indica la imagen.

Arrancará un asistente que en primer lugar nos pedirá el tipo de Data Source seleccionamos "JDBC Data Source". Recordad que NorthwindDW está en Mysql.

Seleccionamos "Next" y rellenamos el siguiente formulario con los datos mostrados en la siguiente imagen.


Nos aseguramos de que la conexión funciona seleccionando la opción "TestConnection". Si es correcta aparecerá la respuesta "Test successful". Guardamos la nueva fuente seleccionando "Save".
Podemos ver la recien creada fuente entre las fuentes de datos existentes. Si no se vé seleccionamos la opción "All resource types" en la segunda opción de la sección "Refine" (parte inferior izquierda de la página). Una vez activada esa opción y seleccionada la carpeta "Data Sources" aparecerá una página como la siguiente.

3. Activar un Schema en JasperAnalysis (Jasper Server)
El siguiente paso necesario para crear un cubo en JasperAnalysis, es activar el schema creado en la primera sección en el servidor de Jasper.
Para ello seleccionamos "View->Repository". En la sección "Search" donde se muestran las carpetas nso situamos en "Analysis Schemas" que se encuentra en "root->Analysis Components".
Pulsamos el botón derecho y seleccionamos "Add Resource->Other->OLAP Schema" como indica la siguiente imagen.

Al lanzar la aplicación aparece un asistente que nos permite seleccionar el fichero donde se guarda el schema creado en la primera sección (Northwind_Cube.xml). Accedemos hasta la carpeta donde se ha guardado dicho fichero y lo seleccionamos.

Pulsamos "Next". Aparecerá un formulario donde introducir el nombre del Schema y una descripción. Introducimos dichos datos, finalmente guardamos (Save).

Podemos ver el recien creado schema entre los schemas existentes. Si no se vé seleccionamos la opción "All resource types" en la segunda opción de la sección "Refine" (parte inferior izquierda de la página). Una vez activada esa opción y seleccionada la carpeta "Analysis Schemas" aparecerá una página como la siguiente.

4. Crear un Analysis Client Connection en JasperAnalysis (Jasper Server)
El siguiente paso en la construcción del cubo consiste en crear una conexión cliente. Esta conexión asocia el Data Source y el Schema previamente creados en la creación del cubo.
Seleccionamos "View->Repository". En la sección "Search" donde se muestran las carpetas, nos situamos en "Analysis Connections" que se encuentra en "root->Analysis Components".
Pulsamos el boton derecho y seleccionamos "Add Resource->Other->Analysis Client Connection".

Al lanzar la aplicación aparecerá un asistente en cuya primera pantalla elegimos el tipo de conexión. Para este ejemplo se seleccionamos "Mondrian Connection".

Seleccionamos "Next". Aparece un formulario donde nos solicita el nombre y la descripción de la conexión cliente creada.

A continuación el asistente permite seleccionar el schema deseado. En este caso se seleccionamos el creado en las secciones anteriores. Seleccionamos el schema almacenado en el repositorio tal y como aparece en la siguiente imagen.

Una vez seleccionado NorthwindCube Schema pulsamos "next". Aparecerá la información del schema seleccionado para verificar si es el deseado.

Pulsamos "Next". El wizard ofrece seleccionar un Data Source. Seleccionamos el creado en la sección anterior.

Seleccionamos "Next". Aparecerá un mensaje indicando que la conexión ha sido exitosa. Guardamos la conexión (Save).

Podemos ver la recien creada conexión entre las conexiones existentes. Si no se vé seleccionamos la opción "All resource types" en la segunda opción de la sección Refine (parte inferior izquierda de la página). Una vez activada esa opción y seleccionada la carpeta Analysis Connections aparecerá una página como la siguiente.

5. Crear un Analysis view JasperAnalysis (Jasper Server)
Para finalizar crearemos una vista del cubo creado. La vista necesita una consulta MDX. La guia “Mondrian Technical Guide” indica el formato y estructura de las consultas MDX a partir de la página 55.
Seleccionamos "View>Repository". En la sección "Search" donde se muestran las carpetas nos situamos en "Analysis Views" que se encuentra en "root>Analysis Components".
Pulsamos con el botón derecho y seleccionamos "Add Resource>Other>Analysis Views".

Al lanzar la aplicación aparecerá un asistente en cuya primera pantalla nos solicita el nombre y la descripción de la vista.

Pulsamos "Next". Nos pedirá la selección del tipo de conexión. Seleccionamos el tipo "Mondrian".

Seleccionamos "Next". Nos pide seleccionar la conexión cliente (Client Connection). Seleccionamos la conexión creada en la sección anterior.

Seleccionamos la conexión y pulsamos Next. A continuación el nos solicita introducir una consulta MDX. Utilizaremos aquellas consultas guardadas en la primera sección. Por ejemplo se puede introducir la siguiente consulta MDX:

SELECT

[Measures].AllMembers ON COLUMNS,

Hierarchize(([DimCustomer.CustomerHierarchy].[All DimCustomer.CustomerHierarchys].Children)) ON ROWS

FROM [NorthwindCube]


Nota: No poner ";" al final de la sentencia MDX.
Deberíamos tener algo así.


Otras posibles consultas MDX serían las que se muestran a continuación. Más adelante se indicaremos como modificar una vista con otras consultas y filtros.

Producto

SELECT

[Measures].AllMembers ON COLUMNS,

Hierarchize([DimProduct.New Hierarchy 0].[All DimProduct.New Hierarchy 0s].Children) ON ROWS

FROM [NorthwindCube];



Trabajadores

SELECT

[Measures].AllMembers ON COLUMNS,

Hierarchize(([DimTrabajadores.JerarquiaTrabajadores].[All DimTrabajadores.JerarquiaTrabajadoress].Children * [DimCustomer.CustomerHierarchy].[All DimCustomer.CustomerHierarchys].Children)) ON ROWS

FROM [NorthwindCube];



Proveedores

SELECT

[Measures].AllMembers ON COLUMNS,

Hierarchize(([DimProveedores.JerarquiaProveedor].[All DimProveedores.JerarquiaProveedors].Children * [DimProductos.JerarquiaProducto].[All DimProductos.JerarquiaProductos].Children)) ON ROWS

FROM [NorthwindCube]



Transportistas

SELECT

[Measures].AllMembers ON COLUMNS,

Hierarchize([DimTransportistas.JerarquiaTransportista].[All DimTransportistas.JerarquiaTransportistas].Children) ON ROWS

FROM [NorthwindCube]



Seleccionamos "Next". Si la consulta es correcta aparecerá un mensaje indicando que la conexion es correcta tal y como indica la imagen.

Guardamos la vista. Podemos ver la recien creada vista entre las vistas existentes. Si no se vé seleccionamos la opción "All resource types" en la segunda opción de la sección "Refine" (parte inferior izquierda de la página). Una vez activada esa opción y seleccionada la carpeta "Analysis Views" aparecerá una página como la siguiente.

6. Utilizar Analysis view en JasperAnalysis (Jasper Server)
Una vez creada una vista podemos explorar y presentar datos a partir de ella. Para hacerlo simplemente hacemos doble click sobre la vista.

Veremos la siguiente vista que puede ser modificada, consultada, exportada a otros formatos, etc.

Con esto ya hemos creado un cubo en JasperServer con JasperAnalysis. Ahora ya puedes jugar con el cubo y hacer distintas consultas. En el siguiente manual veremos como crear informes.

Artículos relacionados


Comments

3 Responses to “ JasperAnalysis, creación de un cubo en JasperServer ”
Post a Comment | Enviar comentarios ( Atom )

Anónimo dijo...

Muy buena serie, me ha sido muy útil, me ha facilitado el aprendizaje.

Gracias y ánimos.

30 de diciembre de 2010, 15:52
Anónimo dijo...

Muy buen aporte, muy útil para comenzar a trabajar con esta herramienta.
Muchas gracias.

16 de mayo de 2012, 0:02
chama dijo...

Excelente explicacion

22 de abril de 2013, 17:51

Publicar un comentario en la entrada

Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.