Birt
Visita este artículo en http://www.estadobeta.com/2007/12/03/birt/
Por vladimir en Desarrollo, artículosSistema de reportes para aplicaciones web.
Todo sistema tiene como finalidad final entregar un resultado. En un buen numero de casos, el programador requiere construir reportes…si, los tan odiosos reportes. En web la cosa se complica, ya que no existen herramientas agradables para ello. Las librerías existentes conocidas diagraman todo por código, haciendo el diseño un proceso laborioso, tedioso y lento. Lo ideal sería que existiera un software tal que diagramara el reporte de forma agradable, digamos tipo Dreamweaver, con ventanitas e iconos y literalmente ir dibujando tablas y demases.
Business Intelligence and Reporting Tools, para los amigos BIRT, es un software con esas tan deseadas características. Funciona en dos modos:
- el diseñador (birt-designer): una interfaz visual para Eclipse el cual se tiene varias similitudes con Dreamweaver. Pinchando y arrastrando objetos, vas dibujando el reporte deseado. Aquí se establecen conexiones a BD, SQL, parámetros, scripts, etc. y todo queda en un archivo XML con extensión .rptdesign
- el visualizador (birt-viewer): funciona bajo un servidor de servlets o paginas jsp como Tomcat. Este toma en tiempo de ejecución el archivo .rptdesign y lo muestra en varios formatos: html, pdf, cvs, excel. Este puede trabajar perfectamente con cualquier otro lenguaje, digamos php, y sólo has de llamar a una URL para que esta haga el trabajo de crear el reporte. La URL es del tipo:http://midominio:puertotomcat/birt-viewer/run?__report=report\mireporte.rptdesign¶metro1=valor1¶metro2.
Así cuando quieras descargarlo tendrás que descargar ambos, ya que son uña y mugre. Uno funciona offline para diseño en tu pc, y el otro funciona en el servidor. El designer lo puedes descargar sólo, como plugin para una instalación ya hecha de Eclipse, o derechamente Eclipse completo con BIRT Designer incluído.
tip: si ya eres usuario de Eclipse, puede que te interese mucho un servicio online para elegir los plugins que deseas incluir en tu Eclipse.
La instalación de Designer es simple, pero la del Viewer puede ser escabrosa. En Windows puede que menos, pero en linux y despues de harto buscar, encontre algo bastante simple.
ATENCIÓN: BIRT corre bajo Tomcat (digamos java) y el diseñador en Eclipse, pero eso no indica que debas programar en java. Nooo, no señor. El diseñador es eso, diseño. Y el viewer hay que verlo como un ejecutable que convierte en tiempo real lo creado por el designer. Así entonces, podrás llamar al viewer desde cualquier entorno de programación, ya que trabaja “solito”.
Yo, por ejemplo, lo utilizo desde PHP. Creo un formulario php con los parámetros necesarios para el reporte, y cuando doy submit, lo mando a una pagina (URL) alojada bajo Tomcat (en un puerto que no choque con Apache claro). Lo toma birt-viewer y me lanza el resultado como un PDF a descargar (el reporte). cool no? más información de como se usa desde php desde aqui.
BIRT Designer
Bases de datos
Tanto designer como viewer se pueden conectar a casi cualquier base de datos, en mi caso utilizaré la archi conocida MySQL. Su uso lo hice a través de JDBC (el ODBC de Java) de MySQL, el cual se instala en el lugar que quieras, pero lo debes agregar en el administrador de conectores interno, al momento de crear un DataSource que es indispensable para todo lo demás.
Su creación es simple: botón derecho sobre los DataSource, y eliges Add New Data Source, eliges el tipo JDBC, el nombre, el driver com.jdbc.driver, la url del tipo jdbc:mysql://127.0.0.1/mibasededatos, el usuario y la contraseña.
Explorador de Datos

Los DataSources son los necesarios para las conecciones a las BDs. Puedes tener varios de ellos.
Los DataSets son los que almacenan las SQL (si es que procede), sus parametros, sus filtros, etc.
Los Report Paramaters son los parametros que le envías al reporte en tiempo de ejecución.
Los Data Cubes son una forma de crear datos cruzados (uso avanzado).
Al comienzo te irás por lo simple, crearás el DataSource, luego el DataSet (sql) y listo. Pero a poco andar querras crear un reporte más complejo y verás que se “hacen chicas” las alternativas del designer y querrás cambiar la sql a tu gusto en tiempo de ejecución. Aunque lo más probable es que exista “the BIRT way” para hacerlo, también es posible cambiar por completo la sql a tu gusto en tiempo de ejecución. Para ello haz de crear un parámetro, digamos parSql, y ahi vendrá la sql que haz construido. Luego seleccionas tu DataSet y cambias de a Scripts, y en el evento BeforeOpen escribes:
this.setQueryText(params["parSql"]);
Esto hará que antes de abrir el DataSet cambiará la sql del mismo por la que le pasas como parametro (desde PHP hay que tener ciertas consideraciones). Si es un script, y se parece mucho a JavaScript, y es porque ES javascript y así puedes contralar muchos aspectos del reporte en tiempo de ejecusión. Incluso se podría dibujar completo el reporte en base a scripts en tiempo de ejecusión. Esto es así ya que el archivo resultante está en formato XML el cual es completamente editable.
Paleta de Herramientas

Como verás en la imagén existen herramientas muy didácticas para crear el reporte. Estas cambian a medida que cambias la página visual de BIRT (Layout para el diseño del detalle, Master Page para el encabezado y pie, Script para escribir codigo, XML para ver la fuente resultante y Preview…obvio
).
El diseño se basa en tablas HTML las cuales puedes ir anidando tal cual se hace en DreamWeaver. Bordes, Fuentes, Negritas, Cursivas son de fácil adaptación y uso. Cada una de ellas, incluyendo paginas, encabezados, pies, detalles, etc, tiene propiedades. En cada una de ellas, si procede, también verás esas características (negritas, cursivas, etc) y otras más, como filtrado, enlaces, nombres, etc.
Estas herramientas se trabajan en 4 herramientas básicas:
- Table: forma del típico reporte con detalle, cabecera de tabla y pie de tabla.
- List: igual que table, pero sirve para hacer detalles de detalles (o reportes de reportes).
- CrossTab: ¿te acuerdas de tablas dinámicas de excel? igualito igualito.
- Chat: para hacer gráficos de barras, lineas o tortas (pie).
Tambien existe el concepto de grupos, con los cuales puedes agrupar por un campo de tu sql. Así, por ejemplo, podrías calcular lo vendido por productos. Los grupos tambien poseen encabezado y pie.
BIRT Viewer
Asumiendo que instalaste bien Viewer, deberás instalar jdbc en el servidor. En mi caso lo instalé en:
ubicaciondetomcat/webapps/birt-viewer/WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc/drivers
Suponiendo que está en localhost y bajo el puerto 8080, y que tienes un reporte de nombre mireporte, deberás copiarlo en:
ubicaciondetomcat/webapps/birt-viewer/report
Así, bastará lo siguiente para ver los primeros resultados:
http://localhost:8080/birt-viewer/run?__report=report\mireporte.rptdesign
run es uno de los modos de ejecución el cual permite la ejecución y su visualización directa. __report es uno de los parámetros predefinidos que indica la ubicación del reporte a ejecutar. Existen otros parámetros que modifican la visualización: que la salida sea pdf, html, doc, ppt, etc; cambiar los modos: run, preview, frameset. este último es toda una interfaz web integrada. etc.
Por si aun te quedan dudas, puedes ver un video bastante explicativo el cual me imagino aclara la pelicula.
- Servicios:
- Comentarios RSS
- Menear!
- Del.icio.us

12/12/2007 at 4:28 pm
Que buen programa siempre espere algo similar a dreamweaver, yo soy diseñador gráfico y me interesa cada vez más la programación para sitios webs, onda programación es chino para mi, con este software creo q se me hara más facil el manejo de css, php, html, etc.. ahora estoy aprendiendo Joomla! y se me ha hecho un alibio desarrollar sitios web html, igual paso a modificar templates css y html de joomla en el dreamweaver para la identidad del cliente aunke la modificación no es desde cero sino de un template gratuito, pero este programa lo kiero probar, aunke la instalacion esta media complicada.
Gracias por el dato Ismael saludos
12/12/2007 at 4:31 pm
Gracias M79. Los agradecimientos van a Vladimir, autor de este articulo
12/12/2007 at 5:03 pm
@m79:
como dice ismael, gracias.
un detalle si. según percibo de tus palabras, birt no es para hacer diseñar html ni css. es para hacer reportes tipo pdf, excel, y demases.
saludos!
12/12/2007 at 10:03 pm
Ah sorry gracias por la aclaración taba super perdido, ahora cache mejor q es un reporte.
saben donde abran ejemplos on-line de reportes hechos con birt?
asi como para ver algo más didactico.
12/13/2007 at 7:41 am
@m79: no he visto ninguno en la página del proyecto. sólo videos demostrativos.
2/12/2008 at 7:39 am
[…] o una fecha válida. Después de muchos cabezazos frente al teclado llegué a la conclusión de que Birt (en el fondo es Java el que reclama) se caía con el valor de esta extraña […]
2/14/2008 at 4:12 pm
como hago la conexion entre eclipse birt y una funcion de mi base de datos
2/14/2008 at 4:13 pm
gracias por la ayuda
2/14/2008 at 4:38 pm
@mile: lo siento no he trabajado con funciones personalizadas en mysql. imagino (y supongo) que al hacer la conexión en un dataset te aparecerán, ya que aperecen todas las tablas.
ahora bien, muy superficialmente, no veo la necesidad de funciones personalizadas para hacer consultas (lease SELECTs). a lo mejor te refieres a funciones internas de mysql como las de strings y similares?
como sea, y hasta donde entiendo, es posible que dichas funciones el jdbc las deje pasar y el mismo recupere solo tuplas (que al fin y al cabo es lo que interesa). tendrías que probar.
4/11/2008 at 9:24 am
Yo he trabajado extensivamente con esta clase de cosas y te digo que BIRT es muy inmaduro comparado con los grandes (open source) Pentaho y Jasper Server, con los cuales puedes incluso añadir un análisis multidimensional de los datos en los reportes, o crear dashboards, etc.
Saludos!
toño.
4/22/2008 at 3:57 pm
veo que la conexion a la BD es a traves de drivers, habra alguna forma de cargar un dataset en el xml.rptdesign, o hacer el manejo de la BD con JDO o Hibernate, haciendo uso claro de un framework.
4/22/2008 at 4:26 pm
@Fer: aquí encontré algo, no mucho pero de algo sirve.
5/26/2008 at 11:21 pm
esta bueno esto pero necesito sabes si alguien ha hecho un reporte en birt con los crosstab programado en java ok me pueden contactar a travesde lizandro.rodriguez@reduc.edu.cu
se lo agradecere
12/3/2008 at 12:31 pm
Hola, está interesante tu POST… Una pregunta:
Cuando haces this.setQueryText(params[”parSql”]); en Script > beforeOpen , por donde pasas el valor parSql ???
Yo tengo una aplicación en PHP conectada con el BIRT, e intenté pasarle en parSql la consulta SQL completa…y hacer eso en el beforeOpen pero no me funcionó…
Espero tu ayuda…
Saludos ^.^
12/3/2008 at 12:33 pm
Cualquiera que pueda ayudarme por favor contactarme en: yenny.villalba@gmail.com
Saludos!!
12/3/2008 at 12:53 pm
@Yen:
params significa que es un parámetro del reporte. es decir, debes crear un parámetro de reporte llamado “parSql” (sin las comillas claro) con el botón derecho sobre la sección “Repor Parameters”. adicionalmente, yo lo dejo como “hidden” “is required” y “do not echo input”.
luego desde tu aplicación PHP debes llamarla como se explica aqui.
con eso y el comando que dices en el lugar que dices debiese funcionar.
12/3/2008 at 1:28 pm
@vladimir prieto:
Gracias por responder Vladimir.
Exactamente así lo estoy haciendo =S fíjate
$parSql = ConsultaSQL_que_no_colocaré_por_simplicidad_;-);
$fname_html = “C:/Reportes/BIRT_Reportes/file.rptdesign”;
$dest = “http://localhost:8080/birt-viewer/frameset?__report=”;
$dest .= $fname_html . “&parSql=” . urlencode($parSql);
Y en el file.rptdesign tengo un único parámetro llamado parSql,
en el beforeOpen de la sección Script hice: this.setQueryText(params[”parSql”]);
Pero no me funciona aún :’( Debo dejar en blanco la sección Query dentro de la configuración del DataSet??? Es lo único que se me ocurre…
Y luego como accedo al valor que me devuelve la consulta??? Yo lo estoy usando como [return] dentro de la tabla, donde return es lo que me devuelve la consulta SQL, por ejemplo:
SELECT columna FROM tabla AS return (…) ;
Gracias por la ayuda…
Espero otra respuesta
1/14/2009 at 11:53 am
Una consulta tengo problemas para visualizar un reporte hecho en BIRT sale como cuando cuando no se puede abrir una pagina web. Mi base de datos es slqserver 2005. Primea vez q veo este tipo de reportes. No se si hay algun puerto q deba habilitar unos dicen el 8080 lo hice pero nada. Tengo 2 servidores uno de aplicaciones y uno de Base de datos.
Si alguien puede ayudarme le estare muy agradecida.
1/14/2009 at 12:00 pm
@Mary:
1° te sugiero que veas la documentación de instalación de BIRT. es algo compleja.
en ella verás que debes instalar un servidor web como Tomcat (el que yo usé). por ello es que debes direccionar tu URL a la dirección de la configuración de Tomcat. si usaste el puerto 8080, pues ese debes usar, sino deberás ver/configurar un nuevo puerto para Tomcat.
6/3/2009 at 3:25 pm
Ayuda, necesito ver si alguien sabe cual sera el problema con la visualización de los reportes de BIRT en un servidor con un SO CentOS, ya que al ejecutarlos en diseño con eclipse me muestra datos diferentes a los del servidor.
Si alguien me puediera ayudar se loa gardeceria mucho.
Saludos
6/3/2009 at 4:01 pm
@fernando:
super extraño tu problema y los datos que entregas son super generales. pero intenta revisar lo siguiente (ordenados de por obvios):
- los datos entre tu equipo (eclipse) son los mismo que en el servidor?
- las versiones de BIRT (designer y viewer) son las mismas?
- las versiones del conector de jdbc son las mismas? que BD estás usando?
6/20/2009 at 12:43 pm
Hola, estoy empezando a trabajar con BIRT, sin embargo, no he logrado hacer un cross tab, he buscado muchisimo pero no hay nada que me ayude mucho…
Alguien me puede decir donde puedo encontrar un ejemplo de cross tab, ojala no tan basico, sino bien explicadito… o alguien conoce bien la forma en que un cross tab se usa o se hace…
De antemano Muchas gracias … Lo necesito bastante ojala me puedan ayudar
6/24/2009 at 2:18 pm
Hola Empeze a trabajar con birt y la verdad lo unico que logre es algo muy simple desde el plugin dentro de java, y para verlo lo vi desde el pre-visualizador y arrojandolo en la carpeta del runtime de birt dentro del tomtac.
Podrian decirme como hago para deployarlo junto con mi aplicacion javaweb? Lei por ahi que tengo que crear una carpeta platform y dentro una carpeta configuracion y plugin mas todas las lib (dentro de lib obvio), eso lo hice pero no se como llamarlo.
Podrian darme una mano? gracias y saludos
7/8/2009 at 6:28 am
Hola a todos.
Este año hago mi proyecto de fin de carrera y he elegido un egenrador de informes con Java + BIRT utilizando Eclipse. Este tema es nuevo para mí. Hoy mismo he empezado a estudiar un poco el tema y parece bastante interesante. Vladimir, he visto que eres un auténtico experto en el tema, jeje! Me gustaría estar en contacto contigo por si me surgen dudas y saber si me podría echar una mano si me estanco en algún momento…
Un saludo y mil gracias por adelantado!!
5/17/2010 at 2:30 pm
Estoy haciendo un reporte en birt, los datos los saqué de un excel convertido a XML. Mi duda es como y donde hacer la consulta sql o algún filtro para poder mostrar sólo los datos necesarios en el reporte. Muchas Gracias
5/25/2010 at 7:13 pm
hola, estoy empezando en esto de los reportes ya hice el diseño de mi reporte y tambien ya agrege mi base de datos, mi pregunta es como puedo mostrar los campos en mi reporte dependiendo de un campo que seleccione de un formulario o algo asi, o tambien si por medio de una clase puedo manipular los objetos del diseño del reporte.
saludos
5/26/2010 at 9:08 am
@Luis:
veo dos formas:
1.- desde tu página que llama al reporte, defines si llamas al reporte1 o al reporte2 (o al reporteN) dependiendo del campo que se selecciones.
2.- cada objeto visible en el reporte tiene una propiedad llamada “visibility” que de forma predeterminada, cuando se activa, viene en “true”.
lo único que tendrías que hacer, es mostrar el/los campos que deseas a través de esta propiedad, dependiendo del valor del campo que mandes COMO PARÁMETRO. algo así:
expression: params[”elcampo”].value == “el valor que deseas”
5/26/2010 at 4:07 pm
hola, gracias por la ayuda anterior pero me gustaria que me ayudaras con otra pregunta, como puedo conectar o llamar el reporte desde la aplicacion java.
saludos
5/26/2010 at 4:43 pm
@Luis:
hay dos formas de ejecutar y/o obtener tu reporte:
1.- a través de web java usando, por ejemplo, tomcat. para esto es tan simple como apuntar al .rptdesign + ciertos parámetros. búscalos en la documentación oficial.
2.- existe otra forma, muy poco comentada: via comandos. está explicado aquí.
espero te ayude, saludos
5/26/2010 at 6:52 pm
hola
ya pude resolver la pregunta anterior, ahora tengo una duda sobre el filtrado de campos.
tengo una tabla 5 registros, realice un script para que seleccione alguna opcion y en base a la opcion me filtre los campos de esa tabla, sabe como puedo realizar ese filtro, o en donde puedo conseguir informacion sobre eso.
saludos gracias
5/26/2010 at 7:08 pm
@Luis:
si es una tabla (que proviene de una SQL de un DataSet), y tal como dije antes, lo que puedes hacer es mandar por parámetros en la misma url que cuando llamas al .rptdesign.
luego, en la SQL pones algo como:
SELECT *
FROM mi_tabla
WHERE el_campo LIKE ?
al hacer esto, en el mismo DataSet te aparecerá un item en la sección Parameters del DataSet. doble clic al parameters, y lo asocias al parámetro del reporte (Report Parameters) “el_filtro”, por dar un nombre.
el efecto será así:
tienes tu aplicación (página web?) que usa el select que permite elegir el filtro. llamas al .rptdesign con el parámetro “el_filtro=valor_del_filtro” y el reporte dinámicamente se filtrará con los datos que quieres.
5/27/2010 at 5:17 pm
hola
Mi problema es el siguiente:
pegue una tabla pero no puedo agregar campos de los dataset que sean de diferentes tablas.
1.- Como puedo agregar en un data set campoos de diferentes tablas.
2.- o ya sea arrastrar campos de diferentes tablas de la base de datos a mi tablas.
para que al darle preview me muestre las asociaciones de los campos insertados.
hasta ahora solo lo eh podido hacer con campos de la misma tabla pero quisiera realizarlon con diferentes campos de tablas de la base de datos diferentes de la base de datos
5/27/2010 at 5:25 pm
@Luis:
en general eso no se puede!
pero prueba así:
arrastra la tabla2 (digámosle así), dentro de la tabla1 en el reporte. ahora intenta arrastrar los campos de la tabla2 que están en el reporte, hacia “afuera” de ella.
otra alternativa es hacer una SQL con los datos que necesitas.
saludos!
5/27/2010 at 8:21 pm
ya pude realizar lo sigueinte solo le hice un un query al data set, seleccione el data set-> click derecho ->edit y en la opcion query.
opcion 1
select *
from tabla1, tabla2,……
con esto me trae todos los campos de las tablas
opcion 2
select tabla1.campo,tabla2.campo
from tabla1, tabla2
AHORA TENGO UNA PEQUEÑA DUDA
COMO LE HAGO PARA ACTIVAR LA RELACION ENTRE TABLAS O DONDE LA PUEDO VER.
5/28/2010 at 8:55 am
@Luis:
me pillaste, no se que quieres decir con eso.
5/28/2010 at 11:06 am
Hola
lo que pasa es que cuando inserto en el dataset campos de una tabla de la bse dedatos y luego las arrastro a una tabla pues cada campo se relaciona con su respectivo campo, pero ahora que pude insertar en mi dataset diferentes campos de diferentes tablas de la base de datos cuando las arratstro a mi tabla no se relacionan los campos entre si, y eso que mis campos que inserte estan relacionados en mi base de datos, no se si yo tengo que hacer la relacion de mi base de datos manualmente ó haya una opcion para que esos campos se relacionan como ya estan en la base de datos.
saludos
5/28/2010 at 7:32 pm
hola,
gracias por las repuestas anteriores me han sido de utilidad, solo estoy atorado como desde una aplicacion java, puedo mandar a llamar a el reporte y que de preferencia me lo habra en pdf,solo quisiera saber que herramientas utilizar si jsp o algo asi, y tambien si el archivo xml me puede ayudar para esta conexion a la aplicacion java.
saludos
8/23/2010 at 2:31 pm
Hola,
Tengo problemas con el despliegue de los reportes de BIRT en internet Explorer 7, y el 8 tambien.
En la version 6.0 funciona perfectamente.
Me puedes ayudar con esto por favor.
8/23/2010 at 4:57 pm
El problema básicamente consiste en que no despliega los reportes pdf generados.