El ejemplo consiste en utilizar funcionalidad nueva para permitir que, en una grfica
(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 ejecucin.
En este ejemplo vamos a tocar los siguientes aspectos:
Set Anlysis: Este ejemplo se resuelve de una forma ms "rentable" utilizando esta nueva funcionalidad de lgica de conjuntos.
Editor de mdulo: para definir los conjuntos, utilizaremos 2 pequeas funciones de cdigo 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 pin" unos datos de venta para unas categoras que tambin se cargar con la sentencia InLine. Podramos haberlo hecho con una excel o una tabla de SQL.
Os recomiendo que practiquis con un documento nuevo y lo hagis 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 , ms 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:
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 arndanos,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 grfico para comprobar que podemos sacar las ventas por categora. Creamos un nuevo objeto de tipo "grfico" y seleccionamos el tipo "grfico de barras", seleccionamos la dimensin "Categora" y como expresin "Sum(Importe)". El resultado se debera parecer a lo siguiente A continuacin, vamos a aadir a nuestra hoja un cuadro de lista para que el usuario pueda seleccionar los valores para el campo "Categora" y hacer los grupos.
Aadimos 2 botones llamados respectivamente "Seleccionar Grupo 1" y "seleccionar Grupo 2".
Accedemos al editor de mdulo (Ctrl + M) y creamos 2 rutinas
Sub Seleccion1 End Sub
Sub Seleccion2 End Sub
y las asociamos respectivamente a los botones anteriormente creados.
El cdigo 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
Una vez que ya tenemos el cdigo y hemos asociado las rutinas a los botones ya estamos preparados para crear un grfico que represente la suma de las 2 selecciones.
Creamos un grfico sin dimensiones y le aadimos 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 seleccin fija independiente de las del documento, solo que como novedad, no tiene por qu ser una seleccin fija sino depender de una variable ("seleccion 1") que lo hace dinmico al usuario. Qlikview sustituir antes de evaluar la expresin ( a esto se le llama expansin de una variable) $(variable) por algo como {"Postres","Bebidas", ...}.
El grfico quedara ms o menos de la siguiente manera...
Ahora ya podis comprobar el resultado para lo que debis seleccionar varias categoras y entonces pinchis en el botn 1, volvis a seleccionar otras categoras y pinchis en el botn 2 y vis viendo cmo cambia la ltima grfica.
Adems, podis comprobar que aunque el usuario haga otras selecciones, la grfica no cambia.
Para terminar vamos a agregar una lnea de referencia en el grfico que represente la media de las ventas, para esto editamos las propiedades del grfico, en la pestaa "presentacin", creamos una lnea de referencia con la expresin AVG({1} Importe).