martes, 4 de noviembre de 2008

Best Practices en QlikView: cuando empieza a crecer el número de documentos en el servidor


En mi empresa llevamos 5 años utilizando QlikView como he comentado en algún otro artículo y puedo asegurar que cuando lo compré no tenía la más remota idea de lo que podría llegar a convertirse para ciertas personas y los problemas que iba a lucionarso con este producto. Lo compramos un poco para probar como aquel que dice.


Como todo, esta situación tiene un lado bueno, y otro malo.

El bueno: la de pasta gansa que nos hemos ahorrado en horas de programación de informes con el sistema operativo actual.

La mala: esto ha llevado a una situación un tanto caótica en cuanto al volumen de documentos que hemos llegado a generar y, en bastantes casos, el volumen se mide en cientos de MB comprimidos.


Otro factor siempre presente en nuestra vida, además del tener que comer, dormir, y...., son las prisas. Este último factor nos ha llevado a la situación que actualmente tenemos: infinidad de documentos que no están relacionados entre sí, que se recargan de forma separada cada día, con información redundada y que comienza a hacerse insostenible sus modificaciones (campos, tablas, etc). Con lo cual me enfrento, después de una cierta experiencia, con problemas de "sostenibilidad". La versión 32 bits además acentúa los problemas de los usuarios con algunos problemas de memoria ajenos a QlikView y que son imputables a la arquitectura de gestión de la memoria en máquinas windows de 32 bits (en fin, otro cantar).


Por resumir, inconvenientes:


  • Una lista de tareas programadas interminable recargando documentos diariamente, incluso cada hora.

  • La información está redundada en algún caso más de 15 veces (por ejemplo, la tabla "ARTICULOS")

  • Modificar, añadir, o eliminar un campo de una tabla (ARTICULOS por ejemplo) supone repetir n veces la modificación de este campo en cada documento que contenga esta tabla. En algún caso, los documentos han sido hechos por personas diferentes con lo que os podéis imaginar.

  • Las estructuras internas de tablas son diferentes en distintos documentos. Esto supone un problema sobre todo cuando se dispone de licencias Profesional o Enterprise (o en la versión nueva 8.5 si se habilita la creación de objetos compartidos de servidor) y los usuarios pueden ver los campos. Imaginad explicar a un usuario diferentes arquitecturas para la misma BD, un desastre...

  • No queda ventana de horas disponible por la noche para ejecutar todas las recargas de documentos. Ejemplo: 10 documentos que tarden 1 hora en recargarse = 10 horas.

Todos estos problemas y algún otro más, los hemos pasado en mi empresa por lo que voy a intentar hacer una especie de documento de buenas prácticas (o "Best Practices") para la creación y mantenimiento de numerosos documentos en un servidor. Me gustaría no ser el único que hace anotaciones en esta entrada y que aportéis vuestras ideas o soluciones:


"Best Practices" para la sostenibilidad de documentos grandes de QlikView:



  1. Piensa antes de hacer. Creo que el más importante. Pensar y estudiar lo que se pretende con el documento y si ya tenemos otro con datos similares. Es posible que convenga ampliar el existente y no crear uno nuevo.

  2. Archivos QVD. QlikView hace ya tiempo que inventó estos archivitos. La ventaja es que los recargas una vez y que tarde lo que tarde. Desde tu nuevo documento de QlikView puedes recargar tablas enteras alojadas en estos archivos QVD como si se tratasen de un excel o archivo de texto, con las siguientes ventajas: 1.- Velocidad (es entre 10 y 100 veces más rápida la recarga de un archivo QVD que un equivalente en otro formato) y 2.- La estructura de campos es única y hay un único punto de mantenimiento.

  3. Recargas Parciales: Es aconsejable utilizar la sentencia "Partial Load ..." para ganar en velocidad de recarga.

  4. Invierte más horas en el script de carga y menos en formulación extraña en los objetos y en código en el editor de módulo: Ganarás en velocidad de cara al usuario al tener el dato ya pre-calculado. Créeme, el usuario notará que vuela al hacer selecciones, bookmarks, etc...

  5. Utiliza la sentencia $(include=""). Puedes dejar fuera de QlikView fragmentos comunes entre varios documentos para que modificarlo sea cosa de abrir el notepad. Además (que me perdone la gente de QlikView) pero otras personas de tu departamento podrán mantener código de script genérico sin necesidad de tener acceso a la aplicación (evidentemente nos ahorramos unas pelillas...;-). Ni que decir tiene que deben primero controlar y conocer lo que tocan...

  6. Oculta las pestañas. Esto se lo ví a un gran amigo (http://http://www.cmigestion.es/) y me dió la idea perfecta para documentos de mucho contenido (muchas pestañas). Una primera hoja con una especie de menú te va a permitir que el usuario navegue de una forma controlada para obtener lo que necesita, frente a mostrar todas las pestañas y que vaya entrando en información que no le es necesario en ese momento. (Estoy preparando un documento que explique esto para una próxima entrega).

  7. Los nombres de campos claritos: Sobretodo si sois varias personas manteniendo los documentos. QlikView tiene la posibilidad de cualificar o no los campos de las tablas. Una buena especificación a la hora de llamar a los campos por su nombre puede ahorrarnos muchos dolores de cabeza, os lo aseguro. Los campos del tipo "CArtN" son menos descriptivos que "Costo Neto Articulo". Es triste decirlo pero más triste es robar ;-)

  8. NO al editor de módulo: QlikView desaconseja encarecidamente su uso salvo excepciones, claro está. Entre que el editor no lo tienen muy currado y que en posteriores versiones no te garantizan al 100% su correcto funcionamiento, muerto el perro, se acabó la rabia...

  9. Be graphic, my friend... Uséase, que como todo en esta vida, es importante hacerlo bien, pero casi más importante es venderlo bien. ¿No conocéis el típico en la empresa que no hace grandes cosas pero que las sabe vender?. Si tenéis un departamento de diseño gráfico o, simplemente alguien con un poco de gusto estético, no dejar al informático de turno hacer con vuestra obra de arte a presentar a dirección, un cuadro de Miró (con todos mis respetos...).

  10. Let's Backup. Backup, backup y más backup....

Estos son consejos a la hora de hacer un documento. A la hora de montar la estructura de carpetas NTFS en el server yo lo tengo montado de la siguiente forma:


RAIZ



  • QVD (carpeta con archivos QVD)

  • SCRIPTS (carpeta con permisos NTFS selectivos para modificar partes de ciertos script de carga)

  • DOCUMENTOS (esta es la carpeta pública a la que tienen acceso los usuarios y que contiene a su vez, subcarpetas y archivos QVW)

  • LOGS (carpeta con archivos logs del servidor, archivos .mem, etc...)

Esta parte es un ejemplo pero que podéis montarlo cómo queráis. QlikView tiene más opciones como la posibilidad de montar en el servidor de QlikView otras carpetas con rutas diferentes.


Un saludo

domingo, 2 de noviembre de 2008

Aplicaciones prácticas Qlikview: ¿Cómo hacer que el usuario compare 2 volúmenes de datos a su libre albedrío?


Hola. Con esta entrada voy a comenzar a explicar una serie de aplicaciones prácticas utilizando QlikView 8.5 que podéis aplicar en vuestras aplicaciones. Algunas de estas están extraídas de los mismos ejemplos que se pueden descargar de la web de QlikView (http://www.qliktech.com/) como la que voy a publicar a continuación.



El ejemplo consiste en utilizar funcionalidad nueva para permitir que, en una gráfica (por ejemplo), el usuario pueda comparar 2 conjuntos de valores diferentes para un campo determinado.


En el ejemplo tenemos ventas por productos y queremos que el usuario pueda comparar todas las ventas de una serie de productos, con otra suma de otros productos. Estos dos conjuntos, como cosa interesante, los crea el usuario en tiempo de ejecución.



En este ejemplo vamos a tocar los siguientes aspectos:


  • Set Análysis: Este ejemplo se resuelve de una forma más "rentable" utilizando esta nueva funcionalidad de lógica de conjuntos.



  • Editor de módulo: para definir los conjuntos, utilizaremos 2 pequeñas funciones de código para rellenar los valores de 2 variables definidas en el documento.



  • Variables de documento: utilizaremos 2 variables para almacenar las selecciones del usuario para el "GRUPO 1" y para "GRUPO 2".



  • Editor de script de carga: utilizaremos la sentencia LOAD InLine para realizar una carga de datos internos al documento, es decir, cargamos "a piñón" unos datos de venta para unas categorías que también se cargará con la sentencia InLine. Podríamos haberlo hecho con una excel o una tabla de SQL.

Os recomiendo que practiquéis con un documento nuevo y lo hagáis desde cero. Para ello cargaremos unos datos ficticios de venta en el script utilizando la sentencia "InLine".


Menú "Archivo" > "Nuevo"


Creamos las 2 variables que , más tarde, utilizaremos llamadas "Seleccion 1" y "Seleccion 2" y no definiremos ninguna regla de entrada y las dejaremos tal cual.


Menú "Configuraciones" > "Propiedades del documento" > "Variables" > "Nueva"


"Ctrl + Alt + D"


Abrimos el editor de script ("ctrl + E") y creamos 3 tablas: "CATEGORIAS", "ARTICULOS" y "VENTAS" utilizando las siguientes sentencias:


CATEGORIAS:


Load * inline[IdCategoria, Categoria


1,Bebidas


2,Snacks


3,Sopas


4,Postres


5,Golosinas];



ARTICULOS:


Load * inline


[IdArticulo, Nombre, IdCategoria


1,Zumo Naranja,1


2,Zumo Tomate,1


3,Coca-cola,1


4,Tea,1


5,Cacahuetes,2


6,Pipas,2


7,Gusanitos,2


8,Sopa de verduras,3


9,Sopa de fideos,3


10,Profiteroles,3


11,Tarta de arándanos,4


12,Tarta de queso,4


13,Chicles menta,5


14,Chicles fresa,5];




VENTAS:


Load * inline


[fecha,IdArticulo,Importe


01-01-2008,1,200.5


01-01-2008,3,150


01-01-2008,2,75


01-01-2008,5,10


01-01-2008,6,15


01-01-2008,9,250


01-01-2008,10,100


01-01-2008,11,90


01-01-2008,12,140.5


01-01-2008,14,25


02-01-2008,1,100


02-01-2008,3,45


02-01-2008,4,30


02-01-2008,6,4


02-01-2008,7,25


02-01-2008,10,100


02-01-2008,12,175


02-01-2008,13,5


03-02-2008,2,40.55


03-02-2008,3,50


03-02-2008,4,75


03-02-2008,8,34


03-02-2008,10,75


03-02-2008,11,74


03-02-2008,13,3];




Guardamos el documento en la carpeta que queramos, y ejecutamos el script.



Una vez finalizada la recarga del script, ahora vamos a crear un gráfico para comprobar que podemos sacar las ventas por categoría. Creamos un nuevo objeto de tipo "gráfico" y seleccionamos el tipo "gráfico de barras", seleccionamos la dimensión "Categoría" y como expresión "Sum(Importe)". El resultado se debería parecer a lo siguiente

A continuación, vamos a añadir a nuestra hoja un cuadro de lista para que el usuario pueda seleccionar los valores para el campo "Categoría" y hacer los grupos.

Añadimos 2 botones llamados respectivamente "Seleccionar Grupo 1" y "seleccionar Grupo 2".



Accedemos al editor de módulo (Ctrl + M) y creamos 2 rutinas



Sub Seleccion1
End Sub



Sub Seleccion2
End Sub



y las asociamos respectivamente a los botones anteriormente creados.



El código de las 2 rutinas es el siguiente:





Sub Seleccion1


set mySelections = ActiveDocument.fields("Categoria").GetSelectedValues
dim SelectedItems if mySelections.Count <> 0 then


for i = 0 to mySelections.Count - 1
SelectedItems = SelectedItems + """" + mySelections.Item(i).text +
"""" + "," next SelectedItems = left(SelectedItems,
len(SelectedItems) - 1)


set v = ActiveDocument.GetVariable("Seleccion 1")


v.SetContent SelectedItems,true


Else


set v = ActiveDocument.GetVariable("Seleccion 2")


v.SetContent "",true


End
if ActiveDocument.fields("Categoria").Clear


End Sub




Sub Seleccion2


set mySelections = ActiveDocument.fields("Categoria").GetSelectedValues
dim SelectedItems if mySelections.Count <> 0 then


for i = 0 to mySelections.Count - 1


SelectedItems = SelectedItems + """" + mySelections.Item(i).text + """" + ","


next


SelectedItems = left(SelectedItems, len(SelectedItems) - 1)


set v = ActiveDocument.GetVariable("Seleccion 2")


v.SetContent SelectedItems,true


Else


set v = ActiveDocument.GetVariable("Seleccion 2")


v.SetContent "",true


End


if ActiveDocument.fields("Categoria").Clear


End Sub



Una vez que ya tenemos el código y hemos asociado las rutinas a los botones ya estamos preparados para crear un gráfico que represente la suma de las 2 selecciones.



Creamos un gráfico sin dimensiones y le añadimos 2 expresiones




  1. Sum({$<[Categoria]={$(Seleccion 1)}>} Importe)



  2. Sum({$<[Categoria]={$(Seleccion 2)}>} Importe)


El truco está en que utilizando "Set Analysis" somos capaces de definir una selección fija independiente de las del documento, solo que como novedad, no tiene por qué ser una selección fija sino depender de una variable ("seleccion 1") que lo hace dinámico al usuario. Qlikview sustituirá antes de evaluar la expresión ( a esto se le llama expansión de una variable) $(variable) por algo como {"Postres","Bebidas", ...}.



El gráfico quedaría más o menos de la siguiente manera...


Ahora ya podéis comprobar el resultado para lo que debéis seleccionar varias categorías y entonces pincháis en el botón 1, volvéis a seleccionar otras categorías y pincháis en el botón 2 y váis viendo cómo cambia la última gráfica.


Además, podéis comprobar que aunque el usuario haga otras selecciones, la gráfica no cambia.


Para terminar vamos a agregar una línea de referencia en el gráfico que represente la media de las ventas, para esto editamos las propiedades del gráfico, en la pestaña "presentación", creamos una línea de referencia con la expresión
AVG({1} Importe).


Saludos.

sábado, 1 de noviembre de 2008

¿altruismo = egoismo?

quien fuera perro
Hola de nuevo y perdonad por el parón pero el trabajo me ha tenido bastante liado.


Esta semana, un amigo me hizo una pregunta que me ha hecho reflexionar y, aunque no tiene nada que ver con BI, sí que tiene mucho que ver con los bloggers y quería compartir mi opinión con vosotros a ver qué os parece.

La pregunta era "¿y tú qué ganas contestando a la gente que tiene dudas...?" y tiene una respuesta bien sencilla: puro egoismo ;-)


Efectivamente, yo diría que soy "egoista", me explico:


Mentiría diciendo que no espero nada y que soy altruista. Sinceramente no creo que exista alguien completamente altruista ya que, aunque sea en el fondo más interno de nosotros, siempre hay una razón que nos mueve a hacerlo. Siguiendo con este razonamiento, me atrevería a definir el altruismo como un tipo de egoismo, con la diferencia de que el altruista espera una recompensa moral o simplemente un bienestar producido por el reconocimiento social, una sonrisa, pero en el fondo es egoismo.


Este es mi caso, me voy a la cama pensando que he ayudado a alguien y que le he ahorrado el tiempo que yo perdí (o no) en aprenderlo.

Soy egoista, sí, al igual que toda la gente que desarrolla código open-source, los bloggers, son todos unos egoistas, al igual que los médicos, los ATS, los misioneros, algunos profesores, ...


Un saludo

domingo, 12 de octubre de 2008

QlikView: novedades generales en la versión 8.5

Hoy voy a escribiros las notas que tomé en la presentación de la nueva versión de QlikView del pasado martes en Valencia.


No me centraré en la parte del día que se habló del programa para partners y de la filosofía de Qlikview para con su relación con los clientes y partners. Únicamente hablaré de la última parte de la presentación, la parte más técnica, donde Jose Antonio Miguélez (un saludo) explicaba las mejoras de esta versión.

La primera sensación que recuerdo que me transmitió el evento fue de "desilusión" pues vimos pocas mejoras en esta versión, sobre todo si tenemos en cuenta que yo salto de las versiones 6.07 a la 8.x. Esperaba un cambio brutal al saltar 2 versiones pero el interfaz seguía siendo el mismo, el lenguaje de script el mismo, los objetos los mismos, y poco más.


De vuelta a Alicante comencé a "digerir" los conceptos de los que había hablado José Antonio en su ponencia y empecé a ver la luz al final del túnel. En 2 horas estaba en casa, con la versión 8.5 developer en mi portátil, y empezaba a trastear lo que había visto en la demo.

Esta sensación de la que había hablado antes de desilusión, comenzaba a transformarse en sorpresa y admiración. Sí que es cierto que visualmente habían mejorado muy muy poco, en lo que han hecho un esfuerzo importante la gente de Qliktech ha sido en la parte de detrás del telón, en el back-office, no porque hayan incluído 50 sentencias nuevas (no creo que lleguen a 10 las nuevas) sino por que han conseguido que todo sea dinámico, incluyendo las dimensiones y han incluido un set de instrucciones para el manejo de conjuntos que dota a Qlikview de toda la funcionalidad que se podría pedir (como lo llaman ellos SET ANALYSIS). Pero, ¿qué es esto de los conjuntos?, pues intentaré explicarlo lo más sencillo que pueda.


Set Analysis nos va a permitir comparar selecciones entre ellas mismas. Hasta ahora, Qlikview nos muestra los datos que tenemos seleccionados, reduciendo cada vez más según sumamos selecciones en ciertos campos, dejando fuera de la vista los datos excluídos ¿me seguís?. Si tenemos un documento con ventas de 2 años (2006 y 2007), y seleccionamos el valor 2007 para la dimensión AÑO, la suma de las ventas será igual a las ventas del año 2007 y todo el resto del documento estará filtrado a los registros relacionados con el año 2007, con lo que si tuviéramos una gráfica que nos comparara las ventas de estos 2 años, sólo mostraría la expresión para el año 2007.

Con "Set analysis" podemos tener acceso a cualquier conjunto de datos independientemente de las selecciones del usuario; selecciones para uno o más campos, bookmarks, y variables.

Introducen 3 operadores importantes :
  • {1}: significa el conjunto completo de datos del documento.
  • {0}: o conjunto vacío, sería equivalente a la selección de ningún dato.
  • {$}: la/s selección/es actuales. Ojo!, o una selección especificada por nosotros, no por el usuario (una variable, un bookmark, o un valor o varios para un campo).

Un ejemplo directo en QlikView:


La primera columna "Sum({1} Ventas)" : Calcula el total de las ventas para cada dimensión en todo el conjunto de datos sin selecciones

"Sum({1-$} Ventas)": Calcula el total de las ventas menos las selecciones actuales para cada dimensión.

"Sum({$} Ventas)": El total de ventas según las selecciones actuales (vamos, lo normal), para cada valor de la dimensión.

"Sum({$} Ventas )": El total de ventas según las selecciones actuales teniendo como referencia el año 2008 aunque no esté seleccionado, para cada valor de la dimensión.


Ojo en el ejemplo que tengo la dimensión "Nombre Tienda" seleccionada en un valor. Por eso aparecen las cifras "0" en las tiendas que no son "Alicante 1".

Tradicionalmente esto se podía conseguir (en parte) con el operador IF. Con la 8.5 debemos dejar de recurrir a este operador que es mucho menos eficiente (desde el punto de vista del consumo de memoria y de la velocidad de cálculo) que la lógica de conjuntos.


Hay un buen apartado de ejemplos en la ayuda del programa buscando como "análisis de conjuntos" donde explican de una forma muy buena todo el tema de conjuntos. Realmente interesante.


Ahora voy a citar una lista corrida de mejoras en la versión 8.x a mi entender importantes:
  • Servidor Web integrado en la solución server (no requiere IIS).
  • DSC (Directory Service Connector). Ya no se requiere AD de Microsoft, se puede conectar con otros LDAP.

  • DMS: Gestión Integral de documentos. Esto es realmente un logro y los usuarios os lo van a agradecer (aunque nos va a representar algún curro más). Lo que permite DMS es una centralización de todo lo que crea el usuario, ya no se guarda en el registro del usuario, en carpetas por ahí ocultas. Todo se centraliza, bookmarks, objetos, tablas, gráficos, personalizaciones, ...

  • Los objetos que el usuario crea (no el programador), pueden ser compartidos al resto de los usuarios (por decisión propia del usuario que es propietario de ese objeto).

  • Integración mediante OCX en software de terceros como por ejemplo un PPT (Power Point). (siempre que el usuario que lo abra tenga la licencia correspondiente del cliente).

  • Seguridad a nivel de campo.

  • Mejoras en la potencia de los informes (tampoco para tirar cohetes pero bueno).

  • Búsqueda difusa. Si el usuario maneja y conoce la definición de campos del documento pues se puede hacer búsquedas del tipo "pvp_articulo > 20 and pvp_articulo<40". Por supuesto, siempre que el coco del usuario de para esto ;-)

  • Dimensiones dinámicas: la bomba. Ya no tengo por qué definir varias gráficas (clonando) con diferentes dimensiones o crear grupos cíclicos y que el usuario elija de la lista. Podemos combinar como dimensión el uso de la expansión de dólar o utilizar una variable que el usuario puede definir en tiempo de ejecución, pudiendo así crear un objeto "reutilizable" por el usuario para distintos análisis. Pocas herramientas hay que te permitan hacer esto. Pensad bien quien se haya pegado con cubos OLAP, en el coste de cambiar la estructura de nuestros cubos, ¿qué tiempo tardamos en regenerarlo?,¿debe el usuario pasar por nuestro departamento/consultoría para hacer esa petición?. En Qlikview ya no.

  • Podemos abrir un documento con una selección determinada (por ejemplo un bookmark de documento) en base a la sección de acceso de nuestro documento. Imaginemos un departamento de compras con 3 compradores (uno compra lo referente a la sección de Gimnasio, otro la sección de Running, y el otro la sección de Bicicletas). Pues podemos filtrarle a cada uno el documento con sus secciones de forma predeterminada aunque luego él puede ver el conjunto de datos.

  • Por fin, han introducido el password en el editor de macros. Ya estarán a salvo nuestro código de macro. Una anotación, intentad huir de las macros en la medida de lo posible.

  • Podemos abrir un documento sin cargar los datos en el caso de algún error raro o que nuestro equipo donde desarrollamos no tenga suficiente RAM para cargar cierto documento y queremos rectificar el script.

  • Podemos cargar campos tipo imagen por ODBC e incluso reducir el tamaño en la recarga.

  • Podemos establecer con apenas un par de líneas de código, jerarquías "no-balanceadas" del tipo empleado-superior donde tanto el empleado como su superior se encuentran en la misma tabla. Sentencia "Hierarchy" & "BelongsTo".

  • Si empezamos a tener problemas de falta de memoria en alguna recarga o en el acceso, ya está disponible el software compilado para 64bits. Siempre y cuando tengamos una máquina que lo soporte y lo tenga habilitado.

Bueno, pues una vez más espero haberos ayudado en algo.

Un saludo a tod@s

QlikView: Análisis Dupont

Como primera entrega de ejemplos realizados con QlikView hoy voy a hablar de un cuadro de mandos para un departamento de finanzas o un directivo. Se trata de uno de los tantos métodos de representar el estado de una empresa de una forma rápida y clara y para ello he utilizado un análisis Dupont. Como conclusión decir que este tipo de análisis muestra cuantos € obtenemos por cada € invertido en la empresa.

Uno de los fines de este análisis es el poder comparar el estado de nuestra empresa con cualquier otra independientemente de la actividad de la otra empresa.


En la representación del panel he utilizado un componente de simulación que permite Qlikview y que nos da mucha potencia de análisis en los tiempos que corren ya que permite alterar ciertos parámetros de entrada como las existencias, deudores, acreedores, el margen bruto, costes, depreciaciones, etc porcentualmente y observar qué pasaría en ese caso. Esto es lo que se denomina comunmente "what-if analysis" o lo que es lo mismo en cristiano "qué pasaría si..." ;-).


Por dejarlo más ilustrativo el documento tiene una segunda hoja que nos permitirá alterar el umbral de color de cada elemento. Esto es, para el ejemplo de las existencias, los valores entre los cuales la burbuja de "Stocks" se coloreará en verde y que, fuera de este rango, se coloreará en rojo. La finalidad de esto no es otra que llamar la atención de nuestro directivo en aquello en lo que debe poner especial atención y entrar a profundizar en los datos referentes a la anomalía, no al resto. Es un ejemplo muy sencillo de ver las bondades que ofrece un sistema de BI frente al típico sistema de reporting.

Os pongo aquí una fotillo del análisis dupont realizado con QlikView. Por supuesto, no hacer caso a los datos ya que son ficticios (las finanzas no son mi especialidad ;-).

Por rizar el rizo, pues me he permitido el lujo de internacionalizarlo y que lo podáis ver en 2 idiomas, inglés y español.

Lo podéis descargar desde el siguiente enlace (descargar Ejemplo_dupont.rar).

Un saludo

jueves, 2 de octubre de 2008

Contribución: ¿En qué diferencias tú el Reporting del Business Intelligence?




Mi colega Ignacio Parres me ha enviado el siguiente mail y creo muy interesante su publicación a fin de plantear un debate abierto. Efectivamente, como bien dices, definiciones hay tantas como colores y lo que está claro es que no se suele coincidir en su definición. BI es un concepto que abarca demasiado y que incluye herramientas que lo complementan y, en ocasiones, no se sabe dónde empieza uno y acaba el otro. Sin más, os dejo con el debate que plantea Ignacio (gracias, Ignacio) en el que espero haya más contribuciones:

"Estimado Carlos, he estado leyendo tu blog, y realmente me ha gustado, por lo que me he animado a plantearte una cuestión: ¿En qué diferencias tú el Reporting del Business Intelligence?

Es un tema que considero importante, ya que el primer paso para implantar un sistema de información es disponer de conceptos básicos muy claros para explicárselos al cliente; y en este campo existen tantos puntos de vista como analistas.

Estoy recopilando definiciones de personas con experiencia en el mundo de los cuadros de mando, y creo que tú puedes aportar algo importante. Probablemente en nuestra web crearemos una nueva sección dedicada al BI, donde expondremos todos los puntos de vista que hemos ido recopilando, y, por supuesto, el nuestro.

Espero poder abrir una pequeña línea de debate contigo planteando la cuestión:¿En qué diferencias el Reporting del Business Intelligence? Evidentemente, y si a ti te parece bien, puedes publicar este email en tu blog; sin problemas (¡me habría gustado poder haberte escrito directamente en tu blog!).

Un cordial saludo,Ignacio Parres"

miércoles, 1 de octubre de 2008

Soluciones basadas en Excel

Hola de nuevo.
Dentro de todo el pupurri de herramientas relacionadas con BI, hay un grupo importante de ellas que se apoyan en soluciones de terceros con varios fines como por ejemplo, ETL, cubos, distribución de reportes, etc.

En este artículo quería hacer algunas opiniones sobre estas últimas, herramientas que utilizan MS Excel para hacer llegar la información al usuario que lo va a consumir. Una de las que más me ha llamado la atención ha sido la plataforma de la gente de ApeSoft y que, todo sea dicho, es una empresa española (esto me llena de orgullo ;-).

Cuanto más me meto en este mundo, más amplio veo que es y más herramientas y aplicaciones aparecen. Las hay de todos los precios y colores y es por esto que tenemos que ser conscientes del dinero que nos queremos gastar, el alcance de la solución, y el tiempo que disponemos para desarrollar.
Las empresas atraviesan fases y grados de madurez y no todas están preparadas para soportar un proyecto en toda su embergadura. Hay productos que cubren a las mil maravillas temas de reporting y su distribución sin llegar a ser monstruos. Pues hoy he visto uno de estos productos.

ApeSoft encaja perfectamente en todo tipo de empresas, desde la pequeña-mediana empresa hasta las gran empresa, e incluso empresas que ya cuentan en sus cuotas con grandes soluciones de BI como MicroStrategy, Cognos, etc. Sí, he dicho bien, ¿comprar una herramienta de BI teniendo ya otra herramienta de BI?, ¿cómorrr?.

Hay un aspecto negativo en toda solución de BI, el efecto multiplicador del coste de la licencia de usuario. Si nuestra empresa crece o necesitamos desplegar información a nuestros clientes finales, o a nuestra fuerza de venta, etc, entonces comienza a dispararse el gasto. Encima, la inmensa gran mayoría de los usuarios solo necesitan ver la información y cuanto más sencilla mejor. Aquí es donde entra fuerte ApeSoft, no pagas por el número de usuarios finales que la consumen y tampoco licencian por CPU (como hacen los grandes productos a un precio realmente alto).
El sistema es bien simple (que no cutre), un servidor planifica las consultas, las ejecuta, aplica filtros de seguridad, funde plantillas de MS Excel con los datos obtenidos en las consultas, y las envía por mail o a un servidor de archivos para que el usuario la visualice. Importante: el cliente no necesita un software específico vinculado al fabricante del servidor. Evidentemente MS Excel tiene un coste pero me confirma la gente de ApeSoft que es totalmente compatible con Open Office ;-). Un resumen de ventajas:

Ventajas
  • Coste 0 en ampliación de licencias una vez comprado el producto.
  • No se licencia por usuarios ni por CPU. Compras el producto y para.
  • El interfaz de programación realmente fácil y simple, pero potente a la vez.
  • Planificación del reporting.
  • Puede trabajar off-line o on-line. O bien envías la hoja de cálculo a un usuario por mail, o la dejas en un filer para que el usuario lo consuma a voluntad.
  • Nuevo servidor web para publicar los informes xls.
  • Todas las posibilidades en el cliente, que Excel o Calc poseen.
  • Gran conocimiento en los clientes finales de estas herramientas. Formación y soporte 0.
  • Arquitectura sencilla en cuanto a hardware: una única licencia de Excel y el producto instalado en un servidor

Inconvenientes

  • Las limitaciones implícitas en Excel: 65536 filas en Excel 97-2003 y OpenOffice 2.4, 1.048.576 en 2007.
  • Sin un poco de orden, podemos llegar a tener un pequeño caos en el servidor.
  • Costoso para un número muy reducido de licencias (entre 1 y 10 aprox.), pues te obliga a comprar el producto completo.

Conclusiones:

Si, al igual que yo, tenéis previsto un despliegue ambicioso en poco tiempo a nivel de volumen de usuarios, puede ser un complemento a tener en cuenta (no tiene porqué ser un complemento).

Las cosas, cuanto más simples, más sencillas (qué obvio, ¿no?)

viernes, 26 de septiembre de 2008

Demo de MicroStrategy



Hoy he asistido junto a mis colegas de F.I.T.A. a una jornada de trabajo con la gente de MicroStrategy (todo hay que decirlo, esta vez en castellano). Como apreciación global os anticiparé que me ha impresionado como ya lo hizo en su día en el evento de BARC '08 .
Yo, que me declaro como un fiel seguidor y enamorado de QlikView, he de reconocer que hoy le he sido infiel y que hiré este fin de semana a confesarme: "padre, .... he pecado, .... he mirado con ojos de cordero a otra"

Como os comentaba en la apertura del blog, mi intención es contaros mi día a día en esto del BI, así que voy a contar la experiencia de hoy desde un punto de visto totalmente subjetivo e intentaré ser imparcial.

Presentación de la empresa (todo el rollo ese que cuentan al principio de las presentaciones y que pocos escuchamos...):
Es una empresa americana con sedes en Madrid y Barcelona (si no sabéis catalán no os recomiendo que os pongáis en contacto con la sede de Barcelona).
Como punto a resaltar citar que, a diferencia de la gran mayoría de empresas en el entorno, todo es software desarrollado por ellos y no tienen módulos comprados a terceras empresas (si alguien tiene ganas que busque la historia de esta empresa que dice bastante de su dueño como curiosidad). Punto positivo!

Marco:
MicroStrategy se sitúa dentro del marco de las aplicaciones enfocadas al BI en casi toda su extensión (reporting, análisis, monitoring, alerting y, data-mining).

Arquitectura:
MOLAP + ROLAP.



Todo nuestro Dataware House (bases de datos relacionales, información distribuida como hojas de cálculo, ficheros de texto, e incluso información no estructurada como contenido multimedia, canales RSS, etc) es accedido por su "MicroStrategy Intellingence Server".
Este servicio es realmente el core del invento. Todo el contenido (objetos de inteligencia de negocio, reglas, documentos, seguridad) está incluido en este servicio. Los clientes acceden a este servicio de formas diferentes:




  • Web server: a través de un servidor web los clientes obtienen código HTML puro 100% (AJAX) compatible con posibilidad de incorporar contenido flash. Si algo distingue a esta herramienta es la capa de visualización realmente impresionante y llamativa; animaciones flash totalmente interactivas. Creo que, para ser críticos, tanta animación resulta muy llamativa pero poco práctica, vende muy bien para un directivo o ejecutivo, pero no aporta funcionalidad cuando tenéis entornos Terminal Server, Citrix, VDI (puede penalizar bastante el hecho de tener tanta animación aunque esto es personalizable). El entorno de creación es 100% web y en los clientes nunca reside ningún dato (¡importante esto!).


  • Mobile server: Una característica adicional, acceso a nuestros cuadros de mando desde nuestros dispositivos móbiles. Bueno, en fin...¿operativo de verdad?, tendría que probar.


  • Narrow Caster Server: Este módulo es el motor de toda la parte de notificación. Genera consultas a nuestro Dataware House, aplica la seguridad, genera los objetos, y los envía por mail, a una impresora, o a nuestro file-server (me gusta la idea de servir la información a nuestros consumidores antes de que ellos se acuerden de que tienen que hacerlo, be proactive, nor reactive!). Además incrusta en el mail el cuadro de mandos completo, esto es los datos y la presentación (con flash).


El motor (Intelligence Server) contiene los objetos de negocio, reglas, y demás pero, ¿en que nos puede ayudar esto?. Aquí le seré infiel a QlikView y crítico, y tengo que deciros que en mucho. Si sois de los que, como a mí, nos gusta trabajar lo mínimo, sólo los crearemos una vez y los "llamaremos" desde cualquier cuadro de mandos que lo necesitemos (¡ojo al parche!). El motor es capaz también de llevar un control de las versiones de estos para evitar, en entornos de varios desarrolladores, pérdidas de trabajo y esas cosillas... (cojonudo). Pero Intelligence Server hace realmente muchas más cosas como, por ejemplo, discernir según su propia "inteligencia" si debe utilizar ROLAP o MOLAP, o entre cubo es el ideal para extraer la información según qué caso. Por supuesto es un servicio clasterizable para dotar de mayor potencia e impedir que sea un elemente "bottleneck" (cuello de botella).

Si hablamos de posibilidades os diré que todas y alguna más; incorporar decenas de objetos de todos los tipos, gráficos, selectores de datos, widgets, con la posibilidad de incorporar los nuestros propios (depende de las ganas de complicarnos la vida que tengamos). Nos podemos crear nuestras propias plantillas de diseño corporativo y aplicarlas al final, cuando los objetos ya están configurados y nuestra lógica de negocio aplicada. Un punto positivo para la gente de MicroStrategy!.

Y después de todo lo bonito, interesante y con la miel en la boca, llegan los "vayas","ayayais", y levantamos las cejas de asombro ;-(

Todo esto está muy bien pero, y la capa de ETL?,¿where is ETL?, ¿ande cojones configuro yo mis cubos, relaciones, etc?.

Pues va a ser que no, que ya si eso... Esta parte se supone que ya la tienes tú montada en cualquier otra plataforma, como ejemplo Integration Services (de Microsoft) o alguna otra herramienta de terceros. Esto nos plantea a priori un problema pero que puede llegar a verse como una ventaja (según nuestro presupuesto ;-). Sí, digo ventaja porque nos da algo importante, independencia de los datos, pero digo problema porque necesitamos conocer un entorno más, tener más presupuesto y más tiempo de integración. Ganamos en escalabilidad pero perdemos en simplicidad y en pasta. Dependerá del proyecto o cliente que tengamos entre manos, será viable o no.


Licenciamiento:



Esta gente está en todo, que tienes un volumen de usuarios brutal, pues licencias por CPU, que no, pues licencias por usuario. Pensad muy bien el alcance del proyecto, el tipo de usuarios que consumirá la información y cómo y dónde la consumirá.



Conclusiones:



Me ha gustado enormemente la herramienta hasta que hemos hablado de presupuesto. No quiero asustar a nadie pues dependerá siempre de una cosa muy importante, ROI (vamos, el retorno de nuestra inversión). Una cosa es cara cuando es difícil de justificar (financieramente hablando) y es barata cuando es obvia. Otra cosa es que sea costosa o no. Si conseguimos justificar con ahorro nuestra inversión, merecerá la pena y será un éxito. Ni que decir tiene que MicroStrategy se codea con grandes multinacionales (y alguna PYME) y creo que está fuera del alcance en una gran parte de la pequeña y mediana empresa.



Todo este planteamiento ha sido el resumen de una jornada de trabajo y quiero decir que no he podido tocar con mis manos el producto. Espero hacerlo pronto y contaros más cosas. Me gustaría contar con aportaciones de gente que conozca y haya trabajado con esta herramienta y, si alguien no está conforme con algún comentario que haya hecho, agradeceré la crítica.



Hasta mañana ;-)

No todo en esta vida es trabajar... buenísimo

Siempre me han dicho que cada 30 minutos currando delante del ordenador, es bueno hacer una pausa y despejarse.
Cuando necesitéis relajaros y olvidar los problemas, o cuando no entendáis lo que un cliente os quiere decir o, más problable aún, cuando le estéis contando algo simple y lógico a un cliente y este os mire con cara de sepia, os sugiero que no os hagáis mala sangre, cojáis un portátil, la wi-fi y sigáis este vínculo...
...y perdí mi presencia de espíritu...

Gracias, Josep por esta aportación ;-).

Carpe diem

"...nos pasamos la vida recordando el pasado, planificando el futuro, pero pocos viven el presente... carpe diem!."

Un colega hoy me explicaba su filosofía de vida y me ha llamado la atención. Un tío muy simpático el cual conozco porque pertenece a una asociación a la que yo también pertenezco (FITA, foro TIC Alicante) en el que trabajamos de forma conjunta directores de departamentos de informática de diferentes empresas alicantinas.
Durante la comida explicaba lo siguiente (permíteme Joaquín, robarte tus palabras, sé que no me lo tendrás en cuenta ;-) );

"...hay gente que pasa el año esperando con ansia las merecidas vacaciones de verano. Cuando llegan, se acaban y resulta insoportable ese momento. Hay otras personas que se lo plantean de otra forma; esperando que llegue el esperado fin de semana. Llega el lunes y tortazo al canto.
Pues yo prefiero vivir cada día..."

Estas palabras introducían la frase que he puesto arriba.
Gracias Joaquín por tan brillante planteamiento. Eres muy grande!. ;-)

martes, 23 de septiembre de 2008

BI ¿lo cualo?

En los últimos días he tenido unas cuantas preguntas acerca de lo que es realmente BI y, aunque la pregunta es bien simple, la respuesta no lo es.

Me gustó una definición que hizo la gente de MicroStrategy: "BI es convertir los datos en información y conocimiento". ;-)

Recuerdo aún el día que me hicieron en la empresa una demo de un software "que era la hostia" (así es como me lo definieron....;-) y nos reunimos.
Yo venía de entornos (software para hoteles) donde nos pagaban por hacer informes y más informes, cada cosa que se le ocurría al director de turno, un informe, y otro, y otro más. De repente me ponen delante un programa (QlikView) que, con no más de 5 minutos, el comercial se había currado un informe de ventas. Hasta ahí, pues bien (era un software más moderno que el SO que yo tenía así que poco mérito, pensé), pero empecé a flipar cuando me dejó el ratón y empecé yo mismo a mover columnas por filas, filas por columnas, agrupar columnas con otras, y todo esto sin rascar nada de código.
El tío me lo dejó instalado una semana y cuando vino a la semana siguiente, ya habíamos montado un pequeño cuadro de mandos de ventas y dirección lo flipaba igual que yo. Sin formación, sin tiempo, sin saber nada, ...¡qué bestia!.

Así fue como "perdí mi virginidad", jeje, y fuí investigando más sobre eso que llamaban BI.
Por intentar definirlo de alguna forma sencilla, yo diría que BI es algo más que una base de datos. Realmente es un mogollón de programas que se utilizan para varias tareas alrededor de algo parecido a una base de datos. En el mundo del BI no se habla de tablas, registros y campos, se habla de cubos, dimensiones, atributos y valores (entre otros). BI se utiliza cuando ya tienes una (o más) bases de datos pero necesitamos sacar valores agregados. Siempre habrá una base de datos relacional por detrás donde se guardan los datos de las transacciones financieras, pedidos, ventas, clientes, proveedores, etc.
Podríamos pensar que con un simple "group by" ya está, y en cierta medida, se parece (espero que me disculpen los que ya tengan experiencia), pero el tema chungo es cuando hablamos de millones de registros con relaciones entre varias o muchas tablas. Por mucho Oracle, Sql Server, CPU, RAM, que tengas, créeme le va a costar algunos minutos una consultita.

Pues bien, el secreto y por lo que se diferencia de las bases de datos relacionales es que BI "precompila" las combinaciones entre las tablas relacionadas de forma que cualquier consulta que pudiéramos pedirle a posteriori ya la tuviera calculada y solo nos la tiene que servir en bandeja. En un artículo que estoy preparando explicaré la diferencia entre las distintas tecnologías OLAP (que es como se llama a la forma de almacenar los datos en un entorno de BI)


Todos los que empezamos en esto creo que pasamos por unas fases y vamos descubriendo las bondades de estos entornos a medida que las utilizamos y hacemos más proyectos. Voy a intentar hacer una lista del uso que le fuí dando yo :

- El primer uso: reporting puro y duro. Por otros temas que no vienen al caso, para mi fue una forma rápida de hacer que los usuarios tuvieran sus listados. Algo como cristal reports pero en plan bestia y rápido.
-El segundo uso: limpiar, limpiar y limpiar. Depuramos la base de datos. Si algo tiene es que te va enseñar registros nulos, incoherentes y errores en un simple vistazo por la forma misma de presentar los datos.
-El tercero: empiezas a hacer algo más que listados y los adornas con indicadores, gráficos, flechas, dibujos, relojes, .... y es cuando los usuarios lo flipan. Ya tienen que ir al departamento de sistemas a pedir que les ordenen un informe, que si tal que si cual, ... ¿no es la leche esto?
-El cuarto: leches!, mi primer cuadro de mandos (llamados por ahí "dashboard") que no es otra cosa que un resumen de ratios, valores e indicadores destinados a tomar decisiones.
-De aquí en adelante ya depende de la herramienta que utilices pues algunas permiten temas avanzados como por ejemplo:

  • Enviar alertas cuando suceda algo en la Base de datos (lo llamaremos Cubo mejor).
  • Distribuir y entregar los datos a los usuarios de acuerdo a horarios, departamentos, etc.
  • Una palabreja de estas raras que se llama "Data-mining" o "minería de datos" que ya hablaré más adelante y que mucha gente dice que es el siguiente paso a instalar BI.
  • Integrar tus diseños de indicadores, tablas y gráficos

Y todo esto con un diseño sorprendente e intuitivo.

Cuando hablaba en mi artículo anterior de "Herramientas de BI" me refería a fabricantes de software que han desarrollado plataformas para que alguien como tú (o un consultor externo) monte encima análisis, cuadros de mando y que esto se pueda visualizar. Suele haber 2 entornos mínimo; el del desarrollador y el front-end para visualizar los datos (que al final es de lo que se trata). Además el desarrollador deberá tener varias herramientas paracrear los cubos de datos y otras para "pintar" las pantallas y el formato adecuado para los usuarios.

Como ejemplo os invito a entrar a la web de la gente de QlikView (http://www.qliktech.com/) donde vienen varias demos ilustrativas de herramientas de este tipo (para los que jugáis al golf, os puede ser muy interesante...)

Espero haber ayudado a despejar alguna duda, un saludo.

domingo, 21 de septiembre de 2008

Herramientas para entornos BI



Actualmente, en la empresa que trabajo, me encuentro en un proceso de evaluación de nuevo software para BI. La idea es montar una plataforma que soporte con creces la cantidad de información que queremos extraer. Para que os hagáis una idea, la empresa se dedica al retail y cuenta con más de 50 sedes que generan información todos los días. Nuestra intención es llegar al más alto nivel de detalle, esto es, las lineas de los tiques.



A priori, mucha gente del sector podría decir que su herramienta no cubre tal fin y que está diseñada para manejar información ya agregada a cierto nivel. El ejemplo lo tenemos en cualquier herramienta que se apoye en MS Excel con su limitación de filas por hoja (65.000, aunque a alguien le he oido decir alguna vez que lo había conseguido ampliar a cerca de 200.000 filas).


Hace algunas semanas asistí a un evento organizado por la gente de Barc, un evento realmente interesante donde tenías la oportunidad de conocer (no daba tiempo a mucho más) y conseguir algún catálogo de los 12 productos más destacados del mundo de BI actual. A continuación hago una relación de productos que pude ver y, en posteriores artículos, iré comentando según pueda testearlos:

Soluciones basadas en Excel: Había unas cuantas pero me quedé con el fabricante ApeSoft que plantea una solución interesante para desplegar el BI a un número de usuarios realmente alto. Por contra, tienen la limitación que comenté antes.


Soluciones de alto coste: Bueno, en fin, otras pocas:
Soluciones del mundo real (como diría mi colega Josep Ros, artesanos):

  • QlikView (esta ya os iré comentando en breve). Si puedo adelantaros algo de esta es el corto período de desarrollo en cualquier tipo de proyecto y hablo de incluso horas.

  • EBA (Exact Business Analytics), esta estoy deseando que la semana que viene me la dejen probar la gente de Exact, ¡Nacho, por favor, envíame el software!

  • MS Analysis Services. Esta no necesita presentación pues es el producto de Microsoft en su versión 2005. También espero comentarla pronto y poner links y casos de éxito.
Soluciones Open Source; que también las hay:

  • Pentaho: Una Suitte completa para BI; reporting, análisis, cuadros de mando, "data mining", e integración de datos, y todo esto Open Source!!!.
  • Palo: Esta es una herramienta de Jedox free para entornos windows y linux integrada con MS Excel. Ideal para escenarios financieros (presupuestación y otros) ya que permite introducción de datos desde páginas web desarrolladas sobre Excel. Algo curioso, de verdad.

Así que manos a la obra!, .... pero primero voy a montarme un entorno virtualizado para poder probar por separado algunos de estos productos. En breve iré comentando alguna de estas.

hasta la próxima

sábado, 20 de septiembre de 2008

Primeros comienzos con el blog




Bienvenidos a mi nuevo blog de tecnología, concretamente con esto del BI o, como un amigo mío diría, "bisnisintelillens".
Voy a intentar contaros mis experiencias desde hoy mismo en adelante aunque también iré comentando mi experiencia en los últimos 4 años con una de mis herramientas preferidas, "QlikView".


Espero recibir aportaciones, críticas "constructivas", dudas y demás y que estaré encantado de intentar solucionar o bien transcribir la solución que otro lector plantee.


Acualmente dirijo un departamento de informática de una mediana-gran empresa ubicada en Alicante, concrétamente en Elche y desde hace 4 años sentimos la necesidad de "conocer" y "reaccionar" ante datos concretos que, diariamente, sucedían en nuestra propia empresa pero que su desconocimiento nos impedía ponerles solución.
Existe un gran desconocimiento en torno a lo que es y no es BI y a las numerosas aplicaciones que se pueden cubrir con una herramienta de este tipo.

Como toda herramienta que se instala en una empresa debe seguir unas pautas y no debemos dejarnos llevar por su vistosidad (mayor o menor según la herramienta que se seleccione). Una buena recomendación (o como dicen por ahí "the Best practices") y quizá la más crítica, es entender y fijar bien los objetivos y expectativas de gerencia, dirección y demás usuarios que vayan a explotar la solución.
Importantísimo es tener siempre una visión global de la empresa, parte vital a la hora de interrelacionar datos entre sí. Pensad que BI no es un perro verde y que no hay ningún misterio en estas soluciones (a nivel del que explota los datos ;-) ).
BI es solo un "recolector" de datos de diferentes plataformas, bases de datos relacionales o no, ideas y, una forma de representar todo esto de la forma más sencilla e intuitiva posible para quien, de verdad, debe tomar decisiones con estos datos.
Hay otro concepto que surge a menudo y tiende a confundir a las personas; "Reporting".
BI está por encima del reporting y todos conocemos mejor o peor herramientas de este tipo (Crystal Reports por ejemplo).

Todo esto y más cosas iré publicándolas en este blog para compartir mi concepto de BI y poder ayudar a todo aquel que, como yo, se da cuenta día a día de que cada vez sabe menos y que siempre hay cosas ahí fuera que aprender.

A todos aquellos a los que les interese este mundo y que me permitan robarles una parte de lo más preciado que tenemos (el tiempo), les dedico este blog y todo el tiempo que las obligaciones me permitan.

Un saludo