Академический Документы
Профессиональный Документы
Культура Документы
NDICE
1 INTRODUCCIN .................................................................................... 5
Instalacin de los Materiales del Curso......................................................................... 5
Versiones de Programa.................................................................................................. 5
Formatos de Texto ......................................................................................................... 5
5 SCRIPT AVANZADO............................................................................ 35
Una condicin en un campo de una tabla .................................................................... 35
Agregar datos .............................................................................................................. 35
Unir Tablas .................................................................................................................. 35
Concatenacin ............................................................................................................. 35
Carga precedente ......................................................................................................... 37
1 INTRODUCCIN
Muchos alumnos vienen a este curso habiendo recibido ya alguna formacin previa en
QlikView. Este primer captulo simplemente presenta unas convenciones generales acerca
de cuestiones de formato empleadas en este manual.
Versiones de Programa
El presente curso se ha realizado con la versin 10.00 de QlikView en ingls,
ejecutndose sobre Windows 7. Por lo tanto, si est utilizando otro tipo de lenguaje o
sistema operativo, puede que encuentre pequeas diferencias en el aspecto grfico de las
ventanas y los cuadros de dilogo.
Formatos de Texto
Los ejercicios y acciones que se soliciten al alumno aparecern introducidos por un logo,
como se observa a continuacin:
Ejercicio/Haga lo siguiente:
Aqu tiene un ejemplo de instrucciones que deber seguir para realizar un ejercicio
que contiene una secuencia de pasos:
1
Todos los comandos, as como los nombres de dilogos, mens y botones, se encuentran
expresados en el siguiente tipo y estilo de letra: Archivo - Abrir
Todos los nombres de cuadros de lista, grficos y datos especficos de los cuadros de lista,
etc. se hallan en el siguiente tipo y estilo de letra: Pas
Todos los nombres de archivo se hallan expresados en el siguiente tipo y estilo de letra:
QlikViewCourse.qvw
Los Consejos y Notas vienen destacados en un recuadro sombreado, como se muestra a
continuacin:
Esta frase de muestra se ha utilizado para ilustrar puntos importantes del texto, consejos y
notas que deber tener en cuenta segn avance en los contenidos del curso.
Depuracin de Errores
La depuracin es un arte. Existen guas de prcticas recomendadas y directrices que le
ayudarn en el proceso de depuracin. Lo mejor en un proceso de depuracin es cambiar
algn elemento en un momento dado y luego examinar el impacto de dicho cambio. Si se
modifica ms de un elemento sin analizar el efecto producido la depuracin se convierte
en un proceso difcil. Esta parte del curso no le ensear cmo depurar una aplicacin
pero le pondr en la direccin adecuada si su aplicacin no funciona como es debido o no
tiene el aspecto que usted desea. Estos procesos y herramientas bsicos son el mejor
punto de partida para depurar una aplicacin QlikView.
Adems, durante la ejecucin de script en modo depuracin, el depurador permite una
monitorizacin de las variables. Esto es til para validar el estado de las variables en las
diversas etapas de la ejecucin de script.
Recuerde siempre asegurarse de que el recuadro Generar Archivo log (archivo de
registro) est marcado en Configuracin|Propiedades de Documento|General. Recuerde as
mismo que las comas y puntos y coma que falten o estn fuera de lugar son una fuente de
mensajes de error. Verifique estos problemas comunes lo primero.
El Depurador
Donde haya un Punto de Interrupcin, compruebe las Variables
Los puntos de interrupcin detienen la ejecucin de script para darle la oportunidad de
depurar. Se pueden colocar en un script con la opcin Depurar que hay en el editor de
script de QlikView. Los puntos de interrupcin slo detienen el procesamiento del script
si se sitan en la lnea de la primera sentencia de un bloque de cdigo que termine en
punto y coma. Colocar un punto de interrupcin en cualquier otra lnea del bloque de
cdigo no tendr efecto alguno en cuanto a detener el script a medida que ste se ejecuta.
Como podr observar en la figura superior, hay tres puntos de interrupcin situados en las
lneas 38, 39 y 44. Observe que el depurador no se detendr en la lnea 39, dado que no es
la primera sentencia del bloque de cdigo.
Esto podra ser una sentencia LOAD, una SQL LOAD con un LOAD precedente, o una
sentencia LOAD agrupada. Si hace el seguimiento de cada sentencia hacia atrs desde el
punto y coma ver que mientras la palabra clave MAPPING de la lnea 39 forma parte de un
bloque de cdigo que termina en punto y coma, MAPPING no es la primera lnea del bloque
de cdigo, Shippers: s lo es.
Variables
Si ha creado variables en el script de carga, podr visualizar el valor de una variable a
medida que se carga el script. Le sorprender ver que no contiene los valores esperados.
Cree variables adicionales para investigar ms estados durante la carga de script.
Ejercicio: Depuracin
Haga lo siguiente:
1
Podr ver asimismo dnde hay valores NULOS entre las tablas y en los campos. Los
valores NULOS pueden afectar adversamente a una aplicacin y a la seleccin de datos.
Ejercicio:
Haga lo siguiente:
1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
2 Abra la aplicacin KeyFields.qvw y vaya a la pestaa Principal donde ver
una tabla. Seleccione una celda que contiene datos y observe que cualquier fila
con un valor de campo idntico se mostrar con las correspondientes columnas
de datos con las que se asocia.
3 A continuacin, elimine las selecciones (botn Borrar) y seleccione una celda
que tenga un valor nulo (la representacin por defecto es un carcter de un
guin -). Observe que no ocurre nada.
11
Un LEFT JOIN
Una operacin de tabla MAPPING
Malos datos
Malas correspondencias entre campos clave
Los campos clave conectan tablas en QlikView, pero examinarlos no siempre mostrar la
informacin que usted espera ver. Mostrar un campo clave en un objeto de hoja como un
Cuadro de Tabla, muestra todos los valores posibles del campo clave en todas y cada una
de las tablas conectadas, cualquier tabla(s) podra contener valores distintos que no se
correspondan con otros valores en ninguna otra tabla(s).
Para entender lo que est ocurriendo en cada tabla, o en cada parte de un campo clave,
cargue una copia del campo clave en cada tabla y renombre de forma nica cada copia del
campo clave con una clusula AS.
Re-ejecute su documento, cree cuadros de lista para todos los campos, a continuacin
haga un SELECT ALL e uno de los campos que es un alias del campo clave.
Por ltimo, SELECCIONE LOS EXCLUIDOS en el campo clave haciendo clic con el botn
derecho en el cuadro de lista. A travs de la seleccin y exclusin, podr ver qu
elementos se han unido mediante el campo clave y cules no.
Este problema normalmente se da cuando faltan datos. Tambin puede devolver
resultados negativos si se est buscando a niveles discretos diferentes de informacin en
el modelo. Esta situacin se ver ms adelante en el curso.
Ejercicio:
Haga lo siguiente:
1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
2 Abra la aplicacin KeyFields.qvw
3 Comente el script en la pestaa Standard Join y elimine el comentario al script
en la pestaa Copy of Keys.
4 Guarde y recargue.
5 Observe que el campo clave de cada tabla se ha renombrado de forma
nica/exclusiva, por ej. Key como AS Key1_Table1.
6
Tome una muestra de los datos y no cree un modelo de datos que supere a las
dos tablas, si fuera posible. No debera haber ms de tres columnas en cada
tabla ni ms de quince filas. Utilice el asistente Inline o Excel para crear las
tablas.
Haga lo siguiente:
1
13
Expresin
Etiqueta
Sum(LineSalesAmount)
Sales
Count(LineNo)
Lines
Avg(LineSalesAmount)
AvgSales
Sum(Quantity)
Qty
Etiqueta
Qty /Lines
AvgQty
Sales/Qty
UnitPrice
Haga lo siguiente:
1
Abra una copia de trabajo del archivo Dates.qvw y cargue los datos del
archivo Dates.XLS en la carpeta Datasources. Cree dos tablas en el script. Su
script debera mostrar ms o menos el siguiente aspecto:
15
17
3 TABLAS DE CORRESPONDENCIA
Objetivos
A veces se necesita aadir un campo extra a una tabla para emplear una combinacin de
campos de diferentes tablas, o se desea aadir un campo para limpiar la estructura de
datos. QlikView tiene una forma eficaz de aadir campos aislados a una tabla y se
denomina tablas de correspondencia. En este captulo analizaremos el funcionamiento de
las tablas de correspondencia.
Cambiando nuestra tabla Quarters a una tabla MAPPING, podremos integrar el campo
Quarters en la misma tabla que Month (la tabla Orders).
El prefijo MAPPING se emplea en una sentencia LOAD o SELECT para crear una tabla de
correspondencia. Las tablas ledas mediante MAPPING LOAD o MAPPING SELECT reciben un
tratamiento diferente de las otras tablas. Se almacenan en un rea aparte de la memoria y
se usan nicamente como tablas de correspondencia durante la ejecucin de script. Tras la
ejecucin de script se descartan automticamente.
Una tabla de correspondencia debe tener dos campos: el primero contiene valores de
comparacin y el segundo los valores deseados de correspondencia. Ambos campos han
de ser nombrados, pero los nombres no tienen ninguna relevancia por s mismos. Los
nombres de campo no tienen conexin alguna con los nombres de campo de las tablas de
entrada normales y corrientes. Cuando las tablas de correspondencia se utilizan para
asociar un determinado valor de campo o expresin, dicho valor se comparar con los
valores del primer campo de la tabla de correspondencia. Si lo encuentra, el valor original
ser reemplazado por el correspondiente valor del segundo campo de la tabla de
correspondencia. Si no lo encuentra, no se efecta reemplazo alguno.
La sintaxis es la siguiente:
mapping ( load statement | select statement )
19
Ejercicio
Haga lo siguiente:
1 Inicie QlikView y guarde una copia de trabajo del archivo QlikView
MappingTables.qvw en el directorio de trabajo de este captulo
(C:\QlikViewTraining\DeveloperII\Chapter03).
2 Abra el dilogo Editor de Script.
3 A continuacin vamos a transformar la carga de la tabla Quarters en una carga
de correspondencia.
4 En la pestaa Main elimine el comentario de la sentencia load de la tabla
Quarters que desea utilizar. Asegrese de que la otra tabla contine comentada
para que no lea de dos tablas Quarters.
5 Aada _Map al nombre de tabla.
6 En la lnea siguiente, introduzca MAPPING frente a la sentencia LOAD.
7 Cuando haya terminado, verifique que esta seccin de su script se parece a lo
siguiente:
Quarters_Map:
MAPPING LOAD
rowno() as Month,
'Q' & Ceil(rowno()/3) as Quarter
Autogenerate(12);
No guarde y cierre justo ahora. Si recarga los datos ahora perder la tabla y el
campo Quarters porque las tablas de correspondencia son temporales. Sin
embargo, podemos usar la tabla Quarters_Map en nuestro script (siempre y
cuando la utilicemos despus de haberla definido en el script). Para ello,
emplearemos la funcin applymap.
La sintaxis es la siguiente:
applymap( 'mapname', expr, [ , defaultexpr ] )
La funcin applymap asocia cualquier expresin de una tabla de
correspondencia previamente cargada. Mapname es el nombre de una tabla de
correspondencia previamente cargada por una sentencia MAPPING LOAD o
MAPPING SELECT. El nombre debe ir entre comillas simples. Expr es la
expresin cuyo resultado se har corresponder (se mapear). Defaultexpr es
una expresin opcional que se utilizar como el valor de correspondencia por
defecto si la tabla de correspondencia no contiene ningn valor de
correspondencia para expr. Si no se suministra opcin alguna por defecto, el
valor de expr se devuelve sin modificar.
10 Abra el Visor de Tablas para verificar que la tabla Quarters se ha ido y que
ahora hay un campo denominado Quarter en la tabla Orders.
21
MonthYear
Completaremos nuestros campos de la dimensin de tiempo creando un nuevo campo que
convierte cada mes en nico. Hay, por supuesto, varias maneras de lograr esto. En este
curso, crearemos el campo MonthYear empleando las funciones de fecha de QlikView
basadas en el campo OrderDate, junto con una funcin de formato de fechas para
proporcionar el formato de visualizacin correcto para nuestro nuevo campo de mes.
Ejercicio
Haga lo siguiente:
1
23
Ejercicio
Haga lo siguiente:
1
Como podemos ver en el Visor de Tablas, algunas tablas slo tienen dos campos.
Dichas tablas podran mapearse con las tablas que las conectan. Comencemos
haciendo corresponder la tabla Shippers con la tabla Orders.
Cambie la tabla que hace referencia al script por la tabla Shippers segn se ve
a continuacin.
Shippers_Map:
MAPPING LOAD
ShipperID,
CompanyName AS Shipper;
SQL SELECT *
FROM Shippers;
25
7
8
Ejercicios extra
Haga lo siguiente:
1
Existe alguna otra tabla(s) que pueda(n) ser asociada(s) a otra tabla? Mire en
el Visor de Tablas. Cercirese de que busca tablas con slo dos campos.
Comntelo con el instructor del curso.
//*************** Divisions ***************
Divisions_Map:
MAPPING LOAD
DivisionID,
DivisionName;
SQL SELECT *
FROM Divisions;
//*************** Customers ***************
Customers:
LOAD Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
DivisionID,
applymap ('Divisions_Map', DivisionID)
as
Division,
Fax,
Phone,
PostalCode,
StateProvince;
SQL SELECT *
FROM Customers;
27
En nuestros datos de ejemplo, hay una tabla Budget (Presupuesto) para Employees y
Offices. Vamos a cargar esto en nuestro documento QlikView. La tabla Budget se ha
creado como una tabla cruzada y necesitaremos convertirla cuando la leamos en
QlikView. Aadiremos tambin un campo a la tabla Budget que nos permita modificar los
valores del presupuesto para ayudarnos en la planificacin.
29
Haga clic en Tabla Cruzada para modificar la tabla de una tabla cruzada a una
tabla normal.
Haga clic en los Campos Qualifier y teclee 2 a fin de expandirlos para que
incluyan ambos campos Office y EmployeeID en color lila.
Un campo cualificador en una tabla cruzada es un campo que no debera
alterarse durante la carga de la tabla cruzada.
2005 no es un campo cualificador. Es el primero de los campos que queremos
transformar para que los aos se siten en un campo y los valores del
presupuesto en otro.
31
Haga lo siguiente:
1
Vaya el Editor de Script y coloque el cursor justo despus de las sentencias SET
en la pestaa Main.
entrada. Tiene que indicar esto en el script antes de pasar a leerse el campo en
una tabla.
4
Cree un nuevo Cuadro de Tabla titulado Sales Budget (Presupuesto de Ventas) que
contenga los siguientes campos: SalesPerson, BudgetYear, BudgetAmount y
BudgetPrognosis.
33
5 SCRIPT AVANZADO
Hay varias mediciones clave que crear en este captulo. Necesitamos calcularlas en el
script. stas son OrderLineAmount, CostOfGoodsSold y Margin. Para hacer estos campos
de clculo, necesitamos recurrir a script avanzado. Tambin tendremos que crear un
campo clave denominado CategoryType.
Objetivos
Aprender y utilizar
Condiciones en tablas
Agregacin
Unin de tablas
Carga Precedente
Agregar datos
Una de las mediciones clave en este captulo es OrderSalesAmount. Necesitamos calcular
sta en el script. Por el momento ya tenemos LineSalesAmount pero queremos el total por
cada pedido. Para ello, necesitamos agregar LineSalesAmount.
Para agrupar o agregar datos se emplea la clusula GROUP BY en la sentencia LOAD. En
este caso, necesitamos agregar los datos en la tabla OrderDetails por OrderID.
Unir Tablas
Queremos aadir el campo OrderSalesAmount a la tabla Orders. Para ello podemos
aadir los valores de esta tabla a la tabla Orders. Para usar dos tablas juntas como en este
caso, hemos de comenzar por combinarlas en una sola. Aqu, el JOIN entre tablas se puede
realizar contra la base de datos fuente o podemos emplear un comando QlikView JOIN.
Como ya tenemos los datos fuente que necesitamos cargados en la memoria, utilizaremos
la sentencia JOIN LOAD en la tabla que acabamos de crear.
Consejo: Las malas uniones pueden traer errores de penalizacin en cuanto al empleo de
memoria. Si le llega un error que anuncia Sin memoria, asegrese de comprobar
doblemente su script y su modelo de datos.
Concatenacin
Otra forma de unir datos procedentes de mltiples tablas es mediante la concatenacin.
Hay dos maneras de concatenar los datos. A continuacin analizaremos cada una de ellas.
35
Concatenacin automtica
Si los nombres de campos y el nmero de campos de dos o ms tablas cargadas son
exactamente iguales, QlikView concatenar automticamente los resultados de las
diferentes sentencias LOAD o SELECT en una tabla
Ejemplo:
LOAD a, b, c FROM Table1.csv;
LOAD a, c, b FROM Table2.csv;
Concatenacin forzada
Si dos o ms tablas no tienen exactamente el mismo conjunto de campos, an es posible
obligar a QlikView a que concatene ambas tablas. Esto se hace mediante el prefijo
Concatenate en el script, el cual concatena una tabla con otra o con la ltima tabla lgica
creada anteriormente.
Ejemplo:
LOAD a, b, c FROM Table1.csv;
Concatenate LOAD a, c FROM Table2.csv;
Evitar la concatenacin
Si dos tablas tienen el mismo conjunto de campos y por lo tanto se concatenaran
normalmente de forma automtica, podr evitar la concatenacin con el prefijo
NoConcatenate. Esta sentencia impide la concatenacin con cualquier tabla lgica existente
que tenga el mismo conjunto de campos.
La sintaxis es la siguiente:
Ejemplo:
LOAD a, b FROM Table1.csv;
Noconcatenate LOAD a, b FROM Table2.csv;
En nuestros datos, nos han suministrado un conjunto adicional de nuevos empleados que
no estn contenidos an en el archivo EmpOff.xls. Para aadir estos datos, necesitamos
modificar nuestro script de carga.
Carga precedente
La siguiente medida clave que vamos a incorporar es el CostOfGoodsSold (Coste de venta
de productos) Para calcular este valor, necesitamos aadir el campo UnitCost desde la
tabla Products a la tabla OrderDetails. Haremos esto empleando una tabla de
correspondencia y aplicaremos esto a la tabla OrderDetails.
37
Ejercicios
Haga lo siguiente: condicin en un campo de una tabla
1. Inicie QlikView y guarde una copia del archivo AdvancedScripting.qvw en el
directorio de trabajo de este captulo
(C:\QlikViewTraining\DeveloperII\Chapter05).
2. Abra el dilogo Editor de Script y vaya a la pestaa Dimensiones
3. Busque la tabla Categories y coloque el cursor tras el ltimo campo de esta
tabla.
4. Introduzca una coma y pulse INTRO para ir a una nueva fila. Introduzca lo
siguiente para crear el CategoryType.
IF(CategoryID = 5 OR CategoryID = 6, 'Footwear',
'Clothing') AS CategoryType;
Aqu utilizamos una carga LEFT JOIN porque queremos asegurarnos de que no
recibimos ningn valor de Orders que no exista en la tabla Orders. En
QlikView el comportamiento de una unin join por defecto es una unin
externa completa. Por lo tanto, si no hubiera campos que correspondan entre
las dos tablas unidas, usted recibir un producto cartesiano de los registros.
Como estamos especificando OrderID en ambas tablas y estamos
especificando Izquierda (Left), slo se incluirn los registros que se
correspondan con OrderID incluidos en la tabla Orders. Incluimos el campo
OrderSalesAmount porque eso es lo que queremos aadir a la tabla Orders.
3. Guarde y recargue el script.
7. Habr notado que hay muy pocas diferencias entre nuestras dos sentencias
LOAD Employee. De hecho, podemos usar otra caracterstica de QlikView para
cargar los mismos datos en una nica sentencia de carga. Empleando una
especificacin de carcter comodn en el nombre de archivo de FROM,
QlikView cargar automticamente desde todos los archivos que se ajusten a
39
41
Ejercicio extra
Haga lo siguiente:
1. Inicie QlikView y guarde una copia de trabajo del archivo
AdditionalExercises.qvw en la carpeta de crdito extra de este captulo
(C:\QlikViewTraining\DeveloperII\ExtraCredit_Chapter05).
2. Para limpiar el script un poco ms, una la tabla Categories mediante Join con
la tabla Products. Asegrese de no recibir ninguna categora que no exista en
la tabla Products.
//************** Categories table **************
Categories:
LEFT JOIN (Products)
LOAD CategoryID,
CategoryName,
Description AS CategoryDescription,
IF(CategoryID = 5 OR CategoryID = 6,
'Footwear',
'Clothing') AS
CategoryType;
SQL SELECT *
FROM Categories;
43
Anlisis de Conjuntos
QlikView siempre ha sido potente en el clculo de agregados para la seleccin actual de
datos. No obstante, cuando se deseaba comparar resultados de las diferentes selecciones
en un mismo grfico haba que preparar los datos en el script o recurrir a expresiones
complicadas con clusulas if.
El anlisis de conjuntos cambia todo esto, haciendo posible modificar cualquier funcin
de agregacin con cualquier conjunto de selecciones.
El conjunto puede definirse como un marcador, una seleccin sobre la marcha en uno o
ms campos, una funcin de selecciones actuales, la inversa de las selecciones actuales,
las selecciones anteriores, la totalidad de los datos, etc.
Las posibilidades son infinitas y sin embargo la sintaxis es muy clara y sencilla.
Anlisis Indirecto de Conjuntos
Las selecciones en un campo se pueden expresar basndose en selecciones efectuadas en
otro campo, como "Seleccionar todos los valores posibles en Clientes a partir de unas
Ventas del ao pasado.
Visin general
Se pueden emplear conjuntos en las funciones de agregacin. La funcin de agregacin
normalmente agregar sobre el conjunto de todos los posibles registros definidos por la
seleccin actual. Se puede definir un conjunto alternativo de registros mediante una
expresin de conjunto. De ah que un conjunto sea conceptualmente similar a efectuar una
seleccin.
Una expresin de conjunto va siempre encerrada entre llaves, por ej. {BM01}.
Identificadores de conjunto
45
Operadores de conjunto
Hay diversos operadores de conjunto que se pueden utilizar en las expresiones de
conjunto. Todos los operadores de conjunto emplean conjuntos como operandos, como ya
se ha descrito anteriormente, y devuelven un conjunto como resultado. Los operadores
son los siguientes:
+
El orden de prevalencia es
1) Unario menos (complementario),
2) Interseccin y Diferencia simtrica, y
3) Unin y Exclusin.
Modificadores de conjunto
Un conjunto puede modificarse mediante una seleccin adicional o una modificada.
Dicha modificacin se puede escribir en la expresin de conjunto.
El modificador se compone de uno o varios nombres de campo, cada uno de ellos seguido
por una seleccin que debera realizarse en el campo y todo ello enmarcado por signos de
comillas angulares < >. Por ej.
<Ao={2007,2008}, Regin={US}>.
Los nombres de campo y valores de campo pueden registrarse de la forma habitual, por
ej.
<[Ventas Regin]={Costa Oeste,SudAmrica}>.
Hay varias maneras de definir una seleccin:
Una forma simple sera realizar una seleccin basada en los valores de otro campo, por ej.
<FechaPedido = FechaEntrega>. Este modificador tomar los valores seleccionados de
FechaEntrega y los aplicar como seleccin a FechaPedido.
Nota: Si hay muchos valores distintos, ms de 200, evite esta operacin porque consume
mucha CPU.
47
Nota: Las bsquedas no son sensibles a maysculas y tambin se realizan sobre los
valores excluidos.
Consejo: Los conjuntos vacos de elementos, bien de forma explcita, por ej.<Producto =
{}>, o de forma implcita, por ej. <Producto = {"MvilPerpetuo"}> (una bsqueda sin
resultados) implican cero productos, esto es, devolvern un conjunto de registros no
asociados a producto alguno.
Expansiones de Signo-Dlar
Las expansiones de signo dlar son definiciones de reemplazos de texto empleados en el
script o en las expresiones. Este proceso es lo que se conoce con el nombre de expansin,
incluso si el nuevo texto es ms corto. El reemplazo se efecta justo antes de evaluar la
sentencia de script o la expresin. Tcnicamente se trata de una expansin de macro.
Una expansin de macro siempre comienza por $( y termina con ) y el contexto entre los
parntesis define cmo se realizar el reemplazo. Para evitar la posible confusin con las
macros de script en adelante nos referiremos a las expansiones de macro como
expansiones de signo dlar.
Nota: La expansin de macro no tiene nada que ver con las macros de script (VB o Java
script definidas en el mdulo de script).
V
expandir a 0.
Expansiones de signo dlar con Parmetros
Se pueden utilizar parmetros en las expansiones de signo dlar. La variable deber
contener entonces parmetros formales, como $1, $2, $3 etc. Al expandirse la variable,
los parmetros deberan consignarse en una lista separada por comas.
Si el nmero de parmetros formales excede al de parmetros reales slo se expandirn
los parmetros formales que se correspondan con parmetros reales. Si el nmero de
parmetros reales excede al de parmetros formales, se ignorarn los parmetros reales
superfluos.
El parmetro $0 devuelve el nmero de parmetros invocados realmente por una llamada.
Expansin de signo dlar con una Expresin
Se pueden utilizar expresiones en las expansiones de signo dlar. El contenido entre
parntesis deber comenzar entonces por un signo igual:
49
Funcin AGGR
AGGR es una potente funcin de QlikView que devuelve un conjunto de valores de
en el men contextual.
6. Pulse el icono de Tabla Simple (la esquina inferior derecha de los Tipos de
Etiqueta
Expresin
=Only(Year)
Sum({$<Year={$(=Only(Year))}>}
LineSalesAmount)
=Only(Year)-1
Sum({$<Year={$(=Only(Year)1)}>} LineSalesAmount)
Sum({$<Year={$(=Only(Year))}>}
Sales) Sum({$<Year={$(=Only(Year)1)}>} LineSalesAmount)
9. Pulse Finalizar.
10. Guarde su archivo QlikView y contine editando la tabla simple de la
Comparativa Anual.
11. Establezca el criterio de ordenacin de modo que coincida con el que se ilustra
51
16. Pulse Aceptar de nuevo para cerrar el dilogo de Propiedades del Grfico.
17. Con 2009 seleccionado en el cuadro de lista Year que aadi al principio del
53
Solucin:
sum({$<CategoryName={'Babywear'}, Office={4}>} LineSalesAmount)
sum({$<CategoryName={'Childrens wear'}, Office={4}>} LineSalesA-mount)
55
57
Concatenacin
La concatenacin puede servir para reducir el nmero de tablas de hechos en una
estructura si hay suficientes elementos en comn entre las tablas de hechos como para
validar dicha combinacin.
Cuando las tablas de hechos contienen la misma cohesin de informacin y se encuentra
una clave comn entre ambos hechos, una operacin de join externo es preferible a una
operacin concatenate, pues los registros de salida se uniran registro por registro y eso es
adecuado para una operacin a nivel de un nico registro. (Por ej. para un determinado
registro de hechos SalesAndBudget, poder calcular la diferencia entre la cantidad de
ventas y la cantidad de presupuesto.)
Aggr()
Nota: si ya ha terminado el captulo 6, puede saltarse esta explicacin.
Aggr() es una funcin avanzada que permite calcular una agregacin de mltiples
59
Class()
Class() es una funcin de agregacin que puede utilizarse para crear contenedores de
Agregacin dinmica
En QlikView, puede asignar un valor de campo a una variable. En consecuencia, podr
utilizar el valor que la variable tiene en una expresin. Esto es similar a un puntero en la
programacin en C u otros lenguajes de programacin similares.
QlikView calcula la informacin sobre la marcha. Con este enfoque y utilizando una tabla
que contenga las expresiones, podr crear una referencia a las frmulas ubicadas en la
tabla la cual, a su vez, crea una librera de expresiones eficaz que luego puede utilizarse
para cambiar de forma dinmica la presentacin de la informacin.
El usuario podr desplazarse por los KPIs seleccionando las elecciones en un cuadro de
lista.
IntervalMatch
La sentencia de script IntervalMatch facilita la correspondencia de fechas con perodos o
registros con dimensiones de cambio lento, til para crear un modelo de datos plenamente
funcional en las dimensiones de tiempo apropiadas conforme a sus requisitos de negocio.
La implementacin de IntervalMatch requiere unos cuantos pasos adicionales en vez de
aplicar simplemente la funcin, si es que queremos evitar que se creen claves sintticas en
nuestra estructura de datos.
IntervalMatch() es una funcin que tiene la misma funcionalidad que un BETWEEN en una
sentencia SQL. Hay un inconveniente en el uso de IntervalMatch(), y es que crea una tabla
sinttica (Tabla $Syn). Las tablas $Syn representan un coste alto en memoria y el
rendimiento de la interfaz de usuario puede empeorar. Una solucin posible para esto
pasara por hacer un LEFT JOIN a la tabla IntervalMatch() en una tabla padre.
Aqu hay un pequeo ejemplo de IntervalMatch(). Mantenemos el enfoque de utilizar
ejemplos breves para que puedan verificarse con facilidad.
En este ejercicio utilizaremos IntervalMatch() para hallar las horas que un empleado est
trabajando in situ.
Ver que cuatro clientes tienen un Budget y cuatro clientes compran productos
cada mes pero no exactamente los mismos clientes que tienen un Budget. A
continuacin, recargue su copia de trabajo del archivo QlikView
LinkTable.qvw. Toda la informacin parece correcta. Vaya al Visor de Tablas y
observe la estructura del modelo de datos. Se ha creado una tabla sinttica y
una clave sinttica. Esto puede recargar la aplicacin en exceso y en algunos
casos raros podra dar problemas en cuanto a tener resultados inesperados.
3. Comente el script en la pestaa SynKey, elimine el comentario de script en la
61
que hay valores nulos. Ahora si suma Sales Amount y Budget Amount,
cuadrarn.
Nota: Esto es similar a una unin en SQL. Los valores nulos no pesan tanto
en QlikView como en SQL.
Recuerde: Las tablas de enlace resuleven diferencias de granularidad entre
las tablas de hechos que estn unindose a las mismas dimensiones.
2. Seleccione la unidad con el nmero 54543. Cree un cuadro de tabla que utilice
en la tabla Tracking.
5. Comente la informacin en la pestaa Previous, elimine el comentario de
63
Nota: Aqu se requiere la clusula ORDER BY, pero slo funcionar para
una RESIDENT LOAD o en una sentencia SQL SELECT. ORDER BY no
funcionar con una sentencia LOAD FROM .
Recuerde: las sentencias Group by en combinacin con las operaciones left join
permiten la agregacin de valores que residen en tablas debajo de una jerarqua
padre-hijo y adhirindose a las tablas superiores, como por ejemplo, sumando el
valor de elementos de lneas de pedido individuales a un nico valor por pedido.
2. Recargue el script.
3. Cree un Cuadro de Lista y una Tabla Pivotante. En la Tabla Pivotante use
5. Por ltimo, necesita establecer una propiedad del Cuadro de Lista para que
siempre tenga un solo valor seleccionado. Observe que no puede hacer esto a
menos que haya seleccionado un valor nico en el paso anterior.
6. Ahora seleccione diversos valores DateMonthYear y ver cmo cambia Sales
65
del archivo.
2. Cree variables denominadas vDate (fije vDate como una fecha actual y dele un
67
sum(LineSalesAmount) por
archivo.
2. Cree una tabla que muestre la suma de horas que una persona trabaja y una
una tabla $Syn. Como ya vimos anteriormente, una tabla $Syn puede tener un
coste muy alto.
69
La tabla $Syn ha sido eliminada con un INNER JOIN introducido en la tabla que
tiene los valores starta y stop (TabB). Esto puede reducir el coste de una tabla
$Syn. Usted tambin dispone de los registros de todas las veces que aparece y
puede utilizar esta tabla para unirla mediante JOIN a otras tablas.
Observe que ha incrementado el tamao de la tabla B. Las filas en la tabla B se
incrementarn al nmero de filas que habra en la tabla $Syn.
Ejercicio extra
Haga lo siguiente: ejercicio AGGR adicional
1. Abra el archivo Aggr.qvw en la carpeta Aggr y guarde una copia de trabajo del
archivo.
2. En este ejemplo vamos a hallar la media de Orders por Country, Company,
Year y Month empleando la funcin aggr().
expresin a continuacin:
71
Ajustes de rendimiento
Qu constituye el tamao de un documento QlikView?
El nmero de filas
El nmero de columnas
El nmero de valores distintos / columna
La estructura de datos
El nmero de hojas / objetos de hoja
El nmero de filas
Pregunta: realmente es necesario tener 10 aos de datos en el mismo documento
QlikView?
Pregunta: si hay demasiadas filas de detalle, es factible crear una versin menos
sofisticada, ms informal, a un nivel mayor de agregacin?
El nmero de columnas
Sea selectivo acerca de los campos que incluye en el documento QlikView.
1.
2.
Todos los campos podran utilizarse en un futuro pero ahora mismo no se estn
usando
El objetivo es tener un documento QlikView ligero
Claves de sistema
Marcas de tiempo (fecha/hora) con minutos / segundos
Nmeros telefnicos
73
Estructura de datos
Campos clave
Desnormalizacin vs. Normalizacin
Definicin de Normalizacin (Wikipedia):
La Normalizacin divide los datos para evitar la redundancia (duplicacin)
desplazando grupos de datos que normalmente se repiten a una nueva tabla. La
normalizacin, por tanto, tiende a incrementar el nmero de tablas que necesitan ser
unidas para realizar una determinada consulta, pero reduce el espacio necesario para
los datos y el nmero de lugares en que necesita actualizarse si los datos cambian.
Nmero de hojas / objetos de hoja
Elimine hojas y objetos de hoja ocultos que no se estn usando
Elimine variables que no se estn utilizando
Recuerde mantener su documento QlikView lo ms recortado posible
Diseo de aplicaciones
Evite Mostrar Frecuencia
Forzar una adecuada presentacin de objetos
Condiciones de clculo
Mostrar condicional
75
Forzando a cero elimina todos los valores innecesarios / no deseados cuando aplique su
SUM.
77
EJERCICIOS:
Haga lo siguiente:
En este ejercicio cubriremos varios conceptos QlikView, entre los que se incluyen:
79
8. Cree otra nueva pestaa denominada New Order Details y aada el siguiente
cdigo al script:
9. Cree otra nueva pestaa llamada New Shipments y aada el siguiente cdigo al
script:
10. Aada otra nueva pestaa denominada Load Baseline QVDs y cargue la
informacin del archivo Orders.QVD que creamos mediante el botn Archivos
de Tabla y eligiendo el archivo Orders.QVD. Aada la palabra clave
CONCATENATE a la sentencia LOAD y recuerde especificar explcitamente la
tabla a la cual carga los datos Orders.
81
13. Por ltimo, cree una pestaa Calendar/Calendario (tenga en cuenta que Calendar
va detrs de nuestra pestaa QVD) y aada el siguiente cdigo al script:
Aqu hemos creado una tabla temporal (Temp), hemos hallado el mximo y el
mnimo de los valores OrderDates y hemos empleado la funcin peek() para
hallar los contenidos de los dos campos en la nica fila de esta tabla.
Observe que tambin podramos haber hecho una Resident Load ms, para
reordenar la nueva tabla Orders, de mayor tamao, en sentido ascendente y a
continuacin haber usado las funciones originales peek() para fijar nuestras
variables mximas y mnimas de datos. Esto nos podra haber exigido un
cambio en el nombre de tabla y a continuacin dejar la tabla intermedia tras
establecer las variables, una complicacin mnima.
A continuacin, recargue la aplicacin y cree un cuadro de lista para Year.
Toda la informacin se encuentra en la aplicacin con la informacin de
Order, OrderDetails y Shipment anterior a 2007 proveniente de nuestros
QVDs de lnea base (baseline) y cualquier nuevo dato en adelante proviene
de una carga de nuestro sistema de produccin.
Qu falta en todo esto? Por lo general, normalmente no actualizamos
incrementalmente los datos por Year; lo haremos cada noche, o cada 3 horas,
o segn la demanda. No hemos guardado nuestras recin actualizadas tablas
Order, OrderDetails y Shipment (aos 2002 -> 2007) para utilizarlas en el
siguiente ciclo de actualizacin. Nuestros parmetros deben ir determinados
por el momento en que se actualizaron los archivos QVD por ltima vez; lea
el excelente artculo de la Ayuda de QlikView titulado Archivos QVD y
Carga Incremental. Necesitamos crear procesos planificados regularmente,
que ejecuten actualizaciones de nuestros archivos (por ej. con QlikView
Server como punto de partida). Quizs slo deberamos hacer esto con
nuestras tablas. Quizs incluso asumimos que Orders, OrderDetails y
Shipments no se estaban modificando o cancelando, o que Orders,
OrderDetails y Shipments no se estaban aadiendo a nuestros rangos de
fechas anteriores; por lo tanto, un CreateDate o LastModifiedDate seran de
gran utilidad en el manejo de los datos. El tema de la Ayuda se ocupa de
aclarar todos estos casos con ms detalle.
Notas
Para temas de desarrollo o manipulacin extensa de datos, la operacin de carga
dinmica puede resultar de gran utilidad. Slo se permite en el script una nica
sentencia binary load.
Los bucles For y bucles do while/until son herramientas muy habituales en el script
para la automatizacin de operaciones de script repetitivas.
83
85
Balances de inventario
Datasources\data saldon.xls
87
Figura 1. Vista previa del Visor de Tablas que muestra los valores resultantes
89
10 SEGURIDAD EN QLIKVIEW
Objetivos
Control de Acceso
Un documento QlikView es un archivo encriptado que consta de una base de datos, un
script, un diseo, etc. El formato de archivo en s mismo ya proporciona cierta seguridad
intrnseca, ya que no es posible abrir el archivo si el usuario no tiene QlikView. Tambin
es posible incluir varios niveles de acceso en el script de carga.
Niveles de Acceso
A cada usuario de un documento QlikView se le asigna un nivel de acceso: ADMIN
(administrador) o USER (usuario). Un individuo con privilegios ADMIN puede modificar
cualquier cosa en el documento (siempre sujeto a las limitaciones del producto), mientras
que una persona con privilegios USER tiene un acceso restringido. Un usuario de un
cliente QlikView quedar automticamente limitado a privilegios USER,
independientemente de los parmetros de la SECCIN DE ACCESO. Si no se asigna nivel de
acceso alguno a un usuario, ste no podr abrir el documento QlikView.
Para mayor claridad, puede resultar conveniente utilizar otros niveles de acceso, por ej.
NONE (NINGUNO). ste siempre representar la imposibilidad total de acceso.
91
USERID
PASSWORD
SERIAL
NTNAME
Windows NT.
Ejemplo: S-1-5-21-125976590-467238106-1092489882
NTSID
CODE_OMIT
Un campo que debe contener una lista de campos que deberan omitirse
para un determinado usuario en concreto. Se pueden emplear caracteres
comodn y la lista puede hallarse vaca.
Script oculto
Un script oculto es un rea escondida, protegida mediante contrasea, de cdigo de script
que siempre se ejecuta antes del script estndar durante una recarga.
Cuando elija Editor de Script Oculto en el men Archivo en el dilogo Editor de Script se le
pedir una contrasea, la cual es necesaria de nuevo antes de otorgarle acceso al script
oculto. Si es la primera vez que accede al script oculto de un documento (es decir, lo est
creando), deber confirmar la contrasea. Tras esto, aparecer la pestaa de Script Oculto
a la izquierda de todas las dems pestaas de script y permanecer ah hasta que cierre el
documento. Tenga en cuenta los siguientes aspectos de un script oculto si decide emplear
uno:
93
Las tablas generadas por la parte oculta del script no irn representadas por
nombre alguno en el campo de sistema $Table.
Ejercicio
Haga lo siguiente: Configuracin de Seguridad en un
archivo QlikView
1. Inicie QlikView y guarde una copia de trabajo del archivo QlikView en el
Una vez ms, asegrese de guardar el documento con otro nombre, por ej.
QlikView Training_wSecurity
de usuario y la contrasea.
8.
95
Haga lo siguiente:
Salga de QlikView y abra de nuevo su documento recin nombrado. Ver el siguiente
cuadro que le indica dnde debe introducir User ID y Contrasea.
Haga lo siguiente:
Nota: No es posible completar este ejercicio con QlikView Personal
Edition.
1. Asegrese de estar registrado en el documento QlikView como Admin.
97
Haga lo siguiente:
1. Aada otro campo denominado COMPUTER a la anterior tabla Access01
INLINE. Incluya uno o dos identificadores de ordenadores del curso (stos
SERIAL
Course1
Se puede ver que slo dos nmeros de licencia tienen acceso al documento que
hemos creado, uno con derechos de USUARIO y otro con derechos ADMIN.
Observe tambin que estamos aadiendo restricciones a los USERIDs (USER)
existentes, y no reemplazando las actuales restricciones.
5. Abra el script de carga, site el cursor y pulse el botn Ficheros Planos. Cargue
99
Haga lo siguiente:
1. Abra el script de carga y el Editor de Script Oculto en Archivo (tenga en cuenta
que deber tener privilegios de Admin para editar el script oculto). Verifique
que su cursor est posicionado en la pestaa de Script Oculto.
2. A continuacin, comente las tablas INLINE previamente cargadas para que no
interfieran con nuestras nuevas tablas de la SECCIN DE ACCESO.
3. El primer archivo de texto que se ha de cargar es SalesSecurity.txt, ubicado en
[SalesPerson]
FROM Datasources\SalesInitials.txt
(ansi, txt, delimiter is '\t', embedded labels);
101
como USERID. Observe que puede ver los datos de este usuario, as como los
del Vendedor Tom Lindwall y Frank Roll.
12. Cierre el documento y bralo de nuevo, solo que esta vez con el nombre
103
Hasta ahora nos hemos centrado en cargar los datos empleando las diferentes opciones de
la pgina de Datos del editor de script.
Datos Personalizados
La pgina Datos Personalizados contiene comandos para extraer datos de fuentes de datos
personalizados e incluirlos en QlikView.
QlikView ofrece una interfaz plug-in de cdigo abierto, que le permite programar
interfaces personalizadas para leer diversos tipos de fuentes de datos que no se hallen en
una estructura tradicional de archivo con OLE DB u ODBC. El caso ms tpico es el de los
datos disponibles mediante Servicios Web o las aplicaciones de software caseras,
hechas a medida. El plug-in se programa de acuerdo a las especificaciones de cdigo
abierto y se compila como un dll. (Se puede solicitar a QlikTech una plantilla de cdigo)
El archivo dll se coloca a continuacin en el mismo directorio que el archivo QV.EXE.
Una vez terminado, aparecer en el desplegable para su seleccin.
datos personalizados. Este dilogo puede presentar un aspecto diferente con cada
conjunto de datos personalizados, dependiendo de la fuente de datos empleada.
Select: Una vez conectado, abre un dilogo que permite seleccionar campos y tablas de
Conector SAP
QlikView ofrece un Conector SAP, un producto que se licencia aparte, para la extraccin
y el anlisis de datos desde sistemas SAP ERP. Se trata de una integracin certificada por
SAP.
QlikView ofrece:
Conector
Scriptbuilder
ExtractSAP
BW Cube QVD Generator
Plantillas y aplicaciones demo
105
107
12 TALLER DE TRABAJO
Objetivos
Escenario propuesto
ACME Inc. es una distribuidora de comida y bebida que distribuye a diversas tiendas de
los Estados Unidos y tambin internacionalmente. Estn interesados en una mejor
comprensin de su rendimiento en cuanto a las Ventas y Margen de su negocio.
Le han pedido a usted que desarrolle una aplicacin QlikView de Anlisis de Ventas.
La aplicacin ser utilizada por ejecutivos superiores de la empresa, sus gerentes de
producto, as como tambin sus agentes de la red de ventas (vendedores).
109
Requisitos
ACME ha sealado sus requisitos en el siguiente listado que se reproduce a
continuacin:
por:
Departamento
Pas
Regin
Estado/Provincia
Representante de Ventas
Lnea de Producto
Grupo de Productos
Producto y Cliente
3. Tambin desean analizar su media de ventas, tanto por transaccin, como por
cliente.
4.
Nota: Cuentan cada factura como una entrega, as que utilice la fecha
mxima prometida y la fecha de entrega real para cada factura. Slo les
interesa analizar el rendimiento de entregas durante el ao 2008.
Estructura de Datos
Las tablas a continuacin dan informacin sobre las fuentes de datos de ACME,
las cuales deber utilizar para completar la aplicacin QVW teniendo en cuenta
los requisitos de negocio.
SALESDETAILS.QVD
Esta tabla contiene las ventas de la compaa as como transacciones de pedidos.
111
CUSTOMERS.QVD
Esta tabla contiene informacin de clientes.
STATEDESCRIPTION.QVD
Esta tabla contiene las descripciones de las provincias.
REGION.QVD
Esta tabla contiene las descripciones de las regiones.
DIVISION.QVD
Esta tabla contiene las descripciones de las divisiones.
113
115