martes 18 de agosto de 2009

Pentaho - Crear Pie Chart

Una vez creado el reporte, para mi ejemplo ventas por proveedor agrupadas por División, queremos desplegar las divisiones en una gráfica Pie:

a. Agrega el chart desde el panel izquierdo al reporte. Por lo general va al inicio o al final de reporte "Report Header" o "Report Footer"



b. Edita el grafico, elige el tipo de grafico "Pie" del panel izquierdo. Aquí lo más importante es definir los valores y las etiquetas a mostrar, esto se hace en el panel derecho, como muestra la grafica



Deja el "Summary Only" en False, aún no se como funciona pero sí se que en mis reportes no muestra datos. Ahora en "Value Column" debe ir la columna que tiene los valores numéricos, y en "Series Column" los valores de los nombres; en mi caso serían los nombres de las divisiones.

Listo!!.. ya tienes un sencillo pie, a medida que vaya aprendiendo ire colocando más cosas sobre los gráficos.



miércoles 12 de agosto de 2009

PENTAHO - COMO PASAR PARAMETROS A UN REPORTE

Hola... escogi como visor de mi solucion OLAP a pentaho, me parece una excelente solucion Open Source, extremadamente amigable para usuarios finales.

Lo unico malo, es que no hay mucha documentacion y menos en español la wiki es buena (http://wiki.pentaho.com/) pero se queda pobre a la hora de hacer cosas complejas; esto me motivo a empezar a escribir pequeños articulos HOW-TO, para los novatos como yo.

Estoy usando las siguientes versiones de pentaho

- Server : biserver-ce-3.0.0-STABLE
- Report designer : prd-ce-3.0.0.37222.RC2 (ojo no uso el citrus porque no es compatible con el server 3.0.0 STABLE, y obviamente al poner en produccion no quiero version Release Candidate RC en el motor)
- Design Studio : pds-ce-3.0.0.RC2


Empiezo esta serie con: COMO PASAR PARAMETROS A UN REPORTE


1. Abre el Report designer y crea tu reporte (esto lo puedes leer de la wiki http://wiki.pentaho.com/display/Reporting/Report+Designer )

Lo importante de aquí es que hay dos partes donde colocar los parámetros de entrada del reporte:
a. En el query del DataSource
b. En properties del DataSource

a. Abre el query del datasource y modifica el WHERE; en mi caso estoy pidiendo como parametros las fecha inicial y final. Queda algo así:

WHERE fecha between '${vFechaIni}' and '${vFechaFin}'


Observa que los parametros van primero con signo de pesos $ y entre llaves {}. De esta forma la consulta se ejecuta con los valores que el usuario eligio.

b. En el panel de Structure, dá clic derecho sobre "Data Sources" y elije "Add Properties Data source". Agrega 2 items:

Name Type Value
vFechaIni String vFechaIni
vFechaFin String vFechaFin

y OK. Estas properties son necesarias para la cabecera del reporte, para desplegar en textField las elecciones del usuario, Agrega dos textField al reporte, a uno en el Field Name ponle vFechaIni y al otro vFechaFin.

Los value del properties corresponden a los nombres de los parametros, los que son enviados desde el .xaction

Listo, termino la parte visual, si tu reporte y xaction ya existían recuerda publicar para que estos cambios tomen efecto.

2. Ahora abre el Design Studio, y crea el .xaction asociado al reporte anterior (tambien lo puedes leer en la wiki)

a. En el tab "2.Define Process" -> Panel "Process Inputs" Agrega un input String y llamalo vFechaIniXAC

b. En el panel "Process Actions", edita el "Secure Filter Description" (si no lo tienes, agregalo), agrega al "Prompt for" la variable del punto anterior.

c. En el "SQLLookupRule" en el query, ira el mismo query que pusiste en el datasource del report designer, y el where cambialo por:

WHERE f.fecha between '{PREPARE:vFechaIni}' and '{PREPARE:vFechaFin}'

Observa que aquí los parametros van entre llave {} y antecedidos por PREPARE:

d. Por último en "Process Actions" -> "report", en la sección "Report Parameters" agrega las variables vFechaIni y vFechaFin.

Listo!! diviertete creando reportes....

viernes 31 de julio de 2009

Visores OLAP Open Source

Ahora que estoy cambiando el visor de mi modelo OLAP, este artículo ha sido muy interesante, les dejo el enlace al sitio de TodoBI

http://todobi.blogspot.com/2009/07/visores-olap-open-source.html

miércoles 8 de julio de 2009

SSIS - Modificar el lenguaje de programacion por default

Ingresa por el menu superior a Tools -> Options

En el panel izquierdo navega hasta Business Intelligence -> Integration Services Designers como muestra la imagen…

SSAS - Como cambiar la propiedad measure group ID


Cree mi grupo de medidas en el cubo de Ventas con el nombre “Ventas”, y después lo cambié por “Basicos”. Luego encontré un artículo interesante de cómo crear un paquete ssis que fuera agregando nuevas particiones a mi cubo a medida que iban llegando nuevos datos a mi tabla de hechos. Las particiones las realizo por trimestres en la dimensión Tiempo, y el paquete ssis lo ejecuto a diario junto con el procesamiento de los cubos, de esta forma me ahorro el trabajo administrativo de tener que estar creando estas particiones ;)


Les dejo el link al artículo del sitio de microsoft (muy bueno) de cómo crear el paquete ssis:


Léame del ejemplo de paquete para sincronizar particiones de Adventure Works DW


Y agrego otro de un sitio web que también es muy bueno:


SSIS: Create Analysis Services partitions from a SSIS package


Mi sentencia SQL al interior del script component que obtiene la lista de particiones es algo como:


SELECT 'DBPruebas' as DataSourceID,
'Ventas' as CubeName,
'Ventas' as CubeID,
'Basicos' as MeasureGroup,
'Basicos' as MeasureGroupID,
'Ventas_' + CONVERT(VARCHAR(10), yearinfo.Trimestre) AS Partition,
'' as SQL,
CONVERT(VARCHAR(10), yearinfo.MinTimeKey) as MinTimeKey,
CONVERT(VARCHAR(10), yearinfo.MaxTimeKey) as MaxTimeKey
FROM (SELECT Trimestre,
(SELECT MIN(IdTiempo) FROM Tiempo t2 WHERE t2.Trimestre = t1.Trimestre) MinTimeKey,
(SELECT MAX(IdTiempo) FROM Tiempo t2 WHERE t2.Trimestre = t1.Trimestre) MaxTimeKey
FROM (SELECT DISTINCT Trimestre FROM Tiempo)
) AS yearinfo
WHERE EXISTS(
SELECT * FROM Ventas
WHERE IdTiempo between yearinfo.MinTimeKey AND yearinfo.MaxTimeKey
)


Como ven el nombre del grupo de medidas y su ID es el mismo “Basicos”, al correr el paquete recibía error:


[Analysis Services Execute DDL Task] Error: Errors in the metadata manager. Either the measure group with the ID of 'Basicos' does not exist in the cube with the ID of 'Ventas', or the user does not have permissions to access the object.


Por permisos no era, revisando las propiedades en mi proyecto AS encontré que el ID y el name del measure group eran diferentes, uno era “Basicos” y el otro “Ventas”; como estaban antes de renombrarlos…..



Para solucionarlo:


Abre tu proyecto AS, en el panel “solution explorer” da clic derecho en el cubo y elige la opción “View Code”. La pagina que se abre es el código xml con la estructura de tu cubo. Antes de hacer estos cambios debes tener un backup de tu proyecto, por si las moscas,… jeje…


Bueno, busca en este archivo el tag <MeasureGroups> allí encontrarás un tag con tu grupo de medidas


<MeasureGroup dwd:design-time-name="32af0376-7539-4d19-83c3-93e504c85bfa">
<ID>VentasID>
<Name>Basicos<Name>

Debes cambiar el ID por el que quieres, en mi caso “Basicos”.

Reemplaza tambien en el tag de <Kpis> , si es que tu cubo tiene:


<Kpis>
<Kpi dwd:design-time-name="61ca593f-f9bd-418d-b8db-80109c38a370">
<ID><KPIID>
<Name>KPI de ventas totales<Name>
<AssociatedMeasureGroupID>BasicosAssociatedMeasureGroupID>

Y listo ¡!! Asunto arreglado…..


lunes 6 de julio de 2009

Error de timeout al modificar tabla

Mientras creaba una Primary Key en la tabla "tablename" con más de 8 millones de registros, me salía error de timeout en sql server 2008, esto no me había sucedido en 2005.... La solución es cambiar la configuración del timeout.


E




jueves 2 de julio de 2009

Error ssis package : the version number in the package is not valid the version number cannot be greater than current version number

Tengo un aplicativo (visual studio 2005) que corre paquetes ssis en (sql server 2005), ahora compramos sql 2008 y debí migrarlos.. el aplicativo dejó de funcionar con error:

The version number in the package is not valid. The version number cannot be greater than current version number.

Dentro del aplicativo ejecuto las ETL por medio de BackgroundWorker con el comando dtexec.. que pasó? porqué dejó de funcionar??

Fácil, en mi máquina de desarrollo tengo las dos versiones instaladas 2005 y 2008.. así que hay dos dtexec:

2005 - C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
2008 - C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe

Para solucionarlo hay varias opciones:

1. Colocar el path completo dentro de mi aplicativo indicando donde se encuentra la utilidad C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe

2. Renombrar la utilidad de la carpeta 2005 a DTExec_old.exe. Esta fué la que yo elegí pues la coexistencia de las dos versiones sólo se dá en mi máquina de desarrollo, en producción sólo tendrá sql server 2008