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