sábado, 29 de noviembre de 2008

Usar un gráfico personalizado en BI Publisher

En este post les comparto una solución que encontré cuando intentaba colocar un gráfico en un reporte de BI publisher pero la estructura de los datos no me permitía usar fácilmente el wizard que este nos brinda.

La estructura de mi dataSet, que exporté de BI Publisher e importé en mi Word, es plana, es decir no hay estructuras anidadas. Y necesitaba comparar gráficamente algunos datos que representaban un registro de la muestra, contra otros datos que representaban el promedio del grupo al que pertenecía el registro, pero todos estos datos venían en el mismo nivel del dataSet.

Esta es una parte de la estructura del dataSet:

<ROWSET>
<ROW>
<ID>348</ID>
<CLIENTE>Oracle Direct</CLIENTE>
<TODAY>02/12/2008</TODAY>
<SECTOR>Tecnología</SECTOR>
<NUMEMP>220</NUMEMP>
<FACTURACION>999999</FACTURACION>
<CONTACTO>Carlos Sarmiento</CONTACTO>
<FECHA>2008-08-01T00:00:00.000-05:00</FECHA>
<PAIS>Colombia</PAIS>
<CREATEDBY>Pedro Gomez</CREATEDBY>
<MUESTRA>16 empresas del sector, entre 200 y 300 empleados</MUESTRA>
<HA>4</HA>
<DR>6</DR>
<PORTAL>6</PORTAL>
<CONTENT>4</CONTENT>
<BI>8</BI>
<EMAIL>5</EMAIL>
<SOA>6</SOA>
<SECURITY>6</SECURITY>
<MANAGEABILITY>9</MANAGEABILITY>
<OBSOLESCENCE>7</OBSOLESCENCE>
<COUNT_R2.ID_>16</COUNT_R2.ID_>
<DIFFHA>1</DIFFHA>
<DIFFDR>2.6</DIFFDR>
<DIFFPORTAL>1.9</DIFFPORTAL>
<DIFFCONTENT>.7</DIFFCONTENT>
<DIFFBI>5.1</DIFFBI>
<DIFFEMAIL>.5</DIFFEMAIL>
<DIFFSOA>2.9</DIFFSOA>
<DIFFSEC>2.1</DIFFSEC>
<DIFFMAN>5.1</DIFFMAN>
<DIFFOBS>1.4</DIFFOBS>
<AVGHA>3</AVGHA>
<AVGDR>3.375</AVGDR>
<AVGPORTAL>4.063</AVGPORTAL>
<AVGCONTENT>3.313</AVGCONTENT>
<AVGBI>2.875</AVGBI>
<AVGEMAIL>4.5</AVGEMAIL>
<AVGSOA>3.063</AVGSOA>
<AVGSEC>3.867</AVGSEC>
<AVGMAN>3.867</AVGMAN>
<AVGOBS>5.6</AVGOBS>
</ROW>
</ROWSET>

Por cada fila del RowSet se expediría un documento con la comparación del registro(las columnas HA, DR, PORTAL, CONTENT, BI, etc.) contra el promedio del grupo (AVGHA, AVGDR, AVGPORTAL, AVGCONTENT, AVGBI, etc..), pero al usar el wizard de inserción de gráfico no nos es posible expresar ese requerimiento, ya que maneja valores y series lo cual no puedo hacer corresponder a mi estructura de datos plana.

image

Así que requerimos modificar a mano los valores a mostrar en nuestra gráfica. Esto lo hacemos así:

  1. Insertamos una imagen cualquiera en el sitio que queremos desplegar la gráfica personalizada.
  2. Ajustamos el tamaño de dicha imagen ya que este será el tamaño total de nuestra gráfica.
  3. Hacemos clic derecho sobre la imagen y vamos a la opción de formateo de la imagen (Format Image)
  4. Allí nos vamos al tab de texto alternativo (Alt Text)
  5. Aquí podemos colocar y modificar a nuestro antojo la estructura xml que representa la gráfica que queramos situar. En mi caso:

chart:
<Graph graphType="RADAR_LINE" depthAngle="150" depthRadius="8" pieDepth="130" pieTilt="120" seriesEffect="SE_AUTO_GRADIENT">
<Title text="Comparacion con la media" visible="true" horizontalAlignment="CENTER"/>
<LocalGridData colCount="10" rowCount="2">
<RowLabels>
<Label><xsl:value-of select="//CLIENTE"/></Label>
<Label>Empresas del sector</Label>
</RowLabels>
<ColLabels>
<Label>Alta disponibilidad</Label>
<Label>Continuidad de Negocio</Label>
<Label>Intranet / Extranet / Portales</Label>
<Label>Gestión de Contenido</Label>
<Label>Inteligencia de Negocio</Label>
<Label>Email y Colaboración</Label>
<Label>Integración y SOA</Label>
<Label>Seguridad</Label>
<Label>Manejabilidad</Label>
<Label>Adecuación Tecnológica</Label>
</ColLabels>
<DataValues>
<RowData>
<Cell><xsl:value-of select="//HA"/></Cell>
<Cell><xsl:value-of select="//DR"/></Cell>
<Cell><xsl:value-of select="//PORTAL"/></Cell>
<Cell><xsl:value-of select="//CONTENT"/></Cell>
<Cell><xsl:value-of select="//BI"/></Cell>
<Cell><xsl:value-of select="//EMAIL"/></Cell>
<Cell><xsl:value-of select="//SOA"/></Cell>
<Cell><xsl:value-of select="//SECURITY"/></Cell>
<Cell><xsl:value-of select="//MANAGEABILITY"/></Cell>
<Cell><xsl:value-of select="//OBSOLESCENCE"/></Cell>
</RowData>
<RowData>
<Cell><xsl:value-of select="//AVGHA"/></Cell>
<Cell><xsl:value-of select="//AVGDR"/></Cell>
<Cell><xsl:value-of select="//AVGPORTAL"/></Cell>
<Cell><xsl:value-of select="//AVGCONTENT"/></Cell>
<Cell><xsl:value-of select="//AVGBI"/></Cell>
<Cell><xsl:value-of select="//AVGEMAIL"/></Cell>
<Cell><xsl:value-of select="//AVGSOA"/></Cell>
<Cell><xsl:value-of select="//AVGSEC"/></Cell>
<Cell><xsl:value-of select="//AVGMAN"/></Cell>
<Cell><xsl:value-of select="//AVGOBS"/></Cell>
</RowData>
</DataValues>
</LocalGridData>
</Graph>

Como vemos este código acepta la sintaxis xsl para extraer de la estructura de datos los valores necesarios y configurar fácilmente las series, las etiquetas, y los respectivos valores de cada una de las series.

El resultado final quedaría así:

image

De esta forma podríamos manipular cualquier gráfico dentro de un reporte de BI Publisher para personalizarlo segun nuestros requerimientos. Saludos.

No hay comentarios: