- 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 thenfor 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").ClearEnd Sub
Sub Seleccion2
set mySelections = ActiveDocument.fields("Categoria").GetSelectedValues
dim SelectedItems if mySelections.Count <> 0 thenfor 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
Sum({$<[Categoria]={$(Seleccion 1)}>} Importe)
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.
1 comentario:
Para que este ejemplo funcione, el código debe estar indentado de otra forma:
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
Publicar un comentario