Вы находитесь на странице: 1из 116

Developer II

QlikView Versin 10 Espaol


Original en ingls: Octubre 2010

Copyright 2010 QlikTech International AB, Suecia.


Las leyes internacionales de la Propiedad Intelectual prohben copiar, fotocopiar, reproducir, traducir o convertir, en parte o en su totalidad, por cualquier medio electrnico o formato
electrnicamente legible, tanto la documentacin como el software, sin la previa autorizacin por
escrito de QlikTech International AB, a excepcin del modo definido en el acuerdo de software.
QlikTech y QlikView son marcas comerciales registradas de QlikTech International AB.
Microsoft, MS-DOS, Windows, Windows NT, Windows 2000, Windows Server 2003, Windows
Server 2008, Windows XP, Windows Vista, SQL Server, Excel, Access, VisualBasic, Internet
Explorer, Internet Information Server, Visual C++, Visual Studio y MS Query son marcas
comerciales registradas de Microsoft Corporation.
IBM, AS/400 y PowerPC son marcas comerciales registradas de International Business Machines
Corporation.
Firefox es una marca comercial registrada de Mozilla Foundation.
Apple, iPhone, iPod Touch, Safari y MacOS son marcas comerciales registradas de Apple
Corporation.
BlackBerry es una marca comercial registrada de Reserach in Motion.
Original en Ingls: Octubre de 2010

NDICE
1 INTRODUCCIN .................................................................................... 5
Instalacin de los Materiales del Curso......................................................................... 5
Versiones de Programa.................................................................................................. 5
Formatos de Texto ......................................................................................................... 5

2 HERRAMIENTAS DEL DESARROLLADOR .................................... 7


Depuracin de Errores ................................................................................................... 7
El Depurador ................................................................................................................. 7

3 TABLAS DE CORRESPONDENCIA .............................................. 18


Correspondecia de la tabla Quarters con la tabla Orders ........................................... 18
MonthYear .................................................................................................................. 22
Limpiar la estructura de tabla ...................................................................................... 24

4 CARGAR DATOS DE PRESUPUESTOS ........................................... 29


Leer Tablas Cruzadas .................................................................................................. 29

5 SCRIPT AVANZADO............................................................................ 35
Una condicin en un campo de una tabla .................................................................... 35
Agregar datos .............................................................................................................. 35
Unir Tablas .................................................................................................................. 35
Concatenacin ............................................................................................................. 35
Carga precedente ......................................................................................................... 37

6 CLCULOS AVANZADOS EN OBJETOS DE HOJA ..................... 45


Anlisis de Conjuntos.................................................................................................. 45
Expansiones de Signo-Dlar ....................................................................................... 49
Funcin AGGR ........................................................................................................... 50

7 DESAFOS DE SCRIPT Y MODELADO DE DATOS...................... 58


Tablas de Enlace y Tablas Concatenadas .................................................................... 58
Calcular el Cambio Neto en un Campo ....................................................................... 58
Funciones InDate e Islas de Datos .............................................................................. 59
Aggr() .......................................................................................................................... 59
Class().......................................................................................................................... 60
Agregacin dinmica................................................................................................... 60
IntervalMatch .............................................................................................................. 60

8 OPTIMIZACIN DEL MODELO DE DATOS ................................. 73


Ajustes de rendimiento ................................................................................................ 73

Prcticas recomendadas para optimizacin de archivos QlikView ............................. 75


Crear cargas incrementales.......................................................................................... 77

9 BALANCES Y TRANSACCIONES DIARIOS.................................. 86


Visin General de Conjunto ........................................................................................ 86
Ejemplo: Balances en Fechas Especficas ................................................................... 86

10 SEGURIDAD EN QLIKVIEW ........................................................... 91


Control de Acceso ....................................................................................................... 91

11 CONECTIVIDAD AVANZADA DE BASES DE DATOS ............. 104


Datos Personalizados................................................................................................. 104
Conector SAP ............................................................................................................ 105

12 TALLER DE TRABAJO ................................................................... 108


Escenario propuesto .................................................................................................. 108

QlikView Developer II | 1 INTRODUCCIN

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.

Instalacin de los Materiales del Curso


Los materiales del curso se extraern automticamente desde su correspondiente archivo
al directorio por defecto
C:\QlikViewTraining\Developer II\
Cree un acceso directo a esta carpeta desde Windows y colquelo en su escritorio.
Cree tambin un acceso directo a la carpeta de documentacin y ubquelo en su escritorio
C:\Archivos de Programa \QlikView\Documentacin
o
C:\Archivos de Programa (x86) \QlikView\Documentacin

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

Haga clic en el botn Inicio

Localice el icono QlikView

Pulse el icono QlikView para lanzar el programa

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

QlikView Developer II | 1 INTRODUCCIN

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.

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

2 HERRAMIENTAS DEL DESARROLLADOR


Objetivos

Comprender la importancia de la depuracin de errores


Utilizar el depurador
Introducir otras herramientas y mtodos adicionales

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.

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

Figura 1. Los puntos de Interrupcin

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.

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

Ejercicio: Depuracin
Haga lo siguiente:
1

Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.

Cargue el archivo Debugging.qvw en QlikView y trate de cargar los datos en


QlikView tras haber fijado mltiples puntos de interrupcin, avance por el
cdigo y vea dnde se detiene el depurador. Compruebe tambin los valores
de las variables.

Abra el archivo \Debugging\Variable.qvw. Entre en el depurador desde el


editor de script y compruebe los puntos de interrupcin que se han fijado en el
script.

Utilice el botn Ejecutar para ejecutar el script hasta el siguiente punto de


interrupcin.

Observe que la variable mySetVar no aparece listada en el panel inferior de


variables, a la derecha.

Pulse Ejecutar de nuevo y observe que se ha fijado el valor de la variable


mySetVar.

Pulse Ejecutar de nuevo y abandone el script.

Repita los pasos 3 a 6 y observe en el paso 4 que la variable mySetVar an


conserva el valor de la ejecucin anterior.

Vaya a Configuracin | Panel de Variables y vea cmo la variable mySetVar (una


vez creada) se almacena y queda accesible desde dentro de QlikViewDesktop.
Recuerde que los valores intermitentes de las variables de script se pueden
monitorizar a travs del depurador. El mbito de las variables de script no se
limita nicamente a una nica ejecucin de script, esto es, las variables
persisten entre ejecuciones.

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

Utilizar el Objeto de Hoja Cuadro de Tabla


El Cuadro de Tabla es el mejor amigo del desarrollador. Es estupendo para identificar
cmo se relacionan los datos y dnde faltan datos.
El objeto de tabla resulta particularmente til para ver las relaciones de datos a nivel de
fila entre diversos campos. Para una mayor facilidad de uso, un cuadro de tabla puede
tener activada la opcin de selectores desplegables desde la pestaa Presentacin,
permitiendo al desarrollador navegar con rapidez por cualquier campo/columna y hacer
selecciones de consultas de texto.
Crear un cuadro de tabla es muy sencillo y cualquiera puede aadir columnas desde
mltiples tablas as como selectores desplegables a las columnas (campos) de la tabla.
Vea el Selector Desplegable en la figura inferior; el selector desplegable le permite
seleccionar y buscar datos en el cuadro de tabla. Esto le ayudar a entender cmo se
relacionan los datos de sus tablas.

Figura 2. Aadir Selectores Desplegables

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.

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

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.

Nota: Est viendo informacin inconexa, lo cual puede ser problemtico;


puede explorar las causas de esta situacin examinando los campos clave.
Recuerde, los cuadros de tabla son una herramienta excelente para entender
y validar las relaciones entre los datos. Slo los valores posibles/incluidos
se visualizan en un cuadro de tabla.

11

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

Copiar Campos Clave


Cmo se puede haber creado esta situacin de inconexin?

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.

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

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

Cree cuadros de lista para todos los campos.

7 Seleccione Todo en uno de los campos clave copiados.


8 Seleccione Excluidos en el campo Key (haga clic con el botn derecho en el
cuadro de lista del campo Key y elija SELECCIONAR EXCLUIDOS).
9

Observe las correspondencias y no correspondencias entre las claves de cada


tabla.
Nota: Mediante el uso de los modos Seleccionar Todo, Seleccionar
Posibles en los campos clave, es posible investigar las asociaciones y no
asociaciones entre los datos de su estructura de datos .

Depuracin: Ejemplos y Pasos


Cuando se crean y depuran ecuaciones complejas, escoja dos enfoques:
1

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.

Cuando cree expresiones complejas, utilice un grfico de Tabla Simple y


construya expresiones columna por columna.

Haga lo siguiente:
1

Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.

2 Abra el archivo ComplexEquations.QVW.


3 Cree un grfico de Tabla Simple con CompanyName (o NombreCompaa)
como la dimensin, con las siguientes expresiones:

13

QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP

Expresin

Etiqueta

Sum(LineSalesAmount)

Sales

Count(LineNo)

Lines

Avg(LineSalesAmount)

AvgSales

Sum(Quantity)

Qty

4 Finalice con dos expresiones ms:


Expresin

Etiqueta

Qty /Lines

AvgQty

Sales/Qty

UnitPrice

Como podr ver, se puede introducir una expresin directamente o utilizarse


una etiqueta de expresin como un alias de la expresin para obtener el mismo
resultado.

Nota: Tambin puede referirse a una expresin por su nmero de Columna


de Tabla (ndice de base cero) pero NO LO HAGA!

Cree su expresin compleja, una columna por vez y, a continuacin, mueva la


expresin al contenedor de la Etiqueta al que se hace referencia en la expresin.
Este es el mejor modo de crear expresiones complejas lentamente.

Nota: No puede hacer agregaciones anidadas (agregar agregaciones) a


menos que utilice la funcin aggr() la cual se ver ms adelante en este
curso.
Fechas
En muchos casos, los campos de fecha son campos clave. Para unir tablas de
diferentes sistemas, hay ocasiones en que las fechas deben ser convertidas a un
formato comn antes de que las fechas de lugares dispares se correspondan
indebidamente. Siempre es una buena idea comprobar el campo clave empleando
un cuadro de tabla que verifique que el formato de fecha es constante a lo largo de
la totalidad del campo clave.

Haga lo siguiente:
1

Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.

QlikView Developer II | 2 HERRAMIENTAS DEL DESARROLLADOR

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:

A continuacin, cree un cuadro de tabla que incluya todas las columnas,


ordene por Fecha (Date) ascendente y explore los datos. Obtendr
aproximadamente una vista como la del cuadro de tabla inferior. Observe que
las fechas tienen el mismo aspecto, pero las fechas similares no se enlazan.

Para ver qu es lo que est ocasionando el problema, cree un Objeto de Texto


que muestre la expresin
=num(Date, ###.######)
y alternativamente seleccione cada una de las dos fechas similares. Observe la
parte fraccional de cada fecha mostrada en el objeto de texto. La fecha de una
tabla es en realidad una marca de tiempo: fecha-hora, mientras que la otra no
tiene asociado un elemento de tiempo.

15

QlikView Developer II | 2 HERRAMIENTAS DEL DESARROLLADOR

Arregle a continuacin Date2 con la funcin floor(): (floor(Date2))


modificando Date2 de una marca fecha-hora a una fecha. (Observe que la
funcin floor() trunca un nmero decimal y devuelve el siguiente entero ms
bajo, por ej., 2.7 se convierte en 2). A continuacin recargue los datos. El
resultado deber ser el siguiente (con filas que ahora s enlazan):

Como alternativa, pruebe a emplear la funcin daystart() en las fechas de


ambas tablas. Verifique que los resultados coincidan. Oculte el hecho de que
ambas fechas son ahora marcas de tiempo fecha-hora que comienzan a media
noche.

Nota: Tenga cuidado al comparar fechas. Asegrese de que la granularidad


permanece intacta y de que se almacena todo de idntica manera en cada
campo de fecha (por ej. las fechas a nivel de da se almacenan sin un
componente de tiempo, o las de nivel de mes se almacenan como el primer
da de cada mes, etc.).

QlikView Developer II | 2 HERRAMIENTAS DEL DESARROLLADOR

17

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

3 TABLAS DE CORRESPONDENCIA
Objetivos

Entender las tablas de correspondencia


Utilizar las tablas de correspondencia para aadir Quarters(Trimestres) a la
tabla Orders(Pedidos)
Limpiar la estructura de tabla

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.

Correspondecia de la tabla Quarters con la tabla Orders


La tabla Quarters es til porque enlaza nuestros datos Month en la tabla Orders con el
Quarter(trimestre) correcto. Sin embargo, el campo Month es ahora un campo clave y
esto probablemente traer problemas ms tarde. La siguiente ilustracin muestra de
manera grfica este dilema:

Figura 1. La tabla Quarters con el enlace clave en Month

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

Figura 2. El campo Month con el indicador clave en el listado de Campos Disponibles

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

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

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.

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

Aada una funcin applymap a la tabla Orders basada en el valor numrico de


Month. Esta funcin debera hacer referencia a la tabla Quarters_Map.
Observe el ejemplo de sintaxis que hay a continuacin:
applymap('Quarters_Map',num(month(OrderDate)),
null()) AS Quarter,
Guarde y Recargue el documento.

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.

Figura 3. Utilizar ApplyMap para incluir campos en otra tabla

21

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

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.

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

Ejercicio
Haga lo siguiente:
1

Vuelva al archivo MappingTables.qvw con el que ha estado trabajando en este


captulo.

Abra el dilogo Editor de Script desde el men o la barra de herramientas.

Localice la sentencia LOAD en la tabla Orders.

Inmediatamente a continuacin de la lnea de campo: applymapas


Quarter, cree un nuevo campo denominado MonthYear en la sentencia LOAD
de la tabla Orders, como se ve a continuacin:
date(monthstart(OrderDate),'MMM-YYYY') AS MonthYear,

La funcin monthstart devuelve el primer da del mes del valor OrderDate. La


funcin date a continuacin da formato a este valor en un nombre de mes de
tres caracteres, seguido por un ao de cuatro dgitos. Como QlikView
almacena este campo como una cadena de texto (con el formato que acabamos
de especificar) y tambin como numrico, puede ordenarse numricamente
qu es lo que queremos.
La sentencia LOAD completa de la tabla Orders debera presentar ahora ms o
menos el siguiente aspecto. Asegrese de que su sintaxis de script coincida con
esto. Observe que su lnea de campos Quarter y MonthYear encaje en una
nica lnea en vez de varias, como se observa a continuacin:
//*************** Orders table ***************
Orders:
LOAD CustomerID,
EmployeeID,
EmployeeID AS EmployeeSalesID,
Freight,
OrderDate,
year(OrderDate) AS Year,
month(OrderDate) AS Month,
day(OrderDate) AS Day,
applymap('Quarters_Map',
num(month(OrderDate)),
null()) AS Quarter,
date(monthstart(OrderDate), 'MMMYYYY')
AS
MonthYear,
OrderID,
OrderID AS OrderIDCounter,
ShipperID;
SQL SELECT *
FROM Orders;

Guarde y Recargue el script.

Aada un cuadro de lista para el nuevo campo NomthYear de su hoja.

23

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

Limpiar la estructura de tabla


Probablemente desee minimizar el nmero de tablas en QlikView (omitir las tablas
innecesarias). Se necesitan recursos informticos para realizar clculos entre las tablas. Si
tiene tablas de slo dos campos, haga corresponder dichas tablas con otra tabla y as
podr minimizar el nmero de tablas. Observemos el Visor de Tablas para ver si hay
alguna(s) tabla(s) que pueda(n) hacerse corresponder (o mapearse) fcilmente con otra
tabla.

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

Ejercicio
Haga lo siguiente:
1

Vuelva al archivo con el que ha estado trabajando en este captulo.

Abra el Visor de Tablas.

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.

Figura 4. El Visor de Tablas

Abra el Editor de Script y desplcese hacia abajo con el ratn.

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;

Aada la siguiente lnea al final de la tabla Orders.


applymap('Shippers_Map', ShipperID,
'MISSING') AS Shipper

25

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

La lnea de script anterior le dice a QlikView que utilice la palabra MISSING en


el campo Shipper donde no se encuentran valores ShipperID que coincidan.
6

Verifique que su script de la tabla Orders presenta el siguiente aspecto:


//*************** Orders table
***************
Orders:
LOAD CustomerID,
EmployeeID,
EmployeeID AS EmployeeSalesID,
Freight,
OrderDate,
year(OrderDate) AS Year,
month(OrderDate) AS Month,
day(OrderDate) AS Day,
applymap('Quarters_Map',
num(month(OrderDate)),
null()) AS Quarter,
date(monthstart(OrderDate), 'MMMYYYY')
AS MonthYear,
OrderID,
OrderID AS OrderIDCounter,
ShipperID,
applymap('Shippers_Map', ShipperID,
'MISSING')
AS Shipper;
SQL SELECT *
FROM Orders;

7
8

Guarde el documento y recargue el script.


Eche un vistazo al Visor de Tablas para comprobar si de hecho el campo

Shippers forma parte ahora de la tabla Orders.

Figura 5. El campo Shipper forma parte ahora de la tabla Orders

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

Ejercicios extra
Haga lo siguiente:
1

Inicie QlikView y guarde una copia de trabajo del archivo


AdditionalMappingExercises.qvw en el directorio de trabajo de este captulo
(C:\QlikViewTraining\DeveloperII\Chapter03).

Abra el dilogo Editor de Script.

Cree una pestaa tras la pestaa Main y denomnela Mapping Loads.

Mueva el script de Shippers_Map y Quarters_Map a la pestaa Mapping


Loads.

Haga corresponder la tabla Divisions con la tabla Customers Asegrese de


eliminar (o eliminar el comentario de) la tabla Divisions de la pestaa
Dimensions y cree una tabla de correspondencia en la pestaa Mapping Loads.
Aunque hay algunos ejemplos de script al final de esta pgina, tan slo son
elementos de referencia y nicamente debiera emplearlos si necesita ayuda. Le
animamos a tratar de aadir el script de Mapping Load y ApplyMap por su cuenta.

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

QlikView Developer II | 3 TABLAS DECORRESPONDENCIA

QlikView Developer II | 4 CARGAR DATOS DE PRESUPUESTOS

4 CARGAR DATOS DE PRESUPUESTOS


Objetivos

Entender las tablas cruzadas


Utilizar el Asistente de Archivos para transformar los datos y crear un script
de carga

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.

Leer Tablas Cruzadas


Primero, abriremos la tabla Budget que se encuentra en el archivo Excel. Esta tabla
precisa de algn trabajo previo para poder leerla en QlikView. Afortunadamente,
QlikView cuenta con una excelente funcionalidad para la interpretacin y modificacin
de tablas, as que no necesitaremos alterar el aspecto original del archivo Excel.
Emplearemos el Asistente de Tabla Cruzada para cargar los datos inicialmente y despus
hacer ajustes en nuestro script. Tambin incluiremos un campo de entrada.

29

QlikView Developer II | 4 CARGAR DATOS DE PRESUPUESTOS

Ejercicio de carga de datos presupuestarios


Haga lo siguiente:
1

Inicie QlikView y guarde una copia de trabajo del archivo


LoadingBudgetData.qvw en el directorio de trabajo de este captulo
(C:\QlikViewTraining\DeveloperII\Chapter04).

Abra el dilogo Editor de Script.

Cree una nueva pestaa a continuacin de la pestaa Sales Person y


denomnela Budget/Presupuesto.

Pulse el botn Archivos de Tabla y abra el archivo Budget.xls que se encuentra


en la carpeta de datos de este captulo.

En el Asistente de Archivos, comience fijando el Tamao de Cabecera en una


lnea.

A continuacin, necesitamos asegurarnos de que no haya filas vacas en el


campo Office. Pulse el botn Siguiente y a continuacin pulse Habilitar Paso de
Transformacin para transformar la tabla y luego haga clic en la pestaa
Rellenar.

Pulse el botn Rellenar y a continuacin Condicin de Celda. Lo que queremos


es que la celda se rellene si est vaca. Pulse Aceptar, Aceptar de nuevo y
Siguiente para volver al Asistente de Archivos.

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.

10 Denomine el Atributo BudgetYear.


11 Denomine los datos BudgetAmount.

QlikView Developer II | 4 CARGAR DATOS DE PRESUPUESTOS

12 Pulse Finalizar. Debera tener la siguiente tabla en el script.


CROSSTABLE(BudgetYear, BudgetAmount, 2)
LOAD Office,
EmployeeID,
[2006],
[2007],
[2008],
[2009]
[2010],
FROM Datasources\Budget.xls
(biff, header is line, embedded labels, table is
[Sheet1$], filters(Replace(1, top, StrCnd(null))
));

13 Denomine a esta tabla BudgetTemp.


14 Guarde y Recargue el documento.
Abra el Visor de Tablas. Como podr observar, hay una clave sinttica entre la
tabla Budgets y la tabla Employees. Queremos eliminar esta clave sinttica.
Realizaremos ajustes en nuestro script hasta conseguir los datos que
necesitamos de la tabla BudgetTemp y luego la eliminaremos.
15 Vaya al Editor de Script.
16 Por simplicidad, cambie la tabla BudgetTemp segn el siguiente script,
reemplazando los nombres de campo individuales por el asterisco. Esto har
que su script se ejecute como es debido, incluso cuando las etiquetas de los
datos cambien.
BudgetTemp:
CrossTable(BudgetYear, BudgetAmount, 2)
LOAD *
FROM
[Developer I & II\Datasources\Budget.xls]

31

QlikView Developer II | 4 CARGAR DATOS DE PRESUPUESTOS


(biff, embedded labels, header is 1 lines, table is
Sheet1$, filters(
Replace(1, top, StrCnd(null))
));

17 Guarde y Recargue el script.

Haga lo siguiente:
1

Ahora nos ocuparemos del campo con la clave sinttica y aadiremos el


campo de entrada para hacer el pronstico de presupuestos. Vuelva al archivo
QlikView con el que ha estado trabajando en este captulo.

Vaya el Editor de Script y coloque el cursor justo despus de las sentencias SET
en la pestaa Main.

Introduzca la siguiente sentencia.


INPUTFIELD BudgetPrognosis;
La sentencia INPUTFIELD le indica a QlikView que el campo ser un campo de

entrada. Tiene que indicar esto en el script antes de pasar a leerse el campo en
una tabla.
4

Vaya a la pestaa Budget y cree una tabla Budget como se observa a


continuacin:
Budget:
LOAD
Office &'-'& EmployeeID AS BudgetKey,
BudgetYear,
BudgetAmount AS BudgetPrognosis,
BudgetAmount
RESIDENT BudgetTemp;
DROP TABLE BudgetTemp;

Guarde y Recargue el script.

Ahora, podemos utilizar el campo de entrada BudgetPrognosis para establecer


diferentes valores de presupuesto si necesitamos alterar el presupuesto para
que se corresponda con los valores reales.
6

Cree un nuevo Cuadro de Tabla titulado Sales Budget (Presupuesto de Ventas) que
contenga los siguientes campos: SalesPerson, BudgetYear, BudgetAmount y
BudgetPrognosis.

Desplace el cursor del ratn a la columna BudgetPrognosis del cuadro de


tabla. Aparecer un icono de flecha de entrada.

QlikView Developer II | 4 CARGAR DATOS DE PRESUPUESTOS

Pulse en el icono de entrada de cualquier fila e introduzca cualquier nmero.

Haga clic con el botn derecho en la columna BudgetPrognosis. Observe las


opciones relacionadas de Restaurar Valor nico, Restaurar Valores Posibles y
Restaurar Todos los Valores.

Ahora podemos utiliza el campo de entrada BudgetPrognosis para fijar diferentes


valores de presupuesto si necesitamos alterar el presupuesto para hacerlo
corresponder con los valores reales.

33

QlikView Developer II | 4 CARGAR DATOS DE PRESUPUESTOS

QlikView Developer II | 5 SCRIPT AVANZADO

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

Una condicin en un campo de una tabla


El campo CategoryType se puede crear utilizando el campo CategoryID. Si el campo
CategoryID es 5 6, CategoryType debera ser Footwear (calzado), si no el tipo debera
ser Clothing (ropa). Vamos a crear este campo en el script.

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

QlikView Developer II | 5 SCRIPT AVANZADO

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;

La tabla lgica resultante tiene los campos a, b y c. El nmero de registros es la suma de


los nmeros de registros de la tabla 1 y la tabla 2.
Reglas:
-

El nmero y los nombres de los campos deben ser idnticos.

El orden de los campos listados en cada sentencia es arbitrario.

El orden de las dos sentencias es arbitrario.

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;

La tabla lgica resultante tiene los campos a, b y c. El nmero de registros en la tabla


resultante es la suma de los nmeros de registros de la tabla 1 y la tabla 2.
El valor del campo b en los registros que proceden de la tabla 2 es NULO.
Reglas:
-

El nmero y los nombres de los campos deben ser idnticos.

El orden de los campos listados en cada sentencia es arbitrario.

A menos que se especifique un nombre de tabla de una tabla anteriormente


cargada en la sentencia concatenate, el prefijo concatenate usa la tabla lgica
anteriormente creada. El orden de las dos sentencias por lo tanto no es arbitrario.

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:

QlikView Developer II | 5 SCRIPT AVANZADO


NoConcatenate ( LoadStatement | SelectStatement )

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

QlikView Developer II | 5 SCRIPT AVANZADO

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;

La sentencia IF de QlikView utiliza la siguiente sintaxis:


if( condition , then , else )

La condicin debera evaluarse como verdadera o falsa. Si la condicin es


verdadera, entonces la parte then ser procesada. Pero si la condicin es falsa
se procesar la parte else de la sentencia.
5. Guarde y recargue el script.
6. Observe los campos. Ahora podr ver que tenemos un nuevo campo
denominado CategoryType.

Haga lo siguiente: agregacin


1. Abra el archivo QlikView con el que ha estado trabajando en este captulo.
2. Abra el Editor de Script y coloque el cursor detrs de la tabla OrderDetails en la
pestaa Orders.
3. Aada la siguiente sentencia en su script:
LOAD OrderID,
sum(LineSalesAmount) AS
OrderSalesAmount
RESIDENT OrderDetails
GROUP BY OrderID;

4. Observe la funcin de agregacin sum(LinesSalesAmount) incluida en esta


sentencia. Esta funcin ser evaluada sobre todas las combinaciones posibles
de los otros campos en la sentencia LOAD (OrderID). La clusula GROUP BY se
necesita para agregar o agrupar campos distintos de los incluidos en la
agregacin. En este caso, ser igual al total de SalesAmount para cada
OrderID.

Haga lo siguiente: unir tablas


1. Vaya de nuevo al Script y site el cursor justo enfrente de LOAD en la tabla que
acaba de crear.
2. Introduzca LEFT JOIN (Orders) frente a la sentencia LOAD. El resultado debera
ser el siguiente:
LEFT JOIN (Orders)

QlikView Developer II | 5 SCRIPT AVANZADO


LOAD

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.

Haga lo siguiente: concatenacin


1. Abra el dilogo Editor de Script en el archivo con el que ha estado trabajando en
este captulo.
2. Site el cursor en la pestaa File Data directamente tras haber cargado la tabla
Employees. Necesitamos duplicar los campos que tenemos actualmente para
Employees, as que no utilizaremos el Asistente de Archivos en este caso. En su
lugar, copie la sentencia LOAD de Employee y pegue el texto copiado tras el
texto original.
3. Como el nuevo formato de los datos del archivo coincide con los de nuestro
primer archivo, slo necesitamos cambiar la fuente de los datos. Revise la
clusula From en la nueva sentencia load de modo que ponga lo siguiente:
FROM Datasources\Employees_New.xls (biff, embedded
labels, table is [Employee$]);

4. Pulse Aceptar y guarde el documento QlikView.


5. Ejecute el script.
Si observa algunas claves sintticas nuevas, o un nuevo valor $Table de
Employee-1, sabr que algo no funcion bien en la concatenacin automtica.
Podr evitar problemas en la concatenacin automtica empleando el prefijo
concatenate en las sentencias de carga LOAD que usted sepa que deberan
concatenarse.
6. Aada el prefijo concatenate a la nueva sentencia LOAD Employee y
especifique la tabla Employees.
Esto siempre concatenar ambas tablas, incluso si se hicieran posteriormente
cambios sin querer en el script de una de las dos cargas, pero no la otra. La
nueva sentencia LOAD Employee debera comenzar de la siguiente forma:
Concatenate (Employees) Load

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

QlikView Developer II | 5 SCRIPT AVANZADO


dicha especificacin y concatenar los datos en una nica tabla lgica. Como
ambos nombres de archivo comienzan con Emp y tienen la extensin de
archivo .xls, podemos utilizar el comodn Emp*.xls en la clusula FROM.
Si hacemos este cambio y comentamos la segunda sentencia LOAD Employee,
el script tendr ahora el siguiente aspecto:
Employees:
Load Office & - & EmpID as BudgetKey,
EmpID AS EmployeeID,
//[Last Name],
//[First Name],
[First Name] & ' ' & [Last Name] AS Name,
Title,
[Hire Date],
Year([Hire Date]) AS [HireYear],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\Emp*.xls (biff, embedded labels,
table is [Employee$]);
//Employees:
//Concatenate (Employee) Load
//Office & - & EmpID as BudgetKey,
//EmpID AS EmployeeID,
//[Last Name],
//[First Name],
//[First Name] & ' ' & [Last Name] AS
Name,
//Title,
//[Hire Date],
//Year([Hire Date]) AS [HireYear],
//Office,
//Extension,
//[Reports To],
//[Year Salary]
//FROM Datasources\Employees_New.xls (biff, embedded
labels, table is [Employee$]);

8. Guarde el script revisado y el documento QlikView. A continuacin recargue


y verifique que los datos de Employee no han cambiado.
9. Como ejercicio opcional, puede que desee tratar de determinar por qu a los
empleados del archivo Employees_New.xls no se les han asignado direcciones
de correo electrnico (el campo e-mail es nulo para estos empleados). Qu
hay que hacer para corregir este problema?

Haga lo siguiente: carga precedente


1. En el archivo QlikView con el que ha estado trabajando en este captulo, vaya
al Editor de Script y site el cursor al final de la pestaa Mapping Loads.

QlikView Developer II | 5 SCRIPT AVANZADO


2. Cree la siguiente tabla, bien teclendola desde el principio o pulsando el botn
Seleccionar.
UnitCost_Map:
MAPPING LOAD
ProductID,
UnitCost;
SQL SELECT *
FROM Products;

3. Vaya a la pestaa Orders e incluya la siguiente lnea de script al final de la


tabla OrderDetails justo encima de la lnea SQL SELECT *. Recuerde
eliminar el punto y coma de la lnea superior y reemplcelo por una coma.
applymap('UnitCost_Map', ProductID, 0) * Quantity AS
CostOfGoodsSold;

Combinamos la funcin applymap con un clculo y creamos el campo


CostOfGoodsSold directamente en la LOAD precedente de la tabla
OrderDetails.
La ltima de las mediciones clave que tenemos que crear en el script es el
Margen. Margin/Margen se calcula como LinesSalesAmount
CostOfGoodsSold. La forma ms fcil de hacer esto es colocar una carga
precedente sobre la carga precedente de la tabla OrderDetails. Puede aadir
varias cargas precedentes una encima de otra y se evaluarn de abajo a arriba.
Esto significa que puede utilizar un campo creado en una carga precedente en
una nueva carga precedente sobre la primera.
4. Emplearemos esta funcionalidad para crear el campo Margin.
5. Site el cursor tras la etiqueta OrderDetails.
6. Cree una carga precedente aadiendo el script siguiente:
LOAD
LineSalesAmount - CostOfGoodsSold AS
Margin,
*
;

7. El script completo de OrderDetails debera presentar el siguiente aspecto:


//*************** Order Details table
OrderDetails:
LOAD
LineSalesAmount - CostOfGoodsSold AS Margin,
*
;
LOAD
Discount,
LineNo,
OrderID,
ProductID,
Quantity,
UnitPrice,
UnitPrice * Quantity * (1 - Discount) AS
LineSalesAmount,

41

QlikView Developer II | 5 SCRIPT AVANZADO


applymap('UnitCost_Map', ProductID, 0) *
Quantity AS
CostOfGoodsSold;
SQL SELECT * FROM `Order Details`;
LEFT JOIN (Orders)
LOAD OrderID,
sum(LineSalesAmount) AS OrderSalesAmount
RESIDENT OrderDetails
GROUP BY OrderID;

8. Guarde y recargue el script.


Los nuevos campos de medidas clave deberan estar listos para usar.

QlikView Developer II | 5 SCRIPT AVANZADO

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;

3. Cree una tabla pivotante con las dimensiones CategoryType y CategoryName.


4. Cree las siguientes cuatro expresiones:
Sales
Sum(LineSalesAmount)
COGS
Sum (CostOfGoodsSold)
Margin
Sum (Margin)
Margin % Sum (Margin)/ Sum (LineSalesAmount)
5. D a la tabla el formato que desee.

Figura 1. La tabla pivotante resultante.

43

QlikView Developer II | 5 SCRIPT AVANZADO

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


Objetivos

Introducir los clculos avanzados en grficos y tablas, incluyendo:


Anlisis de conjuntos
Expansin de signo dlar
Funcin aggr
Completar los ejercicios con ejemplos de cada una de estas funciones

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

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


Hay una constante que se puede utilizar para denotar un conjunto de registros. El 1.
Representa el conjunto completo de todos los registros de una aplicacin.
El signo dlar $ representa los registros de la seleccin actual. La expresin de conjunto
{$} es por tanto equivalente a no declarar una expresin de conjunto. {1-$} es la ms
interesante, puesto que define lo inverso de la seleccin actual, esto es, todo lo que la
seleccin actual excluye.
Las selecciones de las pilas Atrs/Adelante pueden utilizarse como identificadores de
conjuntos, por medio del signo dlar: $1 representa la seleccin previa, esto es, la
equivalente a pulsar el botn Atrs. De forma similar, $_1 representa un paso hacia
delante, esto es, equivale a pulsar el botn Adelante. Se puede utilizar cualquier nmero
entero sin signo en las notaciones Atrs y Adelante. $0 representa a la seleccin actual.
Finalmente, se pueden utilizar marcadores como identificadores de conjuntos. Se puede
utilizar, o bien el ID de marcador, o el nombre del marcador, por ej. BM01 o MiMarcador.

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:
+

Unin. Esta operacin binaria devuelve un conjunto


compuesto por los registros que pertenecen a cualquiera de los dos
operandos de conjunto.

Exclusin. Esta operacin binaria devuelve un conjunto


formado por los registros que pertenecen al primero, pero no al
segundo, de los dos operandos de conjunto. Adems, cuando se emplee
como operador unario, devuelve el otro conjunto complementario.

Interseccin. Esta operacin binaria devuelve un conjunto


formado por los registros que pertenecen a ambos operandos de
conjunto.

Diferencia simtrica (XOR). Esta operacin binaria


devuelve un conjunto formado por los registros que pertenecen a
cualquiera, pero no ambos, de los operandos de conjunto.

El orden de prevalencia es
1) Unario menos (complementario),
2) Interseccin y Diferencia simtrica, y
3) Unin y Exclusin.

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


Dentro de un grupo, la expresin se evala de izquierda a derecha. Se pueden definir otros
rdenes alternativos mediante la utilizacin de parntesis estndar, lo cual puede resultar
necesario pues los operadores de conjunto no son conmutables, esto es, por ejemplo,
A+(B-C) es distinto de (A+B)-C lo cual a su vez, es distinto de (A-C)+B.
Ejemplos de operadores de conjuntos:
sum({1-$} Ventas )
devuelve las ventas de todo, excluida la seleccin actual.
sum ({$*BM01} Ventas )
devuelve las ventas de la interseccin entre la seleccin actual y el marcador
BM01.
sum ({-($+BM01)} Ventas )
devuelve las ventas excluidas por la seleccin actual y el marcador BM01.
Nota: La utilizacin de operadores de conjuntos junto con expresiones bsicas de
agregacin que incluyan campos procedentes de mltiples tablas QlikView puede
acarrear resultados impredecibles y debera evitarse. Por ejemplo, si Cantidad y Precio
son campos de tablas diferentes, la expresin sum({$*BM01}Cantidad*Precio) debera
evitarse.

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

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


El caso ms habitual, no obstante, consiste en efectuar una seleccin basada en una lista
de valores de campo encerrada entre llaves y con los valores separados por comas, por ej.
<Ao = {2007, 2008}>. Las llaves aqu definen un conjunto de elementos, donde stos
pueden referirse, o bien a valores de campo, o a bsquedas de valores de campo.
Una bsqueda siempre viene definida por el empleo de comillas dobles, por ej.
<Ingrediente = {"*Ajo*"}> seleccionar todas las recetas que incluyan la cadena 'ajo'.

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.

Adems, la seleccin dentro de un campo puede definirse empleando operadores de


conjuntos y diversos conjuntos de elementos, como por ejemplo, el modificador
<Year = {"20*", 1997} - {2000}>
lo cual seleccionar todos los aos que comiencen por 20 adems de 1997, excepto
2000.
La notacin anterior define nuevas selecciones, descartando la seleccin actual en el
campo. Sin embargo, si quiere basar su seleccin en la seleccin actual del campo y
aadir valores de campo, por ej. si quisiera un modificador <Year = Year + {2007,
2008}>. Una forma breve y equivalente de escribir esto es <Year += {2007, 2008}>, esto
es, el operador de la asignacin define implcitamente una unin.
Tambin se pueden definir las intersecciones, exclusiones y diferencias simtricas
implcitas mediante *=, -= y /=.
Finalmente, para campos en modo and, tambin existe la posibilidad de una exclusin
forzada. Si desea forzar la exclusin de valores especficos de campo, necesitar emplear
"~" frente al nombre de campo.

Nota: Un modificador de conjuntos puede emplearse solo o dentro de un identificador de


conjuntos. No puede utilizarse en una expresin de conjuntos. Cuando se utiliza en un
identificador de conjuntos, el modificador ha de escribirse inmediatamente detrs del
identificador de conjuntos, por ej. {$<Year = {2007, 2008}>}. Cuando se utiliza solo, se
interpreta como una modificacin de la seleccin actual.

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

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

Expansin de Signo Dlar empleando una variable


Cuando se utiliza una variable para reemplazo de textos en el script o en una expresin, se
emplea la sintaxis:
$(nombrevariable)
$(nombrevariable) se ampla al valor contenido en nombrevariable. Si nombrevariable no

existe, la expansin ser la cadena vaca.


Para expansiones numricas de variable, se emplea la sintaxis:
$(nombrevariable)
$(nombrevariable) siempre da un punto como signo decimal en el valor numrico de
nombrevariable, posiblemente con notacin exponencial (para nmeros muy
grandes/pequeos). Si no existe nombrevariable o no contiene un valor numrico, se

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

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


$(=expresin)
La expresin ser evaluada y el valor se utilizar en la expansin.
Ejemplo:
$(=Year(Today())); // devuelve el ao natural basndose en la fecha del sistema,
con lo que, si su fecha del sistema es 28 de mayo de 2009, devuelve '2009'.
$(=Only(Year)-1); // devuelve el ao anterior al seleccionado.

Funcin AGGR
AGGR es una potente funcin de QlikView que devuelve un conjunto de valores de

expresin calculados sobre las dimensiones. El resultado puede compararse con la


columna de expresiones de un grfico local, evaluado en el contexto en que reside la
funcin aggr. Cada dimensin debe ser un nico campo y no puede ser una expresin (por
ej. una dimensin calculada).
Si el argumento de la expresin va precedido por el cualificador nodistinct, cada
combinacin de valores de dimensin puede generar ms de un valor de retorno,
dependiendo de la estructura de datos subyacente. Si el argumento de la expresin va
precedido del cualificador distinct, o si no se utiliza cualificador alguno, cada
combinacin de valores de dimensin generar un nico valor de retorno.
Por defecto, la funcin aggr agregar sobre el conjunto de posibles registros definidos por
la seleccin. Se puede definir un conjunto alternativo de registros mediante una expresin
de conjunto.
Empleando esta funcin en dimensiones calculadas es posible obtener agregacin de
grficos anidada en mltiples niveles.
Cuando se emplea aggr en expresiones de grficos, es posible obtener los totales de
sumas de filas en una tabla pivotante.
Ejemplos:
aggr( sum(Ventas), Pas )
aggr( nodistinct sum(Ventas), Pas )
aggr( sum(Ventas), Pas, Regin )
count( aggr( sum(Ventas), Pas ))

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

Ejercicios - Clculos Avanzados


Haga lo siguiente: Anlisis de Conjuntos
Cree una tabla simple que muestre una comparativa de ventas anuales por
CompanyName basado en el ao seleccionado por el usuario.
1. Navegue hasta el directorio c:\QlikViewTraining\DeveloperII\Chapter06 y

abra el archivo Set_Analysis.qvw


2. Guarde una copie del archivo para preservar el original en caso de que desee
empezar desde el principio ms tarde. Haga esto mediante el comando Archivo |
Guardar como. Tambin hay un archivo acabado en _Solution.qvw que

contiene el ejercicio completo para futura referencia.


3. Cree una copia de la hoja Sheets y denomnela Entorno de Trabajo-4 o

Workspace-4. Dirjase a su nueva hoja.


4. Asegrese doblemente de que hay un cuadro de lista en la hoja para el Ao. Si

no, aada uno.


5. Haga clic en una zona en blanco de la hoja y elija Nuevo Objeto de Hoja | Grfico

en el men contextual.
6. Pulse el icono de Tabla Simple (la esquina inferior derecha de los Tipos de

Grfico) e introduzca Comparativa Anual en el ttulo de la ventana. Pulse


Siguiente.
7. Introduzca Customer en las Dimensiones Utilizadas y pulse Siguiente.
8. Cree las tres expresiones siguientes utilizando las etiquetas que se suministran:

Etiqueta

Expresin

=Only(Year)

Sum({$<Year={$(=Only(Year))}>}
LineSalesAmount)

=Only(Year)-1

Sum({$<Year={$(=Only(Year)1)}>} LineSalesAmount)

=Only(Year) & ' vs ' &


(Only(Year)-1)

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

en la imagen inferior; recuerde que Customer (Cliente) deber configurarse


como Texto.

51

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

12. En la pestaa Efectos Visuales establezca los valores negativos de la

comparativa anual en rojo y los positivos en verde.

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


13. Vuelva a la pestaa General y aada una Condicin de Clculo para garantizar

que el usuario selecciona un Ao para poder iniciar la comparacin


introduciendo lo siguiente en el recuadro de la Condicin de Clculo:
Count(distinct [Year])= 1
14. Pulse el botn Mensajes de Error de la pestaa General y a continuacin en La
condicin de clculo del objeto no se cumple, en la lista de Mensajes Estndar.
15. Introduzca la frase: Seleccione un Ao para compararlo con otro ao anterior
en el recuadro de Mensaje Personalizado y pulse Aceptar.

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

ejercicio, su tabla simple presentar ms o menos el siguiente aspecto:

53

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

18. Guarde su trabajo.

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

Haga lo siguiente: Anlisis de Conjuntos Avanzado


1. Contine trabajando en el archivo que ha estado utilizando hasta ahora en este
mismo apartado de ejercicios.
2. Cree un grfico que compare ventas de productos en la categora Babywear
(Ropa de beb) con la categora Childrens Wear (Ropa de nios) a lo largo
del tiempo para la oficina de ventas Nice.
3. Para ello necesitar crear una expresin que utilice anlisis de conjuntos y
Expansin de Signo Dlar en lugar de las tradicionales sentencias if().
4. Fije el nombre de la categora a fin de hallar Babywear y la oficina en 4.
5. Preste atencin a los < > y {}.

Solucin:
sum({$<CategoryName={'Babywear'}, Office={4}>} LineSalesAmount)
sum({$<CategoryName={'Childrens wear'}, Office={4}>} LineSalesA-mount)

Haga lo siguiente: Ejercicio con la funcin AGGR


6. Contine trabajando en el archivo que ha estado utilizando hasta ahora en este
mismo apartado de ejercicios.
7. Cree una tabla que muestre si hay algn enlace entre el nmero de pedidos
encargados por los clientes y el valor medio del pedido. La tabla debera

55

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA


suministrar informacin sobre cuntos clientes han realizado un pedido, dos
pedidos, etc. as como tambin el valor medio del pedido.
8. Hay tres pasos en este proceso. Primero, cree una dimensin calculada para el
nombre de pedidos (como cuntos clientes hicieron un pedido, dos pedidos,
tres pedidos, etc.). Esto requiere emplear la funcin aggr. Primero, para contar
el nmero de pedidos utilice:
Count(distinct OrderID)
Y luego, para agregarlos a la Dimensin Customer utilice:
aggr(, CustomerID)
Ponindolo todo junto, introduzca una dimensin calculada basada en el
siguiente clculo:
aggr(count(Distinct OrderID), CustomerID)
Esto crear los necesarios recipientes de ordenacin para Customer.
9. A continuacin necesitamos hallar la cantidad media de pedidos. Sales viene
de la tabla Sales Detail y es un elemento de lnea por cada producto vendido.
As, un pedido puede tener varios productos y por tanto, varias lneas con
datos de Ventas, por lo que necesitamos agregar por OrderID (IDPedido) para
obtener la cantidad total de ventas por pedido.
avg(aggr(sum(LineSalesAmount), OrderID)

QlikView Developer II | 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA

57

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

7 DESAFOS DE SCRIPT Y MODELADO DE DATOS


Objetivos

Entender el uso de las tablas de enlace


Calcular el cambio neto dentro de un campo
Emplear las funciones avanzadas para la gestin del tiempo
Saber por qu son importantes la agregacin dinmica y la correspondencia
de intervalos.

Tablas de Enlace y Tablas Concatenadas


Las tablas de enlace combinan informacin que tiene diferentes niveles de detalle o
frecuencia. Por lo general, cuando ms conviene utilizarlas es cuando las mtricas que se
estn midiendo no poseen la misma base de tiempo, porque quizs una sea una agregacin
sobre un perodo de tiempo, por ej. por Mes. Las tablas de enlace tambin se emplean
cuando los datos no cumplen con los requisitos de negocio de un clculo. As que puede
pensar en ellas como lo que su propio nombre indica: son tiles para enlazar informacin
que de otro modo no se enlazara automticamente mediante la lgica asociativa de
QlikView.
En otras palabras, cuando cargamos los datos se pueden dar ciertos casos en los que
necesitamos almacenar informacin de hechos en diferentes tablas, como por ejemplo, las
transacciones aisladas de los presupuestos. Cada tipo de tabla necesitar enlazarse con
mltiples dimensiones comunes (como Tiempo y Producto) los cuales entonces causaran
bucles en la estructura de datos. Para esquivar estas situaciones problemticas, creamos
las tablas de enlace que almacenan las formas individuales en que cada tabla de hechos se
asocia con las dimensiones comunes.

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.)

Calcular el Cambio Neto en un Campo


Mientras se cargan los datos, podr ver lo que se est cargando mediante la funcin peek()
y podr utilizarla en clculos que expresen las relaciones entre registros. Eso puede
resultar til para comprender una hoja de contabilidad a lo largo del tiempo, por ejemplo.

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS


Tambin podemos ver lo que se ha cargado en el proceso de carga con la funcin
previous(). La funcin previous() slo podr utilizarse para mirar un registro ms atrs en el
proceso de carga. Si necesita mirar ms atrs de un registro en el proceso de carga, tendr
que anidar la funcin previous() tal que:
Previous(previous(myRecord))
Esto puede ser problemtico y pesado cuando se desea ver el cambio neto total o el
cambio porcentual.
Imaginemos que necesitamos contar el nmero de unidades que hay en un determinado
sitio en una semana y necesitamos encontrar el porcentaje de utilizacin de una unidad en
un determinado sitio.
Si las unidades estn en mltiples sitios pero retornan al mismo sitio dentro de la misma
semana, peek() y previous() pueden funcionar, pero requieren una codificacin compleja
con bucles FOR o cargas RESIDENT. No obstante, podemos evitarlo agrupando la
informacin desde una tabla de rastreo y uniendo por la izquierda el resultado en la tabla
de rastreo.
Los pasos del ejercicio muestran la diferencia.

Funciones InDate e Islas de Datos


Esta seccin incluye diversos conceptos empleados para crear aplicaciones: las funciones
InDate, las Islas de Datos o Islas de Fechas.
Las Islas de Datos o Islas de Fechas son tablas que no van directamente enlazadas con
otras tablas (tablas que son independientes de cualquier enlace explcito). Podemos pensar
en ellas como en un conjunto de valores que pueden cambiar con una seleccin realizada
por el usuario y obligarn a que los nuevos resultados se muestren en el modelo de datos
de QlikView por medio de una conexin de campo no clave.
Sin embargo, cuando utilice este modelo no cambiar el estado de las selecciones en el
modelo de datos QlikView subyacente. ste normalmente se emplea para KPIs de forma
que, cuando se desplace una pestaa con ms detalle el usuario tenga una vista completa y
una seleccin de los datos para filtrado.
Si hay una seleccin en el modelo de datos de QlikView fuera de una Isla de Datos dicha
seleccin eliminar los datos empleados en el clculo de un KPI y podra dar como
resultado una visualizacin de KPIs en blanco o errnea.
Las funciones InDate() se utilizan conjuntamente con las Islas de Datos/Fechas.

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

dimensiones. Como regla general, no se puede agregar una expresin agregada


(agregaciones anidadas). La excepcin a esta regla es utilizar aggr(); el formato es:
aggr([distinct | nodistinct] expression {,dimension})

59

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS


La mejor forma de entender la funcin aggr() es pensando que, empleando esta funcin,
podr crear un minimodelo de datos QlikView sobre la marcha, sin necesitar editar los
datos de su script de carga o recargarlos desde los datos fuente de su archivo QlikView.
Esto permite la agregacin anidada. Podr aadir ms dimensiones que vienen
representadas en grficos, como por ejemplo una tabla pivotante.
Aggr() se utiliza en la interfaz de usuario, ms que en el script de carga. Normalmente se

utiliza en una expresin de un objeto grfico, como vimos en el captulo anterior.

Class()
Class() es una funcin de agregacin que puede utilizarse para crear contenedores de

informacin similares a los que crearamos en una aplicacin de cuentas pendientes de


cobro que mostrase las cuentas vencidas. Otra forma de entender Class() es pensando que
permite agrupar sus valores de dimensin.

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.

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

Ejercicios: Diseo y Script avanzados


Haga lo siguiente: Enlazar tablas
1. Inicie QlikView y guarde una copia de trabajo del archivo QlikView en el

directorio de trabajo de este captulo y seccin


(C:\QlikViewTraining\DeveloperII\Chapter07\LinkTables\Linktable.qvw).
2. Abra el archivo Excel LinkTable.xls y examine los campos Sales y Budgets.

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

pestaa Using a Key y recargue la aplicacin. Observe que estamos tratando


de eliminar la clave sinttica concatenando los campos que estn ocasionando
la tabla sinttica. Compruebe el resultado del archivo QlikView y compare
ambos con la hoja Excel. Podr observar que devuelve informacin incorrecta
por las malas correspondencias entre campos clave; faltan clientes de cada
tabla.
4. Comente el script en la pestaa Using a Key y elimine el comentario del script

de la pestaa Link Table y recargue el documento.


Aqu estamos cargando la informacin de la tabla Sales y Budget dos veces.
Esto genera una tabla intermedia que tiene informacin comn de ambas
tablas. El nivel de detalle se mantiene en tablas aparte tanto para Sales como
para Budget. La tabla de enlace debe cargarse con Distinct (solamente
combinaciones de clave nicas) y as establecer relaciones correctas.
5. Cree un cuadro de tabla que incluya todas las columnas.

61

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

6. Comente el script desde el paso 3 (en la pestaa Link Table) y elimine el

comentario del script en la pestaa Concatenate. Recargue la aplicacin.


Utilice un campo RecSource para distinguir entre registros concatenados.
Utilice tambin referencias explcitas para concatenar as la tabla en la que
ocurrir la concatenacin. Finalmente, observe el LEFT JOIN que aade el
campo Customer a la tabla y observe que trae como resultado un modelo de
datos con una nica tabla. Sugiera una forma alternativa de obtener el mismo
resultado.
7. Observe el resultado. Ver que es el mismo que en los pasos 1 y 3. Observe

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.

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

Haga lo siguiente: ejercicio de concatenacin


1. Abra el archivo LeftJoin.qvw ubicado en la carpeta LeftJoin, guarde una copia

de trabajo y ejecute el script en la pestaa Previous. Cree dos cuadros de lista


y utilice los campos Units y Dept.

2. Seleccione la unidad con el nmero 54543. Cree un cuadro de tabla que utilice

todos los campos y mire los contadores.


3. Aqu ver que todava no tenemos una cuenta total de las unidades en el Dept

A2, tendramos que recargar la tabla de nuevo. Pero dnde paramos?


4. La solucin est en agregar los datos utilizando una clusula GROUP BY desde
los datos de la tabla Tracking (de rastreo) y hacer un LEFT JOIN del resultado

en la tabla Tracking.
5. Comente la informacin en la pestaa Previous, elimine el comentario de

script de la pestaa Left Join y recargue la aplicacin. De este modo, ahora


podr hallar el nmero de veces que se utiliza una unidad en todos los Dept. de
cualquier semana Week. Esto se hizo con una carga RESIDENT adicional.
6. Su resultado:

63

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS


Ahora podemos calcular el porcentaje de utilizacin de una unidad en un Dept. en
una determinada semana.

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.

Haga lo siguiente: ejercicio sobre Islas de Datos


1. Abra el archivo DateIsland.qvw en la carpeta Date_Island, guarde una copia

de trabajo del archivo y aada el siguiente cdigo en la pestaa Calendar bajo


la lnea MasterCalendar: en el script.

2. Recargue el script.
3. Cree un Cuadro de Lista y una Tabla Pivotante. En la Tabla Pivotante use

Country y cualquier CategoryType. Para el cuadro de lista muestre


DateMonthYear. Use dos de las tres expresiones que hay a continuacin (pista:
una de ellas viola una prctica recomendada):

4. Seleccione un nico DateMonthYear. El resultado debera ser el siguiente:

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

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

en una columna pero no en la otra.

Recuerde estos puntos clave:

Se puede filtrar sin afectar al resto de la estructura de datos.

Esto se logra mediante el uso de sentencias condicionales y presentando los


criterios de seleccin de dichos filtros en campos que no enlacen con la
estructura de datos.

Se pueden utilizar funciones Inter-registro para calcular medias mviles y


realizar comparativas entre perodos en tablas simples y pivotantes.

65

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

Haga lo siguiente: Ejercicio Class()


1. Abra el archivo Class.qvw en la carpeta Class y guarde una copia de trabajo

del archivo.
2. Cree variables denominadas vDate (fije vDate como una fecha actual y dele un

formato de fecha, no numrico) y vWidth (utilizar un prefijo v o var para


denotar variables es una buena prctica recomendada) en la pestaa Variables
en el men Configuraciones | Propiedades de documento.
3. Cree un objeto calendario, pulse el botn de opcin Variable(s) y elija vDate

como la variable asignada al objeto Calendario.


4. Cree un cuadro de entrada y elija vWidth como la nica Variable Mostrada.

Figura 1. Configuraciones de variable

Figura 2. Objetos Calendario y Cuadro de Entrada

5. A continuacin cree una tabla pivotante con CompanyName como la

dimensin y sum(LineSalesAmount) como la expresin.


6. Por ltimo crearemos una dimensin calculada en la tabla pivotante.

Aada la funcin class() empleando lo siguiente:


=class(num(OrderDate - $(vDate)),$(vWidth),'Dt')
Aqu utilizamos dos variables para cambiar dinmicamente el perodo de
inicio, as como los contenedores en los que entra la informacin sobre las
ventas o cuentas pagaderas. Los pantallazos a continuacin muestran dos
valores vWidth diferentes.

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

67

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

Haga lo siguiente: ejercicio de agregacin dinmica


1. Abra el archivo ubicado en la carpeta DynamicAggregation llamado

DynamicAggregation.qvw, guarde una copia de trabajo y recrguelo. A


continuacin cree una tabla pivotante como sta:

En la que la expresin es sum(LineSalesAmount)


2. Cuando ya haya terminado el grfico, edite el script creando la siguiente tabla
INLINE y recargue (Observe aplicando una buena prctica esto tambin se

podra hacer creando y cargando un texto externo o archivo Excel).

3. A continuacin cree una variable vMyAgg con el valor =Formula como se

muestra debajo. Recuerde el signo igual:

4. Cree una copia del primer grfico y reemplace la expresin

sum(LineSalesAmount) por

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS


Observe el test para determinar cmo dar formato a la presentacin numrica
(enteros o moneda). Podra tratar de incluir la cadena de formato con la
expresin en la tabla INLINE como un campo adicional y luego modificar la
expresin en consecuencia.
5. Aada dos cuadros de lista con las columnas Desc y Formula adems de un

cuadro de texto con =vMyAgg introducido en el rea de texto.


6. El resultado es que puede modificar sus KPIs sobre la marcha. El resultado

debera parecerse a lo siguiente:

7. Esta tcnica puede utilizarse para cambiar la presentacin de tablas y pginas

enteras modificando las unidades de medida de los clculos efectuados en el


objeto de hoja (como se ve arriba). Se puede utilizar para mostrar / ocultar
tablas y grficos basndose en las selecciones realizadas en un cuadro de lista.
Puede crear un archivo externo que sea una librera de expresiones y despus
cargar en archivo y crear variables que contengan sus expresiones.

Haga lo siguiente: ejercicio Interval Match


1. Abra el archivo IntervalMatch.qvw. Guarde una copia de trabajo y recargue el

archivo.
2. Cree una tabla que muestre la suma de horas que una persona trabaja y una

tabla con la cuenta de horas trabajadas por cada empleado (Emp).


Observe que la lnea antes de IntervalMatch() va comentada.
3. Mire el resultado en el Visor de Tablas. Observar que este script ha creado

una tabla $Syn. Como ya vimos anteriormente, una tabla $Syn puede tener un
coste muy alto.

69

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

Elimine el comentario de la sentencia anterior a IntervalMatch() y recargue el


documento.
Resultado:

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.

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

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().

3. La media de LineSalesAmount por Country, Company, Year y Quarter con la

expresin a continuacin:

4. Y, finalmente, las ventas totales

5. Cree el grfico inferior utilizando las expresiones anteriores.

6. Una vez que haya creado el grfico, investigue un poco ms modificando la


dimensin tiempo en la parte dimensional de la funcin aggr(). Determine

cuntos Orders (pedidos) se hicieron en cada Month (mes) y cuntos meses


tenan Orders pedidos en ellos. Trate de explicar algunas de las medias
resultantes en cada columna.

71

QlikView Developer II | 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

8 OPTIMIZACIN DEL MODELO DE DATOS


Objetivos

Comentar ajustes de rendimiento


Explorar el impacto de un buen diseo de la aplicacin
Introducir conceptos de seguridad
Revisar buenas prcticas.

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.

Concntrese primero en las tablas de hechos mayores


Pero sin ignorar las tablas de dimensin

Elimine los campos que no se utilizan actualmente


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

Nmero de valores distintos / Columna


Los campos con muchos valores distintos utilizan un mayor espacio
Muchos de ellos pueden eliminarse / truncarse por completo
1.
2.

Claves de sistema
Marcas de tiempo (fecha/hora) con minutos / segundos

Otros pueden transformarse dividindolos en diversos componentes


1.

Nmeros telefnicos

73

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS


2.

Marcas de tiempo (fecha/hora)

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

Evite demasiados objetos activos en la misma hoja.


Los objetos minimizados apenas consumen recursos, utilcelos cuando lo considere
apropiado.

Importancia de la seguridad Las elecciones correctas


Seguridad QlikView Publisher
Seccin de Acceso
Seguridad Publisher
Dividir un gran archivo QlikView en mltiples pequeos archivos basndose en la
seguridad a nivel de filas
Eficaz para una gestin de la memoria si los perfiles de seguridad no contienen muchos
datos que se solapen.
Seccin de Acceso

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS


Reduce dinmicamente el archivo QlikView desde el login (o entrada registrada al
sistema) basndose en autorizacin por parte del usuario.

Prcticas recomendadas para optimizacin de archivos QlikView


Dimensiones y expresiones complejas
Muchas dimensiones y expresiones que se van a colocar en grficos o tablas requieren
cierto grado de complejidad en el script como es el caso de las sentencias IF THEN ELSE
o WHERE [CAMPO1] IS NULL.
Muchos desarrolladores crean su modelo de datos inicial utilizando los procesos
anteriormente descritos pero despus dejan de modificar el script y trabajan nicamente
con el cuadro de mando o la GUI. Cuando disee/escriba su script debera ser consciente
de los objetivos que persigue.
Trate de situar todas las frmulas y sentencias complejas dentro del script de la aplicacin
y no en los objetos del cuadro de mando o la aplicacin.
Si va a utilizar expresiones complejas dentro de una dimensin o clculo, entonces
debera mover lo ms posible de esto al script del QVW.

Expresiones que consumen muchos recursos


Count (Distinct NombreCampo)
Reemplace el count() por sum() y el cualificador distinct asignando el valor 1 a cada
ocurrencia distinta tal y como se lee en el script
If (Condicin(Texto),)
Haga corresponder texto con nmeros, por ejemplo empleando autonumber y/o probando
el script
Sum(If(Condicin, NombreCampo))
Aqu la agregacin es independiente de las dimensiones de tabla y el resultado se
distribuye por las dimensiones de la tabla. El problema puede arreglarse o bien haciendo
la comprobacin en el script y agregando en la tabla, o bien efectuando la operacin
completa en el script. Existen numerosas tcnicas para esto, por ej. IntervalMatch, group
by, peek, ifthenelse.
If(Condicin, Sum(NombreCampo))
Se ha incluido aqu para enfatizar la diferencia con el anterior. Esta agregacin es
completamente contextual.
If(Condicin1, Sum(NombreCampo), If(Condicin2, Sum(NombreCampo)
La lgica del If..then..else anidado es conceptualmente sencilla pero a menudo puede
volverse muy complicada de administrar. Hemos visto casos con cientos de niveles de

75

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS


anidacin. Esto consume mucha memoria y mucha CPU. A menudo las condiciones
pueden reemplazarse transformndolas. Un ejemplo tpico es agregando quantity*price
donde price es variable. Esto puede ser manejado por extended interval match. Si se ha
de satisfacer dos condiciones, por ej. A Y B la comprobacin podra ser reemplazada
por una condicin C.
Ordenar texto
QlikView evala automticamente si se ha de tratar un campo como numrico, de texto o
general. Los campos evaluados como texto se almacenarn como texto, lo cual es la
operacin de ordenacin ms lenta de todas. Esto puede reemplazarse manualmente para
ordenar por orden de carga.
Ttulos y objetos de texto dinmicos
Las expresiones se pueden introducir prcticamente en cualquier parte en la que podamos
introducir texto. La evaluacin de una expresin, no obstante, depende de su entorno. Las
expresiones de grficos y tablas simples y pivotantes que se definen en el dilogo
expresiones estn incrustadas y slo se calculan cuando el objeto est activo. Por ejemplo,
no se calculan cuando el objeto est minimizado.
Por otra parte, si el ttulo del objeto se calcula, este clculo se realiza cada vez que se
produce alguna modificacin. Tambin tenemos numerosas maneras de definir unas
condiciones de visualizacin, clculo, etc. Estas comprobaciones tambin se realizarn en
todo momento. Algunas expresiones resultan ms caras que otras y por supuesto afectan
ms al rendimiento cuanto mayor sea la frecuencia con la que han de ser evaluadas. La
introduccin del clculo asncrono ha modificado el comportamiento y estos efectos
pueden hacerse ms notables en sus aplicaciones. Las funciones de tiempo, por ej. Now(),
Today() se evaluarn cada vez que haya que recalcular. Especialmente la funcin Now()
puede volverse muy costosa puesto que provoca un reclculo de la aplicacin a cada
segundo.
Por ejemplo
If(ReloadTime()+3>Now(), Old Data, New Data)
Aqu podra considerarse
If(ReloadTime()+3>Today(), Old Data, New Data)
A modo de comprobacin simple, site las expresiones en cuadros de texto. A
continuacin trate de dimensionar el cuadro de texto que contenga el Now().

Adicin de columnas agregables a su script


A veces es conveniente aadir columnas manuales a su script para dar a su aplicacin la
capacidad de agregar sobre estos valores. Esto significa que podr colocar la sentencia
compleja IF en su script y realizar una simple suma en su objeto del cuadro de mando.
Para hacer esto simplemente coloque una sentencia IF THEN ELSE en su script que
sustituya a una columna de una base de datos o a 1 0 como un valor para permitir una
suma u operacin.

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS


Ejemplos:
IF(ACTIVE='Y',1,0)
IF(ACTIVE='Y',sales_amount,0)

Forzando a cero elimina todos los valores innecesarios / no deseados cuando aplique su
SUM.

Crear cargas incrementales


Una carga incremental es una tarea comn en una base de datos. Las cargas incrementales
se utilizan cuando se cargan solamente los registros nuevos o modificados de una base de
datos. Los archivos QVD se utilizan para hacer cargas incrementales en QlikView. Las
cargas incrementales bien hechas mejoran significativamente el rendimiento.

77

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

EJERCICIOS:
Haga lo siguiente:
En este ejercicio cubriremos varios conceptos QlikView, entre los que se incluyen:

Carga incremental QVD


Carga binaria

Su sistema de produccin est sobrecargado cuando QlikView tira de todo el


historial. Su Director Tcnico viene hasta donde est usted y le dice que ponga fin
a esto ya. Cmo arreglarlo?
1. Vaya a la carpeta con el material del curso para este captulo,
C:\QlikViewTraining\DeveloperII\Chapter08.
2. Abra el archivo BaseLineDataExtraction.QVW de la carpeta QVD,
recrguelo y pulse en Archivo | Guardar Como a fin de guardar el archivo con el
nombre de BaseLineDataModel.QVW en la carpeta QVDs.
3. Observe que ahora tiene un QVW que contiene su modelo de datos pero
nicamente tiene datos de 2006 para Orders, OrderDetails y Shipments.
Observe tambin que an no se ha construido ningn calendario maestro.
Carga Binaria
1. Cierre cualquier QVWs abiertos. Cree un nuevo QVW y gurdelo como
CreateQVD-fromBinary.QVW en la carpeta QVDs. Edite el script o pulse el
botn Archivo QlikView en el Editor de Script para aadir la carga BINARY del
archivo BaseLineDataModel.QVW que acaba de guardar en la misma carpeta.
Su script debera presentar el siguiente aspecto:

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS


2. Aada el cdigo siguiente a la parte inferior de su script.

3. Recargue y guarde el archivo y mire en la carpeta Datasources\QVDs. Debera


ver lo siguiente:

4. Cierre cualquier QVWs abiertos. Cree un nuevo QVW y gurdelo como


MyIncrementalQVDApplication.QVW en la carpeta QVDs.
5. Abra el editor de script. En la pestaa Main cree una conexin a la base de
datos QWT.MDB.
6. A continuacin edite el script para cargar todos los archivos QVD previamente
generados, excepto Orders y Shipments. Cree una nueva pestaa de script
denominada Load QVDs y cargue los QVDs pulsando el botn Archivos de
Tabla, navegando hasta la carpeta Datasources\QVDs y escogiendo el primer
archivo QVD. Repita el proceso hasta que todos los archivos QVD excepto
Orders y Shipments se hayan incorporado al script. No olvide dar formato a su
script conforme a la gua de mejores prcticas recomendadas y recuerde
nombrar explcitamente cada tabla. Guarde su trabajo con frecuencia.

79

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS


7. Cree una nueva pestaa de script llamada New Orders y aada el cdigo
siguiente al script:

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:

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

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.

11. Haga lo mismo para OrderDetails y Shipments. Pueden ubicarse en las


pestaas de Load Baseline QVDs junto con Orders.
12. Aada el cdigo siguiente tras Shipments en la pestaa Load Baseline QVDs.
Este cdigo calcula una cantidad OrderSalesAmount y la une con la tabla
Orders.

81

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

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:

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

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

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

Recuerde: Almacenar datos histricos que no cambian en archivos QVD y


luego cargar esos datos junto con otros datos de otras fuentes, que slo han
cambiado recientemente, es una manera eficaz de:

Optimizar la velocidad de recarga

Reducir el impacto en los sistemas fuente

Permitir a mltiples aplicaciones acceder a una nica fuente de datos QVD


comunes de acceso rpido.
La opcin Archivo | Reducir Datos es una forma rpida y flexible de crear un
subconjunto de datos basndose en la seleccin actual o eliminando todos los
datos de la memoria durante el desarrollo.

QlikView Developer II | 8 OPTIMIZACIN DEL MODELO DE DATOS

85

QlikView Developer II | 9 BALANCES Y TRANSACCIONES DIARIOS

9 BALANCES Y TRANSACCIONES DIARIOS


Objetivos

Entender la necesidad de balances


Explorar mtodos para manejarlos en QlikView
Repasar archivos de muestra

Visin General de Conjunto


A veces nos encontramos en una situacin en la que necesitamos crear informes de
balances a diario desde algn tipo de tabla de transacciones, incluso en aquellos das en
los que no se producen transacciones.
Otras veces quiz debamos registrar una hoja de balance en un determinado tipo de tabla
de transacciones, basada en las transacciones mismas, como las entradas y salidas de un
almacn, cuando puede que no se hayan producido transacciones en varios das ni en
todas las claves de dicho almacn.
Con QlikView podr manejar este tipo de situaciones.

Ejemplo: Balances en Fechas Especficas


Si los datos tienen registros de fechas de transaccin, pero no todas las fechas poseen
transacciones, puede que necesite crear las fechas que faltan, para poder hacer un anlisis
significativo en las transacciones, como por ej. determinar una Media de Balance Diario.
El script que hay a continuacin crea valores de fecha para todas las fechas posibles:
Nota: Puede revisar la fuente de datos y la solucin en
c:\QlikViewTraining\DeveloperII\Chapter09

Balances de inventario
Datasources\data saldon.xls

QlikView Developer II | 9 BALANCES Y TRANSACCIONES DIARIOS

87

QlikView Developer II | 9 BALANCES Y TRANSACCIONES DIARIOS

QlikView Developer II | 9 BALANCES Y TRANSACCIONES DIARIOS

Figura 1. Vista previa del Visor de Tablas que muestra los valores resultantes

Ejemplo: Balances para Transacciones (Entradas y salidas)


Se utiliza un proceso similar para crear el conjunto apropiado de fechas y claves para
registros de transacciones de almacn, incluyendo fechas para las que no existan
transacciones

Nota: Puede revisar la fuente de datos y la solucin en


c:\QlikViewTraining\DeveloperII\Chapter09

Balances de inventario basados en Transactions.qvw


Datasources\data trans.xls

89

QlikView Developer II | 9 BALANCES Y TRANSACCIONES DIARIOS

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

10 SEGURIDAD EN QLIKVIEW
Objetivos

Entender los componentes de seguridad de un documento QlikView


Analizar el control y las restricciones de acceso
Practicar implementando la Seccin de Acceso de QlikView

La seguridad informtica es un elemento importante en la mayora de organizaciones. En


este captulo analizaremos diversos mtodos que pueden emplearse para limitar el acceso
a documentos QlikView nicamente desde QlikView Desktop (esto es, sin un QlikView
Server). Es importante, no obstante, darse cuenta de que el presente captulo no es un
captulo general sobre seguridad QlikView, sino nicamente una introduccin a algunos
de los mtodos que podr utilizar directamente en QlikView para limitar el acceso a un
documento QlikView.
En este captulo analizaremos cmo podemos trabajar con la seguridad en QlikView,
entregando a cada usuario un nombre de usuario (userID) y una contrasea (password).
Tambin revisaremos cmo utilizar un SID de nombre (NT Name) y SID de dominio (NT
Domain) para permitir una nica entrada a un documento QlikView. Finalmente veremos
cmo podemos reducir dinmicamente la cantidad de datos mostrados a un usuario.

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.

La base de datos de control de acceso


Todo control de acceso es gestionado mediante archivos de texto, bases de datos o
clusulas INLINE de la misma manera que los datos son manejados normalmente por
QlikView. Las tablas se cargan de la forma habitual, pero en una seccin de acceso que se
carga en el script en una seccin iniciada por la sentencia SECTION ACCESS.

91

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW


Consejo: Tenga presente que todos los nombres de campos y valores se convertirn de
manera automtica a maysculas en la SECCIN DE ACCESO. Esto debe tenerse en cuenta
cuando se utilicen sentencias LOAD precedentes o LOAD RESIDENTES dentro de la seccin
de acceso.
Si se declara una Seccin de Acceso en el script de carga, la parte del script que carga los
datos estndar debe ir precedida por la sentencia SECTION APPLICATION. Hay varios
nombres de campo protegidos en la base de datos de control de acceso, incluyendo:
USERID, PASSWORD, SERIAL, NTNAME, NTDOMAINSID, NTSID, y ACCESS. Se
pueden aadir otros campos definidos por el usuario, por ej. GROUP o DEPARTMENT,
para facilitar la reduccin dinmica o la administracin de datos, pero QlikView no utiliza
los campos extra para limitar el acceso al documento. Se pueden cargar ninguna, todas o
cualquier combinacin de campos de seguridad en la SECCIN DE ACCESO. Si no se cargan
ninguno de los campos de seguridad, todos los usuarios tendrn derechos de ADMIN.
Por lo tanto, no es necesario utilizar USERID se puede hacer una comprobacin en solo
en SERIAL, por ejemplo. Este hecho puede aprovecharse para recargas de lnea de
comando de documentos con acceso restringido.
ACCESS

Un campo que define el acceso que debe tener un usuario.

USERID

Un campo que debe contener una ID de usuario que le proporcione el


privilegio especificado en el campo ACCESS.

PASSWORD

Un campo que contiene una contrasea aceptada.

SERIAL

Un campo que contiene un nmero que se corresponde con el nmero de


serie de QlikView. Ejemplo: 4900 2394 7113 7304

NTNAME

Un campo con una cadena que corresponde a un nombre de usuario o


nombre de grupo en Windows NT Domain.

NTDOMAINSID Un campo con una cadena que corresponde a un SID de dominio de

Windows NT.
Ejemplo: S-1-5-21-125976590-467238106-1092489882
NTSID

Un campo que contiene un SID de Windows NT.


Ejemplo: S-1-5-21-125976590-467238106-1092489882-1378

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.

QlikView comparar el nmero de serie de QlikView con el campo SERIAL, el nombre


de usuario de Windows NT y los grupos con NTNAME, el SID de dominio de Windows
NT con NTDOMAINSID y el SID de Windows NT con NTSID. Pedir a continuacin
User ID y Contrasea y comparar stos con los campos USERID y PASSWORD.
Si la combinacin hallada de USERID, contrasea y propiedades de entorno se encuentra
tambin en la tabla de Seccin de Acceso, entonces el documento se abrir con su
correspondiente nivel de acceso. Si no, QlikView negar al usuario el acceso al

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW


documento. Si el USERID y/o la contrasea no se introducen correctamente en tres
intentos habr que repetir todo el proceso de registro de entrada de nuevo.
En el procedimiento de entrada, QlikView comprobar primero SERIAL, NTNAME,
NTDOMAINSID y NTSID para ver si esta informacin es suficiente como para
garantizar el acceso al documento. Si es as, QlikView abrir el documento sin pedir
USERID y PASSWORD. Si slo se cargan parte de los campos de acceso, se emplearn
los recursos necesarios para requerir los datos que falten, por ej. mostrando mensajes
emergentes solicitando ms informacin.
Todos los campos listados en sentencias LOAD o SELECT de la seccin de acceso deben ir
en MAYSCULAS. Cualquier nombre de campo que contenga minsculas en la base de
datos ser convertido a maysculas antes de ser ledo por la sentencia LOAD o SELECT.
Sin embargo, el ID de usuario y la contrasea introducidos por el usuario final que abre
los documentos QlikView son insensibles a maysculas.
Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD
ADMIN, NEWDBA, ABC
];
Section Application;
.....

Restricciones de acceso heredadas


Una sentencia binary har que la restriccin de acceso sea heredada por el nuevo
documento QlikView que contenga la sentencia binary. Una persona con derechos
ADMIN a este nuevo documento puede cambiar los privilegios de acceso al nuevo
documento aadiendo una nueva SECCIN DE ACCESO. Una persona con derechos de
USUARIO (o USER) puede ejecutar y modificar el script (aadiendo sus propios datos al
archivo cargado con la sentencia binary). Una persona con derechos USER no puede
modificar los privilegios de acceso. Esto permite que un administrador de la base de datos
pueda controlar el acceso de los usuarios, incluidos los que inician con una sentencia
binary.

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:

Si se utiliza un script oculto, el comando binary no podr emplearse en el script


normal, ya que debe ser la primera sentencia ejecutada en un script de documento.

93

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

Las tablas generadas por la parte oculta del script no irn representadas por
nombre alguno en el campo de sistema $Table.

El dilogo Progreso de Ejecucin del Script no se actualizar durante la ejecucin de


un script oculto. No habr entradas al archivo de registro, si se emplea ste.
Observe que desde la versin 7 de QlikView, est disponible la posibilidad de
ignorar la Seguridad de Documento para Mostrar Progreso de Script Oculto. La
informacin de progreso tambin se escribir en el archivo de registro de
ejecucin de script, si procede.

Si el script oculto contiene una Seccin de Acceso, tal seccin no se permitir en el


script normal ni en un script que comience con una carga binary del archivo
QlikView que contiene el script oculto.

Inclusin de la Seccin de Acceso


Ahora aadiremos las lneas necesarias a nuestro script para verificar los privilegios de
acceso de varios usuarios. Normalmente es una buena prctica ubicar el script de cdigo
de la seccin de acceso en el rea de script oculto.
Antes de comenzar a trabajar con la seguridad en QlikView, asegrese de contar con una
copia de seguridad de su documento sin seguridad. Esta es una medida que le permitir
empezar de nuevo si la seccin de seguridad no funcionara como debiera.

Advertencia LE RECOMENDAMOS ENCARECIDAMENTE QUE GUARDE UN


DOCUMENTO CON SECCIN DE ACCESO CON UN NUEVO NOMBRE DE
ARCHIVO TRAS LA RECARGA, PERO ANTES DE TRATAR DE CERRAR Y
REABRIR EL DOCUMENTO QLIKVIEW. SI SE PRODUJERAN ERRORES
LGICOS EN LA SECCIN DE ACCESO, PUEDE QUE YA NO SE PUEDA ABRIR
EL DOCUMENTO UNA VEZ EFECTUADA LA REGARGA.

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

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

directorio de trabajo de este captulo


(C:\QlikViewTraining\DeveloperII\Chapter10)
2.

Una vez ms, asegrese de guardar el documento con otro nombre, por ej.
QlikView Training_wSecurity

3. Abra el Editor de Script.


4. Vaya al men Archivo y Crear Script Oculto
5. Introduzca la contrasea hidden y confrmela.
6. Seleccione Seccin de Acceso-Inline desde el men Insertar.

7. Seleccione Basic User Access Table, de modo que se verifiquen el acceso, ID

de usuario y la contrasea.
8.

Pulse Aceptar. y aada las siguientes lneas en la tabla.

Figura 1. Uso del Asistente de Datos Inline para seguridad.

95

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW


9. Pulse Aceptar. El asistente habr creado la siguiente sentencia de script:
Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD
ADMIN, ADMIN, ADMIN
USER, USER, USER
];
Section Application;
10. Nombre a esta tabla Access01.

Nota: DEBE INCLUIR LA SENTENCIA Section Application TRAS


LA CARGA DE ACCESO PARA PRODUCIR UN DOCUMENTO
UTILIZABLE.
11. Guarde y Ejecute el script.

Esta simple comprobacin de acceso requerir que el usuario se identifique


cuando abra el documento.
USERID USER y PASSWORD USER impedirn que el usuario acceda al script
de carga si dicha seguridad est especificada en Propiedades de Documento.
Un usuario que pertenezca al grupo USER tampoco tendr acceso a la pestaa
de Seguridad de los dilogos Propiedades de Documento y Propiedades de
Hoja.
USERID ADMIN junto con PASSWORD ADMIN darn al usuario derecho a
efectuar cualquier cambio en un documento en QlikView Developer.

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.

Figura 2. El dilogo Identificacin de Usuario

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

Control de acceso para ciertos comandos


Los parmetros de las pestaas de Seguridad de los dilogos Propiedades de Documento y
Propiedades de Hoja en el men Configuracin permiten evitar que los usuarios activen
ciertos comandos de men y modifiquen el diseo. Para hacer uso de estos parmetros de
seguridad, es importante, no obstante, que los usuarios cuenten nicamente con
privilegios de Usuario. Todos los que posean privilegios ADMIN podrn modificar los
parmetros de seguridad en cualquier momento.

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.

(Deber tener derechos de administrador para realizar lo siguiente.)


2. Vaya al men Configuracin y Propiedades de Documento.
3. En la pestaa Seguridad seleccione lo que los usuarios podrn y no podrn

hacer. Cercirese de que un usuario no pueda efectuar una recarga de script o


Guardar el documento.
4. Asegrese de marcar la opcin: Sustitucin de las condiciones de seguridad por el
admin., de manera que el administrador siempre tenga permisos para todo.

Figura 3. Propiedades de Documento - Seguridad

97

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

5. Pulse Aceptar y Guarde el documento.


6. Cierre el documento, bralo de nuevo y entre como usuario. Observe que no
podr Guardar el documento o Recargar el script.

Consejo: Hay una pestaa Seguridad en el dilogo Propiedades de Hoja


as como tambin en el rea donde se puede fijar la seguridad de la hoja
actual y aplicarla a todas las hojas.

Un mayor control de acceso


Es fcil incrementar el control de la seguridad de acceso para aquellos usuarios que
pensemos que requerirn acceso a un determinado documento. Aadiendo un campo a la
tabla INLINE anteriormente creada, podemos conectarla a una nueva tabla de dos columnas
en la que especifiquemos los nmeros de serie que tengan acceso al documento. De esta
manera, restringimos el acceso an ms a un documento especfico.
La nueva tabla de dos columnas se crear en el Bloc de Notas o un editor de texto similar,
y se denominar Access. Guardaremos este archivo de texto delimitado por tabulador en
el directorio DataSources.

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

actuarn como campos conectados) tal y como se muestra a continuacin.


Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD, COMPUTER
ADMIN, ADMIN, ADMIN, COURSE1
USER, USER, USER, COURSE2
];
Section Application;
2. Abra el Bloc de Notas o un editor de texto similar.
3. Cree una tabla de dos columnas con los campos COMPUTER y SERIAL.

Incluya su propio nmero de serie como valor de campo; encontrar este


nmero en el men Acerca de QlikView. A continuacin un ejemplo.
COMPUTER

SERIAL

Course1

2300 2394 7111 8000

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW


Course2

2300 2394 7111 8001

4. Guarde este archivo como Access02.txt.

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

la tabla recin creada Access02.txt tras la tabla inline, y antes de la sentencia


SECTION APPLICATION, como se indica a continuacin.
Access02:
Load
COMPUTER,
SERIAL
FROM Datasources\Access02.txt
(ansi, txt, delimiter is '\t', embedded labels);
Section Application;
6. Guarde y Ejecute el script del documento.
7. Cierre el documento y bralo de nuevo como Usuario.

Teniendo en cuenta que no ha introducido su nmero de serie en ambos registros en el


archivo Access02.txt, slo puede entrar registrado como USUARIO o ADMIN. Sera
fcil aadir una tercera lnea a las tablas de control de acceso que siempre dieran
derechos de USUARIO a cada nmero de serie, presuponiendo un ID de usuario y
contrasea vlidos. Para hacer esto, podemos aadir un tercer ordenador (por ej.
Curso 3) e introducir * como valor en el campo SERIAL.

Otras Consideraciones acerca de la Recarga en Lnea de Comando


Para crear un acceso de seguridad para un proceso de recarga en lnea de comando sin
intervencin, usara el SERIAL registrado por el usuario asignado al proceso de recarga en
el ordenador de recarga. A continuacin conecte a USERID y PASSWORD con asteriscos
* como valores (* aqu representa todos los valores posibles, lo cual evitara las peticiones
emergentes de USERID y PASSWORD). Deber fijar tambin el campo access en ADMIN
para este usuario.
Si aade el siguiente registro a la sentencia LOAD INLINE de Access01, esto permitir que el
ordenador Curso2 se utilice para recargas no supervisadas.
*,*,ADMIN,COURSE2]

99

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

Restricciones de acceso en valores de campo seleccionados


El acceso de seguridad de QlikView proporciona una funcin que impide que los usuarios
visualicen parte o partes de los datos de un documento. Esta funcionalidad se desarroll
originariamente para QlikView Server, pero puede utilizarse en QlikView, con una serie
de consideraciones al respecto.
La seleccin de los valores que se mostrarn u ocultarn se controla teniendo uno o varios
campos con idnticos nombres en la SECCIN DE ACCESO y la SECCIN DE APLICACIN.
Cuando el usuario se ha registrado, QlikView copia los valores seleccionados (en
maysculas) de la SECCIN DE ACCESO a los campos de la SECCIN DE APLICACIN que
tienen el mismo nombre. QlikView ocultar permanentemente al usuario todos los datos
que hayan sido excluidos mediante este proceso.
Todos los nombres de campo y valores empleados para conectar SECCIN DE ACCESO y
SECCIN DE APLICACIN deben ir en maysculas, ya que todos los nombres de campo y
valores de campo se convierten por defecto a maysculas en la SECCIN DE ACCESO.
Para hacer uso de esta funcionalidad, la opcin Reduccin Inicial de Datos basada en la
Seccin de Acceso en la pgina Al Abrir del dilogo Propiedades de Documento debe estar
marcada. Si esta funcin se utiliza en documentos que se van a distribuir por otros medios
distintos de QlikView Server, la opcin Carga Binaria no Permitida, en la misma pgina,
debe seleccionarse para mantener la proteccin a la integridad de los datos.

Consejo: Existe un problema conocido en la Reduccin Dinmica de Datos de


documentos QlikView segn el cual una recarga completamente ejecutada ignorar los
parmetros de reduccin dinmica de datos, permitiendo as a los usuarios visualizar
todos los datos. Para mitigar este riesgo de seguridad, la versin 8 de QlikView y
posteriores incorporan la prohibicin de recargas de datos en documentos que tengan
activada la reduccin dinmica de datos.

Limitacin del valor de campo en la Seccin de Acceso


Ahora trataremos de limitar la cantidad de datos mostrados en nuestro documento
QlikView. Queremos distribuir el archivo a los empleados implicados en el proceso de
ventas. No todos los agentes de ventas sin embargo tendrn acceso a los datos de sus
colegas. Por lo tanto, incluiremos una limitacin al script, lo cual nos asegura que cada
persona tenga acceso nicamente a sus propios datos.
Para ello utilizaremos dos archivos de texto. El primer archivo establecer los campos de
la SECCIN DE ACCESO de cada usuario autorizado. El segundo archivo de texto se cargar
en la SECCIN DE APLICACIN y limitar los datos de la aplicacin que cada usuario
autorizado podr ver cada vez que abra el documento QlikView. Ambos archivos de texto
se encuentran en el directorio Datasources.
Tambin debemos tener en cuenta que necesitamos un administrador que gestione el
documento. Uno de los agentes de ventas es tambin el Jefe de Ventas de la compaa, as

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW


que es lgico que l ostente el pleno acceso a la totalidad del documento y pueda ver el
rendimiento de cada vendedor. Tambin tenemos un Coordinador de Ventas en la ciudad
de Lund, Suecia, que debera tener acceso a todos los datos de todos los agentes de
ventas. Este acceso puede implementarse a travs de la utilizacin de un valor de campo
nulo especificado en el campo de conexin cuando se cargue en la seccin de la SECCIN
DE ACCESO. Podra utilizar tambin el valor * para este campo, como hicimos antes con
los campos USERID y PASSWORD, pero por lo general es preferible emplear nulo para
conectar campos, ya que eso permite el acceso a todos los datos, independientemente de
si tienen conexin o no con el campo conector.

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

el directorio Datasources. Llame a esta tabla lgica Access01.


4. Luego aada la sentencia SECTION APPLICATION.
5. A continuacin, cree una sentencia de carga para el archivo SalesInitials.txt,

que se encuentra en el directorio Datasources. Es una buena prctica utilizar la


funcin upper contra el campo de conexin (SP), pues el valor debe ir en
maysculas para corresponderse con el valor de la SECCIN DE ACCESO. Las
nuevas sentencias deberan parecerse a lo siguiente:
Section Access;
Access01:
Load
[USERID],
[ACCESS],
SP /* Connecting field for data reduction */
FROM Datasources\SalesSecurity.txt
(ansi, txt, delimiter is '\t', embedded labels);
Section Application;
Access_Application:
Load
upper(SP) as SP,

/* Connecting field for data


reduction */

[SalesPerson]
FROM Datasources\SalesInitials.txt
(ansi, txt, delimiter is '\t', embedded labels);

101

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW


6. Guarde y Recargue el documento.
7. Vaya al men Configuracin y a Propiedades de Documento.
8. Seleccione la pestaa de apertura y marque Reduccin Inicial de Datos basada en
la Seccin de Acceso. Asegrese de deseleccionar Exclusin Estricta. As mismo,
marque Carga Binaria no permitida.
9. Contine en la pestaa de Seguridad y asegrese de que un usuario no pueda

Editar o Ejecutar el script. Tampoco debera permitirse Guardar (deseleccione


Editar Script, Ejecutar, Recarga Parcial, Guardar Documento y Permitir Recarga de
Usuario).
10. Guarde de nuevo y abandone el documento.
11. Abra el documento de nuevo y entre registrndose con el nombre de Leif

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

James. Podr ver todos los datos de nuevo.

QlikView Developer II | 10 SEGURIDAD EN QLIKVIEW

103

QlikView Developer II | 11 CONECTIVIDAD AVANZADA DE BASES DE DATOS

11 CONECTIVIDAD AVANZADA DE BASES DE DATOS


Objetivos

Explorar la pestaa de Datos Personalizados de QlikView


Comprender la secuencia para conectar con las fuentes de datos
personalizadas
Analizar las sentencias CONNECT y SELECT y familiarizarse con los
dilogos que genera la sintaxis del script de carga de QlikView

Hasta ahora nos hemos centrado en cargar los datos empleando las diferentes opciones de
la pgina de Datos del editor de script.

Figura 1. La pgina Datos en el Editor de Script de QlikView

Los datos tambin se pueden cargar de una fuente de datos personalizados.

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.

QlikView Developer II | 11 CONECTIVIDAD AVANZADA DE BASES DE DATOS

Figura 2. La pgina Datos Personalizados en el Editor de Script de QlikView

Los botones Connect y Select sirven para lo siguiente, respectivamente:


Connect: Abre un cuadro de dilogo del mismo nombre para conectarse a la fuente de

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

la fuente de datos personalizados para incluirlos en el script de carga.


El script se genera basndose en las selecciones efectuadas.

Figura 3. Script de muestra

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

QlikView Developer II | 11 CONECTIVIDAD AVANZADA DE BASES DE DATOS

Figura 4. Script de carga inicial (en Configuraciones Generales)

QlikView Developer II | 11 CONECTIVIDAD AVANZADA DE BASES DE DATOS

107

QlikView Developer II | 12 TALLER DE TRABAJO

12 TALLER DE TRABAJO
Objetivos

Construir una aplicacin de anlisis QlikView que funcione, basada en los


requisitos
Revisarla con el instructor y los compaeros del curso

El Taller de Trabajo se ha diseado para darle la oportunidad de aplicar la experiencia y


los conocimientos adquiridos en este curso de formacin y poder construir una aplicacin
QlikView completamente funcional, basada en un conjunto de requisitos y datos
suministrados por el instructor del curso.
Aunque no se trata de un examen formal, esta actividad deber ser realizada
exclusivamente por usted. Si necesita ayuda no dude en solicitarla, tanto del instructor
como de sus compaeros de curso.
Encontrar los requisitos de alto nivel para esta aplicacin QlikView en el epgrafe
inmediatamente inferior. Ms adelante hay una lista detallada de los datos fuente y las
definiciones de campos. Como en cualquier caso de la vida real, se encontrar con
problemas en los datos y le requerirn el empleo de algunas de las soluciones presentadas
en este curso.
Finalmente, nos gustara recibir sus comentarios y sugerencias para mejorar tanto la
calidad de los materiales del curso, como este taller concreto de trabajo. Buena suerte!

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).

QlikView Developer II | 12 TALLER DE TRABAJO

109

QlikView Developer II | 12 TALLER DE TRABAJO

Requisitos
ACME ha sealado sus requisitos en el siguiente listado que se reproduce a
continuacin:

Haga lo siguiente: Construya una aplicacin QlikView


1. Quieren poder analizar sus cifras de ventas y hacer comparativas entre aos

anteriores y contra el presupuesto. Tambin estn interesados en un anlisis de


su margen de ventas.
2. Les gustara ver esto en muchas de sus dimensiones de negocio. Por ejemplo,

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.

Finalmente tambin estn interesados en un seguimiento a un nmero de


clientes durante un determinado perodo de tiempo, por ej. YTD (Ao hasta la
fecha) versus LY YTD (Ao hasta la fecha comparado con el ao anterior).

Haga lo siguiente: Crdito Extra


1. Les interesa analizar su rendimiento de entregas: cmo se estn produciendo

las entregas en comparacin con lo prometido.

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.

2. Describa cmo podran distribuir fcilmente esta informacin a los diferentes

grupos de usuarios, es decir, distintos grupos de usuarios desean analizar los


mismos datos pero desde distintas perspectivas.

QlikView Developer II | 12 TALLER DE TRABAJO

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

QlikView Developer II | 12 TALLER DE TRABAJO


BUDGET.QVD
Esta tabla contiene los datos presupuestarios.

CUSTOMERS.QVD
Esta tabla contiene informacin de clientes.

QlikView Developer II | 12 TALLER DE TRABAJO


CUSTOMERSADDRESS.QVD
Esta tabla contiene informacin de las direcciones de los 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

QlikView Developer II | 12 TALLER DE TRABAJO


SALESREP.QVD
Esta tabla contiene informacin sobre los agentes de Ventas.

QlikView Developer II | 12 TALLER DE TRABAJO

115

QlikView Developer II | 12 TALLER DE TRABAJO

Вам также может понравиться