jueves, 3 de enero de 2013

Cuadro de entrada - Reglas de Entrada

El objetivo es permitirle al usuario ingresar los valores Inferior y Superior de un Rango (variables vAmarilloInf y vAmarilloSup) para realizar un análisis What-if. 

Para arrancar se hizo con un Objeto Calendario/Deslizador porque queda DI-VI-NO!. Pero siempre esta bueno tener la chance de no usar la opción linda y simplemente escribir los valores que queremos en un cuadro de entrada. 
La joda con esta opción es que el usuario se puede mandar cagadas, como poner valores en el Tope Inferior superiores al que existe en el Tope Superior o viceversa, y para ser sinceros dudo que no se desfigure todo cuando eso pase. Entonces vamos a añadir una regla de entrada para estas variables.

De entrada Qlikview te ofrece un par de reglas básicas: Numero, Caracter Único, Entero, Entero positivo, Numero Positivo. Cambien pueden ser solo valores predefinidos o la mas explotable de todas "Personalizada". Acá vamos a meter mano nosotros.

Para que la variable vAmarilloInf no pueda ser superior a vAmarilloSup:

Para cualquier mente falta de entusiasmo por la deducción y/o análisis de código, aclaro que ($) toma el valor ingresado por el usuario y no se setea la variable si no se cumple la condición a evaluar.


El resultado final, como dijimos antes, son unos flamantes selectores de rango:





Dejo un ejemplo copado que encontré por ahí en busca de como hacer esto:

=Index($, '/') > 1 and Index($, '.') > 1
Con ese código la variable aceptara por ej. "3/3.3" o "A.B/C" pero no  "10000".

miércoles, 2 de enero de 2013

LOAD *

Es parecido, pero no, pero casi!, pero no.
Los muchachos de Qliktech recomiendan escribir todos los campos que necesitamos en una sentencia LOAD en lugar de usar *, por permanece y claridad de código
Lo que nunca leí ni escuche es que si tratamos de leer un archivo vació y estamos usando LOAD *, NO TIRA ERROR! Cosa que si pasa escribiendo cada campos.

Por suerte la solución es mas que simple, basta con verificar el peso del archivo.

LET tamaño_archivo = FileSize([..\..\QVD\STG_CODIGOS_01.QVD]);
IF NOT ISNULL(tamaño_archivo) THEN
LOAD MANDT,SERV, APPLS,ERGSL,HSLVT FROM [..\..\QVD\STG_CODIGOS_01.QVD];
ENDIF; 

lunes, 19 de noviembre de 2012

QlikView Power Tools

Parece interesante, es una serie de herramientas para un Administrador de Qlikview Server, tirando a avanzado.
Si bien, aún no me puse a jugar lo dejo publicado para el que no las conoce y le puedan servir y para recordarme de alguna forma que tengo que revisarlas :P

QlikCommunity: PowerTools

miércoles, 14 de noviembre de 2012

Dimensiones Dinamicas

Buscando otra cosa, me encontré con este que me pareció un ejemplo copado de lo util que puede ser el uso de variables: Dynamic Dimensions in QlikView Chart

Resumiendo un poco, el tipo crea una variable donde arma una lista de campos por los que quiere evaluar un gráfico de barras, y con un botón que aumenta el indice va "recorriendo" las diferentes dimensiones que enumero en la variable. 
Con mucha menos complicación esto lo hubiera logrado usando grupos jerárquicos o ciclicos (Grupo Jerárquico "Dinámico"), pero bueno, fue su primer post sobre Qlikview, una solución bastante buena encontró sin conocer los grupos de dimensiones.

Tamaño de fuente de una dimensión y/o expresión 1

Bueno, definitivamente esto es algo que Qlikview tiene para mejorar. 
Si bien uno tiene la opción para editar el Formato de Texto en dimensiones y expresiones, no es posible editar el formato desde acá pues no existe código script para hacerlo (al menos hasta la versión 10 que es en la que lo probé), lo cual imposibilita colocar condiciones para mostrar los datos de una u otra manera.

Mucha gente recomienda probar con tags como <B> y <H1>, tal y como se haría en un entrañable HTML, pero nadie publico resultados positivos al respecto y personalmente no observe cambio alguno donde lo apliqué.

En caso de las expresiones de una tabla simple o pivotante podemos colocar condiciones de formato directamente en las propiedades del gráfico, solapa Efectos Visuales.


Para los gráficos que no tienen esta solapa, la recomendación para mostrar dimensiones y/o expresiones en un formato u otro es crear 2 expresiones iguales, con distinto formato y mostrarla u ocultarla según corresponda. Una forma de "mostrar y ocultar" la expresión seria colocando en la expresión: if(condicion,calculo,0)De esta manera, cuando no se cumpla la condición, la expresión no se visualizará por ser 0 su valor.

Un ejemplo de esto mismo:
Por claridad defino 3 expresiones, una que será condición de cual "color" mostrar y a la vez el calculo a realizar.



Análogo a Bajo esta la expresión Alto donde la condición es cond>1500. Y el resultado que obtenemos es un una barra que varia de color según si tenemos mas de 1500 horas por mes.



Un detalle, llegan a ver que la separación de las columnas varia? eso se debe a que siempre deja el espacio para las 3 barras, la solución es apilar las columnas. Para esto tampoco podríamos tener la expresión auxiliar cond, pues las barras flotarían ejeje. 

Con cond y apilando (dicho sea de paso, usando esta característica es como se puede graficar un gantt en Qlikview).
 Sin expresión auxiliar cond:

viernes, 9 de noviembre de 2012

Definir variables desde un archivo plano - Parte 2

Ampliando mi excel de variables me encontré con el siguiente caso.
Si una variable contiene una expresion que utiliza otra variable aún no declarada, la variable queda definida con un error interno:


En la imagen, se puede apreciar como al leer de la tabla V, en la variable l_val la expresión utiliza  la variable vMesActAñoAnt, pero al crear la variable vBASE_VENTAS queda un internal_error. Esto se debe a que intenta evaluar la variable vMesActAñoAnt que aún no existe.

La solucion fue un ligero cambio en el codigo:

FOR i = 1 TO NOOFROWS('V')
     l_var = PEEK('V.NOMBRE', $(i)-1, 'V');
     $(l_var) = '='&PEEK('V.EXPRESION', $(i)-1, 'V');
NEXT i;

De paso, también le concatené el igual adelante (=), para no tener que poner $(=variable) cada vez que la quiero usar en una expresión, de ese modo solo tengo que poner el nombre de la variable. Por ej. SUM(vBASE_VENTAS)

jueves, 8 de noviembre de 2012

Definir variables desde un archivo plano - Parte 1

Una de las utilidades mas lindas que tienen las variables en QV es que podemos guardar en ellas código y luego reutilizarlo donde queramos.

En mi caso necesito aplicar el siguiente calculo a 8 graficos distintos: 
(if(PASOS <13, acumY/PASOS, acumY/12)-(if( PASOS<13, (acumXY - ((acumX * acumY)/PASOS)) / (acumX2 - (pow(acumX,2)/PASOS)),(acumXY - ((acumX * acumY)/12)) / (acumX2 - (pow(acumX,2)/12)))*if(PASOS <13, acumX/PASOS, acumX/12)))+(if( PASOS<13,(acumXY - ((acumX * acumY)/PASOS)) / (acumX2 - (pow(acumX,2)/PASOS)),(acumXY - ((acumX * acumY)/12)) / (acumX2 - (pow(acumX,2)/12))))*MESAÑO

Esta claro que el día que tenga que cambiar este calculo voy a preferir cambiarlo en una sola vez en lugar de hacerlo 8 veces, así que voy a guardar el calculo en un excel y con eso defino una variable que reutilizare en los 8 gráficos.

El Excel: variables.xlsx

El código para generar cada una de las variables declaradas en el excel:

QUALIFY *;
V:
LOAD NOMBRE,
EXPRESION
FROM ..\..\..\CFG\variables.xlsx (ooxml, embedded labels, table is Hoja1);

UNQUALIFY*;

FOR i = 1 TO NOOFROWS('V')
l_var = PEEK('V.NOMBRE', $(i)-1, 'V');
l_val = PEEK('V.EXPRESION', $(i)-1, 'V');
SET $(l_var) = $(l_val);
NEXT i;

DROP Table V;

Ejemplo de utilización de la variable en un gráfico:  SUM($(=v_estimaicon_lineal))