Tips, Soluciones y Novedades en Tecnología

Mostrando entradas con la etiqueta Pentaho. Mostrar todas las entradas
Mostrando entradas con la etiqueta Pentaho. Mostrar todas las entradas

18/10/2018

App Explore BI



Lanzamos una App en android para la comunidad




Con Explore BI podrás acceder a tu plataforma web Pentaho Business Intelligence - Big Data Analytics y aprovechar todas las ventajas de tu Sistema de Inteligencia de Negocios desde un dispositivo Android en cualquier lugar y momento.

Controla indicadores de rendimiento; comparte información con empleados, proveedores y socios; calcula oportunidades comerciales rentables; conoce el comportamiento de tus clientes y mucho más con Explore BI.

Video promocional de nuestra App






Descarga y utiliza nuestra app para explorar tus Ánalisis, Indicadores y Reportes desde cualquier lugar y en tiempo real y sin nungun costo, ha sido pensando para promover el uso de Pentaho desde aplicaciones mobiles.



Disponible en google play







29/07/2018

Pentaho Reporting Eventos





Hoy veremos como agregar eventos desde Pentaho Reporting, muy útil para enlazar a otros reportes y pasar parámetros.



En Pentaho Reporting podemos generar a muchos formatos de salida, uno de ellos es HTML, y en este caso HTML nos facilita agregar eventos para poder enlazar  enviando parámetros según nuestras necesidades.





En el vídeo para ver la explicación de la utilización de eventos HTML.













Saludos.



16/07/2018

Kettle y Google Spreadsheet





Kettle puede leer datos de una variedad de fuentes, desde base de datos, ficheros, web services, etc.



Hoy comparto como leer desde Google Spreadsheet, es decir podemos editar nuestro Spreadsheet y podremos ver esos cambios en nuestro Dashboard de Pentaho CDE





Para ello tenemos que realizar lo siguiente.



Paso 1:



Habilitar el API de Drive en la consola de Google







Crear una cuenta de servicio con permiso de lectura para recursos, seleccionar que proporcione una nueva clave P12, con esto tendremos nuestra KEY para poder conectarnos desde kettle







Una vez creado nuestra cuenta de servicio podremos ver en nuestra IAM de la consola de Google









Paso 2:



Crear un archivo Google Spredsheet y llenar de datos











Compartir en modo lectura con el correo de la cuenta de servicio creado









Ya tenemos configurado nuestro archivo, ahora solo queda configurar kettle.



Paso 3:



Por defecto kettle no viene instalado el plugin, tendremos que instalar desde el matketplace







Una vez instalado debemos reiniciar y crear una transformación y en la sección Inputs podremos ver el componente para conectarnos  a Google Spreadsheet.



Como primer paso debemos configurar para ello proporcionamos la llave P12, la cuenta de servicio y el ID del Spreadsheet, para obtener el ID del spreadsheet, debemos sacar de la barra de navegación











Probar la conexión y consultar las hojas.



Como resultado podremos ver los datos obtenido desde Google Spreasheet











Espero puedan utilizar Google Spreadsheet en sus procesos de BI como fuente de datos, debido a que los usuarios pueden llenar de datos y fácilmente mostrar los datos en un Dashboard de Pentaho CDE,



Saludos.





15/04/2018

Memoria Pentaho BI 2012





Una implementación de pentaho BI con datos universitarios, donde he realizado mis primeros pasos en el ecosistema BI, implementando Saiku Analytics y Saiku AdHoc.



















Saludos


PDR en java web


Para ejecutar un reporte en formato .prpt, se tiene que tener cuidado con las versiones, en este post muestro un ejemplo de ejecutar un reporte implementado con Pentaho Reporting y ejejcutado desde una aplicacion web sin requerir el servidor de pentaho.

Para ello se requiere los siguientes pasos:

  1. Importar las librerias de pentaho Peporting Designer
  2. Ejecutar el archivo .sql que se encuentra en el proyecto adjunto
  3. Realizar las conexiones a la base de datos
  4. Deployar en un servidor web


Las librerias pueden sacarlas desde Pentaho Reporting Designer o bajando desde aqui Libs PDR

Descargar el proyecto con dependencias Maven aqui PentahoMaven

Localizar el archivo reporte1.prpt y abrir con Pentaho Reporting Designer y hacer los cambios que desean.

Importar las librerias al proyecto we y ejecutar.

Teniendo este esquema de implementación facilmente pueden utilizar en las siguientes versiones de Pentaho e integrarlo en sus aplicaciones web

Esta implementación se ha realizado con la version 6.1.0.1-196

Saludos.

14/04/2017

Exportar PNG/JPG Saiku






En las ultimas versiones de saiku analytics, en la versión community, al exportar el gráfico generado por las matrices olap, este genera una marca de agua que muchas veces es incomodo.









Otro aspecto es que ese proceso demora demasiado en el servidor.



Aveces hay errores en la exportación, y nos muestra el típico mensaje de que debes contactar con el administrador.





Para solucionar estos problemas, y ahorrarles a saiku a tener que generar la imagen desde el servidor, lo vamos a generar directamente desde la vista.



Para lograr este propósito debemos hacer uso de la librería.



filesaverj.js



Tiene la facilidad de guardar en varios formatos y desde varios formatos. visitar el link para ver mas opciones.



https://github.com/eligrey/FileSaver.js/



Lo que debemos de hacer es modificar 2 archivos.



 - index.html (biserver-ce/pentaho-solutions/system/saiku/ui)

 - plugin.js (biserver-ce/pentaho-solutions/system/saiku/ui/js/saiku/plugins/CCC_Chart)



El concepto es bien simple.



Saiku cada vez que quieres ver un gráfico distinto y clickeas en el gráfico correspondiente, este carga el gráfico y le pasa los datos, y un div donde va mostrar el svg generado por la librería.



Lo que debemos de hacer es tomar el svg y generar el png o jpg según el tipo seleccionado por el usuario.



Ahora vamos a agregar la librería filesaver.js al index.html






<script type="text/javascript" src="https://fastcdn.org/FileSaver.js/1.1.20151003/FileSaver.min.js"></script>








Ahora  agregamos el siguiente método a la clase, justo después en el método exportChart (aunque puede estar en cualquier parte)







download_chart: function (data, x, y, type) {
/** custom **/
var width = x;
var height = y;
var svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"});
var url = URL.createObjectURL(svg);
var img = $('<img />')
.width(width)
.height(height)
.on('load', function () {
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img.get(0), 0, 0);
canvas.toBlob(function (blob) {
saveAs(blob, "Grafico de datos." + type);
});
});
img.attr('src', url);
},



Ahora debemos hacer una interrupción a la ejecución del método y enviar al método que acabamos de definir los parámetros necesarios para la conversión debida.





exportChart: function (type) {
var svgContent = new XMLSerializer().serializeToString($('svg')[0]);
var rep = '<svg xmlns="http://www.w3.org/2000/svg" ';
if (svgContent.substr(0, rep.length) != rep) {
svgContent = svgContent.replace('<svg ', rep);
}
this.download_chart(svgContent, $('svg').width(), $('svg').width(), type);
/*
        svgContent = '<!DOCTYPE svg [<!ENTITY nbsp "&#160;">]>' + svgContent;
         var form = $('#svgChartPseudoForm');
         form.find('.type').val(type);
         form.find('.svg').val(svgContent);
         if (this.workspace.query.name != undefined) {
         var f = this.workspace.query.name.substring(this.workspace.query.name.lastIndexOf('/') + 1)

.slice(0, -6);
         form.find('.name').val(f);
         }
         form.attr('action', Settings.REST_URL + this.workspace.query.url() +

escape("/../../export/saiku/chart"));
         form.submit();*/
return false;
},



Con esto ya podemos actualizar y al momento de exportar nuestros gráficos, este debe generarse sin problemas.



Adjunto el vídeo donde se realiza de manera dinámica.









Saludos.


26/09/2015

Pentaho – solutions


En este post veremos un servicios de pentaho y como sacar provecho de ello para poder integrarlo en nuestra aplicación empresarial

para ello tenemos que analizar  un servicio especifico:

 

/pentaho/SolutionRepositoryService

 

este servicio tiene una serie de parámetros que espera recibir al ser llamado.

  • component: getSolutionRepositoryDoc
  • component: getAcl
  • component: setAcl
  • component: createNewFolder
  • component: delete

 

por cada tipo de componente que queremos solicitar hay otros parámetros que debemos enviar

getSolutionRepositoryDoc         userid password
getAcl solution path filename   userid password
setAcl solution path filename aclXml userid password
createNewFolder solution path name   userid password
delete solution path name   userid password

 

Paso 1: Listar el repositorio de pentaho: pentaho/SolutionRepositoryService?component=getSolutionRepositoryDoc &userid=xx&password=xxx

el resultado es en formatto xml.

 

<?xml version="1.0" encoding="UTF-8"?><repository path="/pentaho-solutions" product-id="POBS" version-build="49886" version-major="4" version-milestone="stable" version-minor="5" version-relase="0">
    <file description="Links for updating the system settings and web service examples" isDirectory="true" lastModifiedDate="1433353698531" localized-name="Admin Services" name="admin" visible="false">
        <file description="Tools for the content Repository" isDirectory="true" lastModifiedDate="1433353698529" localized-name="Content Repository Admin" name="Content" visible="false"/>
        <file description="resources" isDirectory="true" lastModifiedDate="1433353698533" localized-name="resources" name="resources" visible="false">
            <file description="metadata" isDirectory="true" lastModifiedDate="1433353698553" localized-name="metadata" name="metadata" visible="false"/>
        </file>
        <file description="Removes files from the content repository that are more than 180 days old." isDirectory="false" lastModifiedDate="1335477348000" localized-name="Clean Repository" name="clean_repository.xaction" param-service-url="/pentaho/ServiceAction?solution=admin&amp;path=&amp;action=clean_repository.xaction&amp;component=xaction-parameter" url="/pentaho/ViewAction?solution=admin&amp;path=&amp;action=clean_repository.xaction" visible="true"/>
        </file>
    <file description="cdb" isDirectory="true" lastModifiedDate="1436830518047" localized-name="cdb" name="cdb" visible="false">
        <file description="queries" isDirectory="true" lastModifiedDate="1436830518077" localized-name="queries" name="queries" visible="true"/>
        <file description="saiku" isDirectory="true" lastModifiedDate="1436830518013" localized-name="saiku" name="saiku" visible="true"/>
    </file>
    <file description="CDE" isDirectory="true" lastModifiedDate="1443127490702" localized-name="cde" name="cde" visible="true">
        <file description="components" isDirectory="true" lastModifiedDate="1437605131147" localized-name="components" name="components" visible="true"/>
        <file description="widgets" isDirectory="true" lastModifiedDate="1437605131393" localized-name="widgets" name="widgets" visible="true">
            <file description="" isDirectory="false" lastModifiedDate="1437605131329" localized-name="SampleWidget" name="sample.wcdf" url="/pentaho/content/pentaho-cdf-dd/Render?solution=cde&amp;path=widgets&amp;file=sample.wcdf" visible="true"/>
        </file>
    </file>
</repository>

 

  Para como se puede apreciar el xml contendrá todos los archivos y carpetas del repositorio de pentaho

y las propiedades son las siguientes:

  • lastModifiedDate
  • name
  • localized-Name
  • param-service-url
  • url
  • isDirectory
  • isVisible

Siguiendo los nodos y con estos parámetros podemos diferencias si son carpetas o archivos.

 

Ahora supongamos que en la vista nuestro frontend utiliza JSON, acá tendremos una trabajito de procesar este xml y pasarlo a json, filtrando solo los archivo y carpetas visibles

al repositorio.

un resultado en JSON considero necesario para tener todo a la mano seria este JSON.

 

{
    "data":
            [
                {
                    "localizedName": "Testing",
                    "visible": true,
                    "isDirectory": true,
                    "description": "Testing",
                    "name": "Testing",
                    "path": "",
                    "children": [{
                            "localizedName": "saiku",
                            "visible": true,
                            "isDirectory": true,
                            "description": "saiku",
                            "name": "saiku",
                            "path": "",
                            "children": [{
                                    "localizedName": "miarchivo",
                                    "visible": true,
                                    "isDirectory": false,
                                    "description": "",
                                    "name": "miarchivo.saiku",
                                    "path": "saiku",
                                    "editUrl": "/pentaho/content/saiku-ui/index.html?solution=Testing&path=saiku&action=miarchivo.saiku&dimension_prefetch=false&mode=edit&biplugin=true#query/open/miarchivo.saiku",
                                    "lastModifiedDate": "1442801950932",
                                    "param-service-url": "",
                                    "leaf": true,
                                    "type": "saiku",
                                    "solution": "Testing",
                                    "url": "/pentaho/content/saiku-ui/index.html?solution=Testing&path=saiku&action=miarchivo.saiku&dimension_prefetch=false&mode=view&biplugin=true#query/open/miarchivo.saiku"
                                }],
                            "lastModifiedDate": "1442806447920",
                            "expanded": false,
                            "solution": "Testing"
                        }],
                    "lastModifiedDate": "1442801913318",
                    "expanded": false,
                    "solution": "Testing"
                }]
    ,
    "success": true,
    "expanded": false
}

Con este JSON, ya podemos construir un TreePanel en cualquier framework javascript

image

Las extensiones en pentaho son:

Set<String> map = new HashSet<>();
       map.add("saiku");
       map.add("prpt");
       map.add("xcdf");
       map.add("wcdf");
       map.add("adhoc");
       map.add("xaction");
       map.add("waqr");

con ello podemos colocar un icon en función al tipo.

 

PASO 2 :  Crear una carpeta en el repositorio de pentaho :

  pentaho/SolutionRepositoryService?component=createNewFolder&solution=SOLUTION&path=PATH&name=NAME &userid=xx&password=xxx

      

al realizar esta peticion se recibirá un mensaje en XML

  <result>true</result>  si se creo correctamente la carpeta

 y  <result>false</result> si no pudo crearlo

 

interpretamos este resultado y enviamos al cliente.

 

PASO 3:  Eliminar un archivo o carpeta del repositorio de pentaho

  pentaho/SolutionRepositoryService?component=delete&solution=SOLUTION&path=PATH&name=NAME &userid=xx&password=xxx

al realizar esta peticion se recibirá un mensaje en XML

  <result>true</result>  si se elimino

 y  <result>false</result> si no pudo eliminarlo

 

interpretamos este resultado y enviamos al cliente.

 

PASO 4: Obtener los permisos de una carpeta o archivo de pentaho

pentaho/SolutionRepositoryService?component=getAcl&solution=SOLUTION&path=PATH&filename=FILENAME&userid=xx&password=xxx

la respuesta es un xml con la siguiente estructura

<?xml version='1.0' encoding='UTF-8'?>
<acl>
    <entry role='Admin' permissions='-1'/>
    <entry role='cto' permissions='-1'/>
    <entry role='dev' permissions='3'/>
    <entry role='Authenticated' permissions='1'/>
</acl>

 

interpretamos este xml y podemos modificarlo y enviarlo al paso siguiente.

 

PASO 5:  dar o quitar permiso a una carpeta o archivo de pentaho

pentaho/SolutionRepositoryService?component=setAcl&solution=SOLUTION&path=PATH&filename=FILENAME&aclXml=XML_IGUAL_AL_ANTERIOR&userid=xx&password=xxx

 

al realizar esta peticion se recibirá un mensaje en XML

  <result>true</result>  si se añadió los nuevos permisos

 y  <result>false</result> si no pudo añadir los permisos

 

interpretamos este resultado y enviamos al cliente.

 

Como observamos los pasos anteriores, es fácil integrar pentaho a nuestra aplicación empresarial y no depender de su consola de administración para administrar nuestros reportes.

 

Cualquier consulta no duden en escribir.

 

Saludos cordiales.

Save As saiku


En la entrada anterior vimos como integrar adhoc con nuestra aplicación  en el cual nosotros tenemos el control del repositorio de pentaho

en este post explicaremos como hacemos con saiku

 

Saiku es una de las mejores por no decir la mejor de los plugin para hacer análisis OLAP y es además open source

si queremos la independencia de la consola de pentaho, podemos hacer el mismo paso que el post anterior y podremos guardar nuestro análisis saiku según nuestra necesidad

puesto que este también dispone de un plugin:

\pentaho-solutions\system\saiku\ui\js\saiku\plugins\BIServer\plugin.js

el proceso es exactamente el mismo del post anterior para el proceso de guardado.

image

Vamos hacer algo mas, para darle a saiku la independencia total.

si abrimos saiku en modo edición en una ventana vemos que que no dispone de un botón guardar, solo dispone de un botón guardar como

entonces si modificamos el análisis no podemos guardarlo automáticamente salvo que tendríamos que navegar y remplazar el archivo y esto para mi

es un proceso engorroso cuando ya hay parámetros y esta en modo edición

 

entonces hagamos un script para poder guardar el análisis saiku sin que nos este solicitando navegar por el repositorio de soluciones de pentaho

lo primero es que tenemos que agregar un nuevo botón en la plantilla index.html para que figure como un icono mas.

 

save

después agregamos un class css .save_action y le agregamos un icono, recuerden el nombre: href=”#save_action”

.workspace_toolbar .save_action{
   background-image: url('../../../../../../mantle/images/save_32.png');
   height: 16px !important;
   width: 16px !important;
}

podemos ver que nuestro botón se agrego correctamente. obviamente que el botón save as también lo he cambiado de icono

buttom

 

Ubiquemos los siguientes archivos:

 

\pentaho-solutions\system\saiku\ui\js\saiku\views\WorkspaceToolbar.js

y en la línea 157 des pues de la función open_query crear esta función

 

save_action: function(event) {

  var SaveSolution = Settings.GET.SOLUTION;
   var SavePath = Settings.GET.PATH;
   var SaveName = Settings.GET.ACTION;

   if (SaveSolution == undefined || SavePath == undefined || SaveName == undefined) {
           if(top.mantle_initialized !== undefined && top.mantle_initialized &&
           top.parent.enableAdhocSave ) {
               if (window.ALLOW_PUC_SAVE === undefined || ALLOW_PUC_SAVE) {
                   top.parent.enableAdhocSave(isAllowed);
               }
           } else {
               this.save_query(event);
           }
   } else {
       var nwPath;
       var temp = SavePath.toString();
       if (temp == 'NaN') {
           nwPath = '';
       } else {
           nwPath = Settings.GET.PATH;
       }
       puc.save_to_solution(SaveName, SaveSolution, nwPath, null, true);
   }
    },

Lo que hace la función es  recoger las variables globales capturadas en iniciar la ejecución del análisis por las librerías de saiku.

si el análisis esta en modo edición, entonces estas variables tiene un valor valido asignado y como decía al inicio

(No podemos estar preguntando donde guardar si tenemos la ruta y queremos actualizar el análisis).

 

ahora si el análisis no tiene valores validos quiere decir que es un nuevo análisis, y entonces si no esta integrado a pentaho re direcciono al SAVE_QUERY,

para que me muestre el explorador de soluciones, también podemos directamente  llamar a SAVE_QUERY, sin preguntar si esta en un iframe de la consola de pentaho

 

save_action: function(event) {

  var SaveSolution = Settings.GET.SOLUTION;
   var SavePath = Settings.GET.PATH;
   var SaveName = Settings.GET.ACTION;

   if (SaveSolution == undefined || SavePath == undefined || SaveName == undefined) {
               this.save_query(event);
          
   } else {
       var nwPath;
       var temp = SavePath.toString();
       if (temp == 'NaN') {
           nwPath = '';
       } else {
           nwPath = Settings.GET.PATH;
       }
       puc.save_to_solution(SaveName, SaveSolution, nwPath, null, true);
   }
    },

image

Al hacer click me re direcciona a save_query, por que las variables no están definidas

 

image

Al hacer click, ya existe valores validos para las variable

- solution

- path

- name

Por ello procedemos a guardarlo sin estar preguntando donde queremos guardarlo.

 

Cualquier consulta no duden en escribir.

Saludos cordiales

Save As adhoc


adhoc, en la versión community no tiene botones guardar o guardar como, por ello cuando se requiere abrirlo en una ventana individual, no es posible actualizarlo o crear otro a partir de ello

pero estos magníficos plugins disponen de un api de integración para este cometido (saiku y adhoc), después explicare en otro post a cerca de saiku.

 

por hora veamos algunos escenario con la integración de adhoc con un proyecto web.

En muchos casos necesitamos integrar pentaho en nuestra aplicación web, pero como lo hacemos si no queremos incluirlo al BA SERVER, como un iframe o como una aplicación independiente

entonces insertamos en un iframe  /pentaho/content/saiku-adhoc/web/index.html?biplugin=true, pero si queremos administrar estos reportes desde nuestra aplicación se nos complica la cosa

y solo podremos ver los reportes guardados y creados desde el BASERVER.

 

hoy vamos a dar las pautas necesarias para aquellos que quieran integrarlo en su aplicación web.

 

para comenzar tanto saiku como adhoc tiene un plugin de integración que se encuentra en la ruta:

\pentaho-solutions\system\saiku-adhoc\web\js\adhoc\plugins\BIServer\plugin.js

 

pero veamos en funcionamiento de adhoc.

  adhoc

 

y veamos la parte mas importante del archivo anteriormente mencionado.

var puc = {
    allowSave: function(isAllowed) {
       

        if(top.mantle_initialized !== undefined && top.mantle_initialized &&
            top.parent.enableAdhocSave ) {
            if (window.ALLOW_PUC_SAVE === undefined || ALLOW_PUC_SAVE) {
                top.parent.enableAdhocSave(isAllowed);
               
            }
        }
    },
   
    refresh_repo: function() {
        if(top.mantle_initialized !== undefined && top.mantle_initialized) {
            top.mantle_refreshRepository();
        }
    },
   
    save_to_solution: function(filename, solution, path, type, overwrite) {
       
        var self = this;
       
        var query = Application.tabs._tabs[0].content.query;
        query.action.get("/json", {
            success: function(model, response) {
               
                var queryToSave = jQuery.parseJSON(response.json);

                queryToSave.maxClientSeq = query.workspace.idCounter;
               
                var savedQuery = JSON.stringify(queryToSave, null, ' ');
               
                (new SavedQuery({
                    name: filename,
                    newname: query.get('name'),
                    json: savedQuery,
                    solution: solution,
                    path: path,
                    action: filename,
                    overwrite: overwrite
                })).save({},{
                    success: function() {
                        puc.refresh_repo();}
                });
            }
        });
    }
};

 

como podemos observar hay tres metodos: allowSave,refresh_repo y save_to_solution

- allowSave : esta tiene una función principal y es la encargada de notificar a la pagina que contiene al iframe embebido, siempre en cuando la pagina tenga una variable mantle_initialized

-  refresh_repo : esta función también hace un llamado al pagina que contiene el iframe notificando que el reporte fue guardado y que refresquen el repositorio

- save_to_solution: aquí recibimos los parámetros de la pagina que contienen al iframe, el cual nos enviar los parámetros siguientes:

  • solution
  • path
  • name
  • write

 

en un .html debemos definir un iframe con src=”/pentaho/content/saiku-adhoc/web/index.html?biplugin=true” para cargar el adhoc

una vez definida creamos un archivo javascript que contenga las siguientes funciones.


/**
* JS Integration, interaccion con js iframe content report.
*
*/

var mantle_initialized = true;
var lastMessage;
/**
*
* @param {type} contentEdit
* @returns {undefined}
*/
function enableContentEdit(contentEdit) {
    console.log("enableContentEdit : " + contentEdit);
}
/**
*
* @param {type} contentEdit
* @returns {undefined}
*/
function setContentEditSelected(contentEdit) {
    console.log("setContentEditSelected : " + contentEdit);
}

/**
*  EN ESTA FUNCION ADHOC NOS DICE QUE YA SE PUEDE GUARAR ESTE REPORTE

* @param {type} adhocSave
* @returns {undefined}
*/
function enableAdhocSave(adhocSave) {
    console.log("Call : enableAdhocSave ->  " + adhocSave);
    if (adhocSave) {
        /**
         * Mostrar Boton Guardar y Guardar como
         */
    } else {
        /**
         * Ocultar Boton Guardar y Guardar como
         */
    }
}
/**
* ADHOC NOS NOTIFICA PARA REFRESCAR EL REPOSITORIO
* @returns {undefined}
*/
function mantle_refreshRepository() {
    console.log("Call refresh Tree");
}

/**
* ADHOC  NOS ENVIA UN MENSAJE SI SE PRODUJO UN ERROR AL GUARDAR EL REPORTE

* @param {type} title
* @param {type} details
* @returns {undefined}
*/
function mantle_showMessage(title, details) {
    lastMessage = title + ": " + details;
    console.log("mantle_showMessage Title : " + title + ", Detail: " + details);
}

 

ahora procedemos hacer una corrida, supongamos que inicializamos el iframe, y creamos nuestro reporte, una vez haya datos en el reporte, adhoc ejecutara la función ALLOWSAVE

y si el usuario desea guardar tendrá que seccionar una ubicación del repositorio y un nombre que desea darle al nuevo reporte

tree

 

Una vez que el usuario haya seleccionado la ubicación correspondiente procedemos a preparar estas variables

  • var solution
  • var path
  • var name
  • var write (true si el usuario selecciono un reporte del repositorio y desea sobrescribirlo)

con estos valores ya podemos decirle a ADHOC, que guarde nuestro reporte y ejecutamos el siguiente javascript

en este caso el iframe que contiene al adhoc es el siguiente

<iframe name="adhoc" ..

 

window.frames["adhoc"].gCtrlr.repositoryBrowserController.remoteSave(name,solution,'/' + path, null, write);

 

con esto se ejecutara la funcion remoteSave de plugin.js y esta enviara los parametros aa puc.save_to_solution(name,solution,path,null,write);

después de guardarlo adhoc nos notificara a

/**
* Refrescar el arbol
* @returns {undefined}
*/
function mantle_refreshRepository() {
    console.log("Call refresh Tree");
}

 

y en nuestro .html refrescaremos el repositorio en el cual se encontrara el archivo guardado.

 

pentaho

Cualquier consulta no duden en escribir.

Saludos cordiales

22/01/2015

Interfaz Movil CDE


En muchos casos queremos que nuestra interfaz de Pentaho CDE, soporte dispositivos móviles, ya que nos ahorrarían gran parte del trabajo

Quiero compartirles un diseño que realice integrando Bootstrap, como sabrán tiene todos los CSSs, necesarioa para ser resizable

 

Lo único que tiene que hacerse conocer las “Clases CSS” necesarios según la documentación Panels de Bootstrap

para que forme los cuadros del dashboard.

 

Ahora nos bajamos el archivo del tema y lo colocamos en un directorio como este biserver-ce\pentaho-solutions\Dashboard\theme\

Download Theme Movil CDE

 

El resultado que se vera al implementar la interfaz seria:

 

Para Movil

image

 

Para PC

 image

 

Podemos construir interfaz, de cualquier estructura guiándose la documentación de bootstrap, e integrando con los tgas de CDE.

 

Ejemplos.

image

 

Patrón de referencia.

 image 

 

 

Escudriñar bien el archivo de ejemplo para hacer mas implementaciones.

 

Versión de BA Server 4.5

 

Si el ejemplo No se visualiza, actualizar la url de los recurso en el CDE. (En caso de colocar en otro directorio)

 

Espero puedan utilizarlo y sacarle provecho, Saludos.

25/10/2014

Pentaho sobre Mysql



Cuando descomprimimos el server de pentaho, este viene por defecto con un DB HSQLDB, para ejecutar datos de pruebas y todo lo demás, Pero cuando queremos darle un mejor uso y potencia, es recomendable cambiar de gestor de base de datos.

En esta entrada voy a configurar los archivos necesarios para que pueda correr sobre Mysql,



Los siguientes archivos a modificar son:


  1. hibernate-settings.xml y mysql5.hibernate.cfg.xml  ubicados en /bi-server/pentaho-solutions/system/hibernate.

  2. applicationContext-spring-security-hibernate.properties y applicationContext-spring-security-jdbc.xml ubicados en /bi-server/pentaho-solutions/system

  3. context.xml ubicado en /bi-server/tomcat\webapps\pentaho\META-INF


Ahora vamos a cambiar el contenido de cada uno de esos archivos quedando de la siguiente forma:


hibernate-settings.xml

image


mysql5.hibernate.cfg.xml 

image


     applicationContext-spring-security-hibernate.properties


image

 applicationContext-spring-security-jdbc.xml

En este caso solo modificaremos una sección del archivo.

image

Una vez configurados los archivos dentro de /pentaho-solutions, configuramos el ultimo archivo faltante.


 context.xml

image



        Listo, Actualizados los 5 archivos ya podemos decir que nuestro servidor de pentaho bi, podra correr sobre Mysql.

   

  No olvidarse de agregar el jar  mysql-connector-java-5.1.17.jar   en  /bin de Tomcat y no se olviden de crear 3 bases de datos, pentaho_server,pentaho_quartz y sampledata

Para tener datos demos en la db, pueden ejecutar el script que esta en bi-server/data/mysql, allí están conexiones, usuarios y roles para comenzar a utilizar el servidor de pentaho bi.

Suerte a todos….

24/10/2014

Ejecutar .PRPTs desde java


 

Q tal, hoy voy a explicar como podemos integrar los informes de Pentaho report designer, desde nuestro proyecto java,  en el desarrollo java conocerá IREPORT,  un magnifico componente para desplegar nuestros reportes en proyectos java.

 

Pero en el mundo de Business Intelligence hay herramientas muy buenas sobre todo Open Source,de uno o muchas empresas de BI, en este caso vamos a integrar Pentaho PDR, y  lo vamos hacer de la manera mas fácil, solo basta de bajarse los jars necesarios e incluirlo en nuestro proyecto, y con una configuraciones simples estaremos ejecutando PDR, en nuestro proyecto, además que se puede pasar parámetros, conexión, y los formatos de salidas, tal como se hace con IREPORT.

 

<!-- PDR –>

<dependency>
            <groupId>pentaho-reporting-engine</groupId>
            <artifactId>pentaho-reporting-engine-classic-core</artifactId>
            <version>3.6.0-GA</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>pentaho-reporting-engine</groupId>
            <artifactId>pentaho-reporting-engine-classic-extensions</artifactId>
            <version>3.6.0-GA</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libbase</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libdocbundle</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libfonts</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libformat</artifactId>
            <version>1.2.4</version>
        </dependency>   
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libformula</artifactId>
            <version>1.2.3</version>
        </dependency> 
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libformula-ui</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libloader</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>librepository</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libpixie</artifactId>
            <version>1.2.3</version>
        </dependency>       
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libserializer</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libsparkline</artifactId>
            <version>1.2.10</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libxml</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>pentaho-library</groupId>
            <artifactId>libswing</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
        </dependency>       
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext-rtf</artifactId>
            <version>2.1.7</version>
        </dependency>
        <dependency>
            <groupId>poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.0.1-jdk122-final-20071014</version>
            <scope>compile</scope>
        </dependency>

<!-- /PDR-->

 

Agregan las siguientes dependencias a su proyecto y se descargaran todos los jar necesarios para la ejecución del PDR.

El siguiente paso es diseñar el informe para la demostración.

image

 

Ahora demos de ubicarlo al archivo en mi caso esta en:

D:\Herramientas BI\pdr\Consultas\demo.prpt

Para ejecutar un reporte pdr, crearemos un servlet.

En el Init del servlet agregar este codigo:

image

Le decimos que al inicializar el servlet también inicializamos una instancia del motor PDR.

 

Ahora solo basta con agregar este código al  ProcessRequest del servlet quedando de la siguiente forma.

 

image

 

Como verán se especifica la ruta absoluta del archivo, claro para la demostración se esta realizando de la forma mas básica, ya después podrán implementarlo como se debe,pero recalco solo ese código es necesario para ejecutar un reporte PDR desde un proyecto java.

 

Al ejecutar el servlet, el resultado se vera así.

image

 

Como se podrá ver, no es compleja la integración de herramientas que facilitan la ejecución de reportes en java.

 

Como comentaba en entradas anteriores, este tipo de herramientas no solo sirve cuando se tiene un Datawarehouse, o Datamarts en la empresa, también puedes preparar informes directamente desde tu DB, lo que facilita enormemente la labor del personal de TI, al momento de realizar reportes o informes requeridos.

Suerte a todos.

06/07/2014

Explorar Pentaho desde Android





Hoy voy a darles un dato, que encontré cuando buscaba un cliente de Pentaho para dispositivos mobiles, para Android específicamente.



Muchas veces, desplegamos Pentaho, en una empresa, y el cliente te dice, "se puede ver los reportes desde mi android ", es entonces piensas que para ello, tienes que adquirir la versión con suscripción de Pentaho y el costo del proyecto se elevaría peor aun si no estaba considerado en la fase inicial del proyecto.



En este tipo de escenarios, antes de desarrollar uno propio, encontré en la web unas aplicaciones clientes de Pentaho, creadas para android por una empresa que ya llevan años en este mercado.



La aplicación es: "Cliente Pentaho Movil", creada por "Grup ICA" , lo pueden descargar desde Google Play.  unas imaganes del aplicativo.

















Para conectarse, solo tienes que apuntar a su servidor de Pentaho, con las credenciales, y podrán explorar la estructura de carpetas, como en un navegador de PC. exploren y verán que tiene mucha funcionalidad.



Previa instalación les va solicitar instalar flash, es necesario para que pueda funcionar este aplicativo.



Espero haberles ayudado en algo.

Hasta el próximo post, saludos.









03/06/2014

Pentaho Report Desing





Bienvenidos, voy a mostrarles como aprovechar una herramientas de reporting, para preparar informes al instante, sin importar el origen de los datos,(excel, Mysql, Oracle, Mssql server, Metadatos,etc).



El personal de sistemas en las empresas están propensos a ser solicitados ciertos informes, reportes de diferentes áreas para fines distintos, claro si ese reporte no esta en los sistemas que utilizan frecuentemente, es decir informes exclusivos para ciertas presentación u otro.



Es allí donde el personal de sistemas, se pone en marcha con las querys, para extraer la data y hacer una presentación lo mas módica posible al agrado del personal solicitante.



En un vídeo voy a  mostrarles las bondades de una herramienta que yo uso frecuentemente para hacer mis informes customizados y para proyectos de Business Intelligence.






Pentaho Report Designer  o PRD ,  es una herramienta Open Source que forma parte de la Suite de Pentaho, pueden bajarlo en http://sourceforge.net/  y buscarlo como Pentaho Reporting






Sub reportes

                                         



Espero haberles ayudado el algo.

Hasta el próximo vídeo. saludos.