Вы находитесь на странице: 1из 6

Construccion de los Dashboard en Pentaho

Prologo Se debe de tener en cuenta que los dashboard de Pentaho estan construidos con JSP (Java Server Page) y para poder construirlos se debe de tener conocimientos basicos de HTML.

Los pasos para poder construirlos son: Primer paso: Se debe mapear el JSP que se va a construir en la siguiente ruta:

# vim /opt/pentaho-opensource-1.2.1/jboss/server/default/deploy/pentaho.war/WEB-INF/web.xml

Ejemplo: <servlet> <servlet-name>Log</servlet-name> <jsp-file>/jsp/Log.jsp</jsp-file> </servlet>

<servlet-mapping> <servlet-name>Log</servlet-name> <url-pattern>/Log</url-pattern> </servlet-mapping>

www.omar.codigo03.com

Segundo Paso: Empezar a programar la pagina JSP en la siguiente ruta:


/opt/pentaho-opensource-1.2.1/jboss/server/default/deploy/pentaho.war/jsp/

Utilizaremos el archivo Log.jsp de ejemplo que se encuentra en el servidor 172.25.0.39. - En la primera parte importa la librerias que usara el archivo.
<%@ page language="java" import="java.util.ArrayList, java.util.*, java.io.ByteArrayOutputStream, org.pentaho.core.util.XmlHelper, org.pentaho.core.ui.SimpleUrlFactory, org.pentaho.messages.Messages, org.pentaho.core.util.IUITemplater, org.pentaho.core.system.PentahoSystem, org.pentaho.util.VersionHelper, org.pentaho.ui.component.DashboardWidgetComponent, org.pentaho.ui.component.INavigationComponent, org.pentaho.ui.component.NavigationComponentFactory, org.pentaho.ui.component.HtmlComponent, org.pentaho.core.solution.HttpRequestParameterProvider, org.pentaho.core.solution.HttpSessionParameterProvider, org.pentaho.core.session.IPentahoSession, org.pentaho.core.util.UIUtil, org.dom4j.*, org.pentaho.util.VersionHelper, org.pentaho.messages.util.LocaleHelper, org.pentaho.core.solution.ActionResource, org.pentaho.core.solution.IActionResource, org.pentaho.core.solution.SimpleParameterProvider, org.pentaho.ui.ChartHelper, java.io.*" %>

- En la segunda parte se declara el template que va usar la pagina que se generara


<% response.setCharacterEncoding(LocaleHelper.getSystemEncoding()); String baseUrl = PentahoSystem.getApplicationContext().getBaseUrl(); String path = request.getContextPath(); IPentahoSession userSession = UIUtil.getPentahoSession( request ); String intro = ""; String footer = ""; IUITemplater templater = PentahoSystem.getUITemplater( userSession ); if( templater != null ) { String sections[] = templater.breakTemplate( "template-home.html", "", userSession ); if( sections != null && sections.length > 0 ) { intro = sections[0]; } if( sections != null && sections.length > 1 ) { footer = sections[1]; } } else { intro = Messages.getString( "UI.ERROR_0002_BAD_TEMPLATE_OBJECT" ); } intro = intro.replaceFirst( "\\{Bienvenido\\}", Messages.getString("UI.USER_WELCOME") ); %>

- Aqui se deben declarar las variables que se van usar en el dashboard, incluyendo las variables en las que se almacenaran los pies y barras.
String area = request.getParameter("area"); String nombre = request.getParameter("nombre"); String user = request.getParameter("user"); String title = "Seleccione Ubicacion"; String chart1 = ""; String chart2 = ""; String chart3 = ""; String irri = "IRRI"; String cip = "CIP"; String ilri = "ILRI"; String icrisat = "ICRISAT"; String barra = ""; String barra2 = ""; String pie1 = ""; String pie2 = "";

- Despues de haber declarado las variables recien podemos empezar a crear los pies o barras. Ejemplo de la creacion de una barra:
// Se crea una nueva instancia de la clase SimpleParameterProvider parameters = new SimpleParameterProvider(); //se envia un parametro a los archivos de consulta parameters.setParameter( "inner-param", "NOMBRE"); //Se declaran los tamaos de la imagen parameters.setParameter( "image-width", "350"); parameters.setParameter( "image-height", "400"); StringBuffer content = new StringBuffer(); ArrayList messages = new ArrayList(); //Se llama al archivo de consulta, se debe de observar la ruta de los archivos; tambien se define el tipo de imagen, CHART. ChartHelper.doChart( "samples", "dashboard_cip/Log", "year_log.widget.xml", parameters, content, userSession, messages, null ); barra = content.toString();//se coloca el dibujo en la variable barra

En la siguiente ruta se encuentra el archivo year_log.widget.xml


/opt/pentaho-opensource-1.2.1/pentaho-solutions/samples/dashboard_cip/Log/

En el archivo se encuentran algunos elementos importantes de la barra que se graficara: El titulo de la grafica (posicion y tamao) El color del fondo de la grafica La orientacion de la grafica (vertical o horizontal) Y lo mas imporantes, la direccion del archivo que contiene la consulta SQL a la base de datos.
<data> <data-solution>samples</data-solution> <data-path>dashboard_cip/Log</data-path> <data-action>year_logs_data.xaction</data-action> <data-output>rule-result</data-output> <data-name>NOMBRE</data-name> <data-value>HORAS</data-value> <data-orientation>rows</data-orientation> </data>

En la ruta sealada de color azul se encuentra el archivo year_logs_data.xaction que contiene la consulta SQL que sera mostrada por la grafica. El archivo year_logs_data.xaction tiene la siguiente estructura: - Documentacion sobre el archivo: Solo algunos aspectos descriptivos que involucran el resultado de la grafica. - Inputs: Parametros que pueden ser pasados para la consulta sql En este ejemplo no se pasa ningun parametro y quedaria de la siguiente manera:
<inputs/>

- Outputs: La forma en que devolvera el resultado


<outputs> <rule-result type="result-set"/> </outputs>

- La accion: Se muestra la secuencia de la accion:


<actions> <action-definition> <component-name>SQLLookupRule</component-name> <action-type>Query For Headcount Data</action-type> <action-inputs/> //los parametros que se traen para la consulta <action-outputs> <query-result type="result-set" mapping="rule-result"/> //el resultado </action-outputs> <component-definition> <!-- Define the datasource for the query --> <jndi>second</jndi>//aqui va el JNDI con el q se conectara a la base de datos <!-- Define the query to execute. Note the parameter {REGION} in the query --> <query><![CDATA[SELECT NOMBRE, COUNT( id_hpc ) *2 /60 AS MESES FROM `HPC_LOG` , meses WHERE id_meses = MONTH( dia_cap ) GROUP BY MONTH( dia_cap )]]></query>//esta es la consulta sql </component-definition> </action-definition>

www.omar.codigo03.com

Ahora se hara otro ejemplo con un pie como grafica, la secuencia es la misma y las etiquetas cumplen las mismas funciones que para las barras. .
parameters = new SimpleParameterProvider(); parameters.setParameter( "AREA", area );// aade valores de variables parameters.setParameter( "MES", nombre ); parameters.setParameter( "drill-url", "Log?area="+area+"&amp;nombre="+nombre+"&amp;user={USER}");//convierte en URL porciones de la imagen parameters.setParameter( "outer-params", "AREA");//se envia AREA Y MES para la consulta sql parameters.setParameter( "outer-params", "MES"); parameters.setParameter( "inner-param", "USER"); parameters.setParameter( "image-width", "850"); parameters.setParameter( "image-height", "600"); content = new StringBuffer(); messages = new ArrayList(); //se define la ruta y el tipo de imagen, PIE. ChartHelper.doPieChart( "samples", "dashboard_cip/Log", "mes_log.widget.xml", parameters, content, userSession, messages, null ); pie1 = content.toString();

En mes_log.widget.xml se declaran los archivos que tienen la consulta SQL.


<data> <data-solution>samples</data-solution> <data-path>dashboard_cip/Log</data-path> <data-action>mes_logs_data.xaction</data-action> <data-output>rule-result</data-output> <data-orientation>columns</data-orientation> </data>

En el archivo mes_logs_data.xaction, se tiene lo siguiente:


<inputs> <AREA type="string"> <sources> <request>AREA</request> </sources> </AREA> <MES type="string"> <sources> <request>MES</request> </sources> </MES> </inputs>

Aqu se recogen los valores que luego seran incluidos en la accion que se realizara con la base de datos.

www.omar.codigo03.com

<actions> <action-definition> <component-name>SQLLookupRule</component-name> <action-type>Query For Headcount Data</action-type> <action-inputs>// se recogen los dos valores AREA Y MES <AREA type="string"/> <MES type="string"/> </action-inputs> <action-outputs> <query-result type="result-set" mapping="rule-result"/> </action-outputs> <component-definition> <!-- Define the datasource for the query --> <jndi>second</jndi> //SE DECLARA LA CONSULTA SQL <query><![CDATA[SELECT user, count( user ) *2 /60 AS Horas FROM HPC_LOG, meses WHERE id_hpc = {PREPARE:AREA} AND MONTH( dia_cap ) = id_meses AND nombre LIKE '{PREPARE:MES}' GROUP BY user ]]></query> </component-definition> </action-definition> </actions>

www.omar.codigo03.com

Вам также может понравиться