Crear un gráfico OpenFlash dinámico en Pentaho desde un jsp.

Crear un gráfico OpenFlash dinámico en Pentaho desde un jsp.
Business Intelligence
bernabeu_dario 13 Agosto, 2009 - 19:06

Buenas.

Les presento a continuación el primer tutorial que ha surgido de la iniciativa "aprender y compartir conocimientos".

Dicho tutorial ha sido confeccionado en su totalidad por Iván E. Tinajero Díaz.

 

 

Crear un gráfico OpenFlash dinámico en Pentaho desde un jsp

En este tutorial se explicará el procedimiento para crear una gráfica OpenFlash en Pentaho, donde recibirá parámetros enviados desde un archivo jsp. El archivo jsp contendrá un formulario html con un select (combo) que será llenado dinámicamente obteniendo datos directamente de una de las tablas del DW y un botón submit, que al ejecutarlo, mandará el valor del select que seleccioná el usuario a un xaction que será un parámetro de entrada para generar una gráfica OpenFlash en Pentaho BI.

El ejemplo se realizará utilizando las siguientes tecnologías:

Se asume que Pentaho BI Server 3.0 ya se encuentra instalado en un Tomcat 6.0.18, así como el servidor de bases de datos MySQL. Se necesitará también que ya se haya trabajado antes la programación de páginas web utilizando la tecnología de Java Server Pages (jsp) con conexión a bases de datos y programación java con JDBC.

Se adjuntan todos los archivos necesarios para seguir este tutorial.

 

El tutorial cubrirá los siguientes temas:

Capítulo I Crear nuestro xaction estático.   

  1. Crear la base de datos datawarehouse y poblarla.
  2. Crear un xaction para dibujar una gráfica utilizando OpenFlash.
  3. Configurar nuestro JNDI para la conexión al DW.
  4. Ejecutar la gráfica sin pasarle parámetros.

Capítulo II Hacer Dinámica nuestra gráfica.

  1. Crear una clase java para conectarnos por medio de jsp a la base de datos.
  2. Crear nuestros jsp que enviarán los parámetros al xaction.
  3. Configurar los jsp para ejecutarlos desde Pentaho.
  4. Ejecutar nuestra gráfica pasándole parámetros.

 

 

Capítulo I Crear nuestro xaction estático

1. Crear la base de datos datawarehouse y poblarla

    [root@itinajero schema-workbench]# mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 43
    Server version: 5.0.45 Source distribution
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> create database datawarehouse;
    Query OK, 1 row affected (0.00 sec)

    mysql> exit
    Bye
    [root@itinajero schema-workbench]#

    [root@itinajero schema-workbench]# mysql -u root -p datawarehouse < /descargas/dw.sql

2. Crear un xaction para dibujar una gráfica utilizando OpenFlash.

 Open Flash Dinamico con Pentaho

 

 Crear parámetro de entrada.

 

Crear el proceso para la BD.

 

    SELECT
     dw_vendedoreslookup.Vendedor
    ,round(sum(dw_ventasfact.importe),0) as Monto
    from dw_ventasfact
    inner join dw_vendedoreslookup on dw_vendedoreslookup.idVendedor=dw_ventasfact.idVendedor
    inner join dw_productoslookup on dw_productoslookup.idProducto=dw_ventasfact.idProducto
    where dw_ventasfact.idProducto=5
    group by (dw_ventasfact.idvendedor)

   

    SELECT
     dw_vendedoreslookup.Vendedor
    ,round(sum(dw_ventasfact.importe),2) as Monto
    from dw_ventasfact
     inner join dw_vendedoreslookup on    dw_vendedoreslookup.idVendedor=dw_ventasfact.idVendedor
    inner join dw_productoslookup on dw_productoslookup.idProducto=dw_ventasfact.idProducto
    where dw_ventasfact.idProducto={idProducto}
    group by (dw_ventasfact.idvendedor)

 

Crear el archivo xml con la configuración para gráfica de Barra.

 

Crear parámetros de ancho y alto para la gráfica.

 

Crear el Process para OpenFlash.

 

Crear la salida del xaction.

3. Configurar nuestro JNDI para la conexión al DW.

 

4. Ejecutar la gráfica sin pasarle parámetros.

Capítulo II Hacer Dinámica nuestra gráfica.

1. Crear una clase java para conectarnos por medio de jsp a la base de datos.

    [root@itinajero classes]# gedit paquete1/DbConnection.java   

2. Crear nuestros jsp que enviarán los parámetros al xaction.

3. Configurar los jsp para ejecutarlos desde Pentaho.

4. Ejecutar nuestra gráfica pasándole parámetros.

Con esto queda terminado el tutorial, espero que les sea de utilidad.

 

Saludos...

 

Adjunto Size
practicas.rar 162 bytes

Hola, me sale error en la 2da parte:

 

 

Exception report

message

description The server encountered an internal error () that
prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 28 in the jsp file: /jsp/frmProductos.jsp
String literal is not properly closed by a double-quote
25: Statement st = conn.getConnection().createStatement();
26: ResultSet rs=st.executeQuery("select idProducto,Producto from dw_productoslookup");
27: while (rs.next())
28: out.println("<option
29: value="+rs.getInt("idProducto")+">"+rs.getString("Producto")+"</option>");
30: st.close();
31: rs.close();


Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
	org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.pentaho.platform.web.http.security.SecurityStartupFilter.doFilter(SecurityStartupFilter.java:85)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.pentaho.platform.web.http.security.RequestParameterAuthenticationFilter.doFilter(RequestParameterAuthenticationFilter.java:169)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.ui.basicauth.BasicProcessingFilter.doFilterHttp(BasicProcessingFilter.java:174)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.pentaho.platform.web.http.security.HttpSessionReuseDetectionFilter.doFilter(HttpSessionReuseDetectionFilter.java:134)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
	org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
	org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
	org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
	org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99)
	org.pentaho.platform.web.http.filters.SystemStatusFilter.doFilter(SystemStatusFilter.java:60)
	org.pentaho.platform.web.http.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:113)

note The full stack trace of the root cause is available in the
Apache Tomcat/5.5.26 logs.

 

En respuesta a por orisonp (no verificado)

Hola orisonp.

Prueba con abrir el archivo frmProductos.jsp y colocar el código que actualmente tienes en dos líneas(línea 28 y línea 29) en un solo renglón, es decir:

  • out.println("<option value="+rs.getInt("idProducto")+">"+rs.getString("Producto")+"</option>");

 

Saludos.

 Crear el Process para OpenFlash.

 

Cuando intento crear el  Process Actions para la gráfica de OpenFlash esta nunca me deja mapear en los "inputs"

  • chart-data, de tipo “result-set” mapeado a “query_result”   <-- Este nunca aparece como opcion en los Mapeados

Igualmente , cuando intento correo la grafica, nunca me genera nada

 

Espero me puedan ayudar