Enterprise Performance Management: Como hacerlo con QlikView

Es bastante popular que QlikView puede leer datos de diferentes fuentes e integrarlas haciendo mashups. Pero también es bastante popular la creencia de que QlikView no puede escribir datos en su base, lo cual es un concepto bastante erróneo ya que hay no una sino varias formas de hacerlo.

Esta capacidad de escribir datos además de leerlos suele ser mencionada en herramientas de BI  como “write-back” y está muy relacionada, casi como condicionante, para poder emplear una herramienta de BI en EPM (Enterprise Performance Management) donde un claro ejemplo es el proceso presupuestario corporativo donde los diferentes responsables de presupuesto van proponiendo los valores objetivos y ajustándolos en un proceso ida y vuelta. También otros escenarios son la formulación de la estrategia, el proceso de administración financiera,  la cadena de abastecimiento, etc.

Esta es una necesidad muy común para cualquier empresa y curiosamente no es muy conocida ni explotada en QlikView, posiblemente por cierto desconocimiento de la “receta justa”.

Para usarla se recurre a la instrucción “INPUT FIELD” que es la forma de declarar a un campo del modelo como  “de entrada” (no confundir con variable) y no solamente de lectura que es lo más común.

Hay muchos posts sobre esta funcionalidad explicando sus pros y contras y  en general todas las explicaciones presentan alguna dificultad para implementarla exitosamente.  El principal problema es que los inputs y/o modificaciones que pudiera hacer un usuario solo quedan en la “sesión” de ese usuario (en un escenario de QV server), por lo que no hay una forma sencilla y clara de compartir los datos ingresados con el resto de los miembros del proceso, ni tampoco de persistir la información.

Ahora bien, pensemos como podría ser un escenario (muy simplificado) donde esta funcionalidad de escritura se pudiera emplear en forma exitosa:

1- Comienza el proceso y se le presentan al usuario datos históricos (p.ej los gastos del año anterior como objetivo base) y una columna de presupuesto actual.

2- El usuario completa la columna de presupuesto y confirma.

3- El resto de los usuarios ve los datos ingresados y pueden modificarlos haciendo sus comentarios.

4- Se repite de 1 a 3 hasta que se llega a un acuerdo.

5- Se confirman los cambios y se aprueba el presupuesto.

Suena bien: el punto 1) lo resolvemos declarando el campo presupuesto como un INPUT FIELD, pero ¿como logramos que los restantes usuarios tengan visibilidad inmediata de lo ingresado para darle fluidez al proceso?

Por suerte contamos con las macros de QlikView y la instrucción “ServerSideExportEx”: que nos permite tomar una tabla pivotante, simple o un “Cuadro de Tabla” y grabar su contenido en distintos formatos DENTRO del servidor QlikView. Destaco esto porque en principio (y en general, aunque no siempre) las macros se ejecutan exclusivamente del lado del cliente.

Al grabar la tabla que el usuario editó y completó del lado del server podemos usarla como input para recargarla nuevamente dentro del modelo (ver mi post sobre EDX y recarga on-demand) con lo cual tras pocos segundos de que el usuario confirma las modificaciones éstas estarán disponibles para los restantes actores del proceso, workflow mediante, que deberá ser desarrollado ad-hoc aunque no es algo complejo.

Aquí va el Script QV de un ejemplo muy sencillo, basado en un archivo xml que cree usando Excel:

inputfield Presupuesto; // Todos los inputs fields deben definirse al comienzo del script

..............
..............

Tesoreria:
LOAD Cuenta,
    Fecha,
    Monto,
    Tipo,
    Presupuesto       //Campo que vamos a habilitar para edición
FROM Tesoreria.xml (XmlSimple, Table is [TableBox/_empty_]);

Y en nuestra pantalla deberemos  crear mínimamente una tabla y un botón:

Debido a la declaración “InputField Presupuesto” en la primer línea de nuestro script, luego de ejecutarlo, observaremos que al pasar el puntero del mouse sobre las celdas de la columna “Presupuesto” aparece el ícono destacado en la imagen. Al cliquear sobre él la celda se pondrá en modo de edición permitiéndonos tipear datos:

Luego le asociamos al botón una  Acción  de tipo “Externa” de ejecución de macro:

Finalmente cliqueando en el botón de “Editor de Módulo” (o en Herramientas / Editor de Módulo (CTRL + M) ponemos el siguiente código VBS para la macro:

Sub Guardar_en_Server
	set tb = ActiveDocument.GetSheetObject("TB01") //TB01 es el id de la tabla que vamos a exportar
	tb.ServerSideExportEx "C:\Blog\Tesoreria.xml" , ";" , 3 '0=HTML, 1=Text, 2=Bitmap, 3=XML, 4=QVD, 5=BIFF: posibles formatos de grabación
end sub

Donde para obtener el id de la tabla (TB01) debemos ir a las propiedades del objeto:

Luego de que el usuario ingresa los  los datos en la tabla y cliquea el botón “Guardar” la tabla será grabada en el servidor de QlikView en la carpeta C:\Blog\Tesoria\Tesoreria.xml (el path debe existir en el servidor) y si abren el archivo (p.ej con Excel) verán que el archivo efectivamente fue modificado.

A continuación deberán disparar mediante código en la misma macro (preferentemente otro Sub) el código para recargar el qvw manualmente  y entonces la información será accesible al resto de los usuarios.

Ultimas consideraciones:

1- Solo funciona si se usa haciendo un “Open in Server” desde el cliente QlikView o se usa el plugin (Activex) para IExplorer. No funcionará usando cliente Ajax.

2- Aplican las mismas consideraciones de seteos de seguridad que en el EDX (ver post)

3- Si luego de definir un campo como input field y ejecutar el script no aparece el ícono de edición sobre la tabla se deberá simplificar: a) el script y operaciones relacionadas con dicho campo y/o b) las relaciones de la tabla del modelo donde está el campo , hasta quizás, dejarla sin relacionar.

4- Si al recargar aparece un mensaje de error indicando que no hay un identificador único para las filas se deberá crear uno usando la instrucción rowno() como un campo más del LOAD.

5- Cualquier idea, feedback, comentario, mejora o devolución será bienvenida !

Saludos y espero les sirva!

Acerca de pparnisari
Casi 44 vueltas al sol. Licenciado en sistemas. Curioso, investigador, excelente para resolver problemas prácticos. Casado, 2 hijos, cada vez con mas preguntas y respuestas mas en duda. Almost 44 laps to the sun. System engineer. Curious, researcher, great for solving practical problems. Married, 2 children, each time with more questions and more answers in doubt.

2 Responses to Enterprise Performance Management: Como hacerlo con QlikView

  1. David Serey dice:

    Hola,
    Realice el ejemplo que dices, pero al momento de ingresar por web y presionar el boton guardar que contiene la macro, esta me arroja un mensaje de error: “fallo la comprobacion de la macro. Se perderá funcionalidad”.
    Si lo ejecuto desde la Herramienta Qlikview no tengo problemas, tienes idea de por que ocurre esto?

    Desde ya muchas gracias

    Atte.
    David Serey

    • pparnisari dice:

      David:

      Ese error indica (en un modo poco claro de QV) que el script (Java o VB script) tiene un error.
      El mismo puede deberse a un error de “typeo” o sintáxis, o mas complicado de hallar: algún objeto o propiedad que estás invocando pero el componente (seguramente algún Activex) no está registrado y/o la versión que está registrada no es la que corresponde.
      Si no lo podés ubicar desde el entorno de QV te aconsejo que copies el script y lo lleves a un entorno que muestre errores de modo más amigable (p.ej: el editor de macros de VBA de excel)

      Slds

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: