Está en la página 1de 131

Desarrollo de Script

QV Enterprise

Noviembre 2005
QV Versin 7.0 Espaol

copyright 1996-2005 QlikTech International

PJB/2005-04-01

QlikView Enterprise Script

Copyright 1994-2005 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 la
licencia de software.
QlikView es una marca comercial registrada de QlikTech International AB. En los
Estados Unidos de Amrica y Canad, QlikView es una marca comercial registrada de
QlikTech, Inc.
Microsoft, MS-DOS, Windows, Windows NT, Windows 95, Windows 98, Windows ME,
Windows 2000, Windows XP, SQL Server, FoxPro, Excel, Access, ActiveX, el logotipo de
Internet Explorer y MS Query son marcas registradas de Microsoft Corporation.
IBM, AS/400 y PowerPC son marcas registradas de International Business Machines
Corporation.
Borland, Paradox y dBASE son marcas registradas de Borland International.
ORACLE y SQL*Net son marcas registradas de Oracle Corporation.
Apple, TimeType, Macintosh, PowerMacintosh y MacOS son marcas registradas de Apple
Computer, Inc.

Documento original en ingls: Abril 2005

copyright 1996-2005 QlikTech International

Page 2

QlikView Enterprise Script

Indice
1. INTRODUCCIN ......................................................................................................................... 6
1.1. ACERCA DE ESTE CURSO ........................................................................................................... 6
1.2. ARCHIVOS DE DATOS EMPLEADOS EN EL CURSO........................................................................ 7
1.3. INSTALACIN ............................................................................................................................ 7
1.4. GUARDAR ARCHIVOS ................................................................................................................ 7
1.5. FORMATO DE TEXTO DEL MATERIAL DE CURSO ......................................................................... 8
2. EL PLAN DE PROYECTO BI QLIK WHOLESALE TRADE (QWT)................................... 9
2.1. INTRODUCCIN AL PLAN DE PROYECTO..................................................................................... 9
2.2. PLAN DE PROYECTO: VISIN GENERAL ..................................................................................... 9
3. UNA BREVE INTRODUCCIN A LAS ESTRUCTURAS DE DATOS............................... 11
3.1. ACERCA DE LAS ESTRUCTURAS DE DATOS............................................................................... 11
3.2. BASES DE DATOS RELACIONALES ............................................................................................ 11
3.3. OTRAS ESTRUCTURAS DE DATOS ............................................................................................. 11
4. ESTRUCTURAS DE DATOS QLIKVIEW .............................................................................. 12
4.1. COMPARACIN ENTRE ESTRUCTURAS DE DATOS Y ESTRUCTURAS DE DATOS QLIKVIEW ........ 12
4.2. ESTRUCTURAS DE DATOS EN QLIKVIEW ................................................................................. 13
5. CARGAR DATOS EN QLIKVIEW .......................................................................................... 14
5.1. EDICIN DE SCRIPT ................................................................................................................. 14
Barra de Herramientas del Editor de Script ............................................................................ 15
Comandos de men del Editor de Script .................................................................................. 16
Panel de Herramientas del Editor de Script ............................................................................ 17
5.2. SINTAXIS ................................................................................................................................. 20
5.3. CONNECT ................................................................................................................................ 20
5.4. SELECT.................................................................................................................................... 22
5.5. LOAD ...................................................................................................................................... 23
5.6. RENOMBRAR UN CAMPO.......................................................................................................... 24
6. ARCHIVOS FUENTE................................................................................................................. 26
6.1. LA BASE DE DATOS DE LOS PEDIDOS ........................................................................................ 26
6.2. CREACIN DE UNA CONEXIN ODBC ..................................................................................... 27
7. CREACIN DEL SCRIPT......................................................................................................... 30
7.1. GENERACIN DE SCRIPT .......................................................................................................... 30
7.2. GENERACIN DE SCRIPT PASO A PASO .................................................................................. 30
7.3. SU PRIMER SCRIPT BSICO....................................................................................................... 36
7.4. EJECUCIN DEL SCRIPT ........................................................................................................... 38
8. ESTRUCTURA DE LOS DATOS CARGADOS ...................................................................... 39
8.1. CAMPOS DE SISTEMA ............................................................................................................... 39
8.1.1. La pestaa sistema ......................................................................................................... 39
8.1.2. Utilizacin de los campos de sistema ............................................................................. 40

copyright 1996-2005 QlikTech International

Page 3

QlikView Enterprise Script

8.2. EL VISOR DE TABLAS ............................................................................................................... 40


8.3. LA TABLA DE SISTEMA ............................................................................................................ 41
8.4. PROPIEDADES DE DOCUMENTO: LA PGINA TABLAS .............................................................. 43
9. AADIR DATOS DE TEXTO ................................................................................................... 44
9.1. EMPLEADOS ............................................................................................................................ 44
9.2. OFICINAS ................................................................................................................................ 44
9.3. PROVEEDORES ........................................................................................................................ 45
9.4. GENERACIN DE SCRIPT MEDIANTE EL ASISTENTE DE ARCHIVO .............................................. 45
9.5. REFERENCIAS CIRCULARES ..................................................................................................... 48
9.6. CAUSAS DE LAS REFERENCIAS CIRCULARES ............................................................................ 49
9.7. RENOMBRAR CAMPOS PARA EVITAR LAS REFERENCIAS CIRCULARES ...................................... 51
9.8. TABLAS PARCIALMENTE DESCONECTADAS ............................................................................. 52
10. EJERCICIOS............................................................................................................................. 54
11. CREACIN DE DATOS EN QLIKVIEW.............................................................................. 55
11.1. CARGA RESIDENTE ................................................................................................................ 55
11.2. TABLAS DE CLAVE SINTTICA ............................................................................................... 56
11.3. CMO ELIMINAR UNA TABLA DE CLAVE SINTTICA ............................................................... 57
11.4. AVANZADO CMO VALERSE DE ORDERS (PEDIDOS) PARA DETERMINAR SALES PERSON
(VENDEDOR).................................................................................................................................. 58
12. CMO CARGAR UN ARCHIVO DIF ................................................................................... 60
12.1. ARCHIVOS DE TEXTO EN FORMATO DE INTERCAMBIO DE DATOS .......................................... 60
13. CAMPOS CLAVE ..................................................................................................................... 63
13.1. UN EJEMPLO DE PROBLEMA QUE PUEDE SURGIR .................................................................... 63
13.2. EN QU ME AFECTA ESTO?................................................................................................... 63
13.3. CMO RESOLVER EL PROBLEMA DE LOS CAMPOS CLAVE....................................................... 64
13.4. EL GRFICO MUESTRA REALMENTE LO QUE DESEO MOSTRAR?............................................ 64
14. EJERCICIOS............................................................................................................................. 66
15. CAMPOS DE DIMENSIN DE TIEMPO ADICIONALES................................................. 67
15.1. TABLAS INLINE ..................................................................................................................... 67
15.2. AUTOGENERAR TABLAS ........................................................................................................ 68
15.3. TABLAS MAPPING O TABLAS DE CORRESPONDENCIAS .......................................................... 69
15.4. MES EN CURSO ACTUALIZADO .............................................................................................. 70
16. TABLA CRUZADA Y CARGA GENRICA......................................................................... 72
16.1. TABLA CRUZADA .................................................................................................................. 72
16.2. GENERIC LOAD (CARGA GENRICA)..................................................................................... 76
17. INCLUDE................................................................................................................................... 78
18. ARCHIVOS DE DATOS QLIKVIEW: ARCHIVOS QVD................................................... 80
18.1. EL FORMATO DE ARCHIVO QVD ........................................................................................... 80
18.2. PARA QU SIRVEN LOS ARCHIVOS QVD? ............................................................................ 80
18.3. CREACIN DE ARCHIVOS QVD ............................................................................................. 81

copyright 1996-2005 QlikTech International

Page 4

QlikView Enterprise Script

18.4. CREACIN MANUAL DESDE EL SCRIPT ................................................................................... 82


18.5. CREACIN AUTOMTICA DE UN ARCHIVO QVD EN EL SCRIPT .............................................. 84
18.6. FUNCIONES DE SCRIPT DE ARCHIVOS QVD ........................................................................... 85
19. EJERCICIOS............................................................................................................................. 87
20. SCRIPT AVANZADO 1 PARTE ......................................................................................... 88
20.1. UNIR DATOS PROCEDENTES DE MLTIPLES TABLAS .............................................................. 88
20.2. AGREGAR DATOS .................................................................................................................. 90
20.3. CMO CALCULAR LOS DATOS ENTRE REGISTROS .................................................................. 91
20.4. UTILIZACIN DE LAS VARIABLES EN EL SCRIPT ..................................................................... 92
21. EJERCICIOS............................................................................................................................. 95
22. SCRIPT AVANZADO 2 PARTE ......................................................................................... 97
22.1. CONCATENACIN .................................................................................................................. 97
Concatenacin automtica....................................................................................................... 97
Concatenacin forzada ............................................................................................................ 97
Impedir la concatenacin......................................................................................................... 98
Ejemplo .................................................................................................................................... 98
23. SEGURIDAD ........................................................................................................................... 101
23.1. CONTROL DE ACCESSO ........................................................................................................ 101
23.2. NIVELES DE ACCESO ........................................................................................................... 101
23.3. LA BASE DE DATOS DE CONTROL DE ACCESO ...................................................................... 101
23.4. RESTRICCIONES DE ACCESO HEREDADAS ............................................................................ 103
23.5. SECCIN DE ACCESO EN EL SCRIPT ...................................................................................... 103
Script Oculto .......................................................................................................................... 103
Adicin de la Seccin de Acceso ............................................................................................ 104
23.6. CONTROL DE ACCESO PARA CIERTOS COMANDOS................................................................ 106
23.7. MS CONTROL DE ACCESO .................................................................................................. 106
Otras consideraciones de lneas de comando desatendidas................................................... 108
23.8. RESTRICCIONES DE ACCESO EN VALORES DE CAMPO SELECCIONADOS ................................ 108
Sentencias de control de script............................................................................................... 109
Limitacin del valor de campo en la seccin de acceso......................................................... 111
24. EJERCICIOS........................................................................................................................... 114
25. DEPURACIN ........................................................................................................................ 115
25.1. EL ARCHIVO DE REGISTRO DE EJECUCIN DE SCRIPT ........................................................... 117
25.2. INFORMES DE ERRORES EN QLIKVIEW ................................................................................ 118
25.3. MATERIALES DE REFERENCIA QLIKVIEW............................................................................ 119
26. APNDICE 1: TIPOS DE DATOS EN QLIKVIEW ........................................................... 121
26.1. ALMACENAMIENTO DE DATOS EN QLIKVIEW...................................................................... 121
26.2. DATOS QUE CONTIENEN INFORMACIN SOBRE TIPOS DE DATOS .......................................... 121
26.3. DATOS SIN INFORMACIN SOBRE EL TIPO DE DATOS ........................................................... 122
26.4. FECHAS Y HORAS ................................................................................................................ 124
27. APNDICE 2: EL SCRIPT FINAL ....................................................................................... 126

copyright 1996-2005 QlikTech International

Page 5

QlikView Enterprise Script

1. Introduccin
1.1. Acerca de este curso
El presente curso se ha diseado con el propsito de introducir a los
desarrolladores de aplicaciones QlikView en las tcnicas fundamentales
de creacin y mantenimiento de scripts de carga QlikView, utilizando
QlikView Enterprise. En este curso se aprende a integrar datos
procedentes de muy diversas fuentes en un documento QlikView, a fin
de poder presentar la informacin de una manera completa y fcil de
comprender por cualquier persona de la organizacin.
Este curso da respuesta a las siguientes preguntas:

Cmo interpretar un plan de proyecto reflejado en un documento


QlikView?
Cmo acceder a las fuentes de datos e integrarlos con otros datos
empleando QlikView?
Cules son las tcnicas de desarrollo de estructuras de datos en
QlikView?
Qu herramientas hay disponibles para ver la estructura de datos en
un documento QlikView?
Por qu y de qu manera creo datos a travs del script de carga de
QlikView?
Qu tipo de estndares debera emplear para hacer mi aplicacin
QlikView eficaz, fcil de comprender y mantener?
Cmo hago para que mi aplicacin QlikView sea segura?
Qu hacer cuando me surjan dudas?
Qu hacer cuando surge un problema?

El material del curso se ha diseado siguiendo un enfoque modular. Su


instructor puede preferir dar el material de una forma ms personalizada
para acercarse as a las necesidades particulares de cada alumno. En
otras palabras, su formacin especfica puede hacer ver la necesidad de
incluir otros temas, o eliminar parte de los que aqu se incluyen.
Al igual que sucede con cualquier otro producto, para convertirse en un
desarrollador avanzado, necesitar trabajar con casos reales. Este curso
trata de emular un escenario corporativo real trabajando con un enfoque
de diseo de proyectos factibles, que posibilite al alumno el acceso a
una experiencia de tipo prctico, en la creacin de un documento
QlikView a partir de la descripcin de los requisitos de un proyecto que
se propone a modo de muestra. Puede que tambin le sea de utilidad
volver sobre este material en un futuro. El material del curso est
diseado de tal forma que se pueda utilizar con o sin la presencia de un
instructor.

copyright 1996-2005 QlikTech International

Page 6

QlikView Enterprise Script

1.2. Archivos de datos empleados en el curso


El material del curso incluye los archivos de datos necesarios para crear
los documentos que utilizar durante el curso. Aqu tiene una breve
descripcin de los archivo de datos que se incluyen y cmo se instalan.
QWT
EmpOff
Employees_New
Suppliers
Email
Budget
SalesSecurity
SalesInitials
Access02

- Base de datos en Access


- Archivo Excel
- Archivo Excel
- Archivo DIF
- Archivo de texto
- Archivo Excel
- Archivo de texto
- Archivo de texto
- Archivo de texto

1.3. Instalacin
Hallar estos archivos en el CD del curso, o por otros medios que su
instructor le facilite. Cuando ejecute el programa de instalacin, los
archivos se instalarn en el directorio: C:\QlikView\ QlikView
Training\ QVCourse_EnterpriseScript a menos que especifique un
directorio distinto.
Tras la instalacin, encontrar un documento con el nombre
QVE_Script_Course_Solution.qvw en la carpeta
QVCourse_EnterpriseScript. Este documento contiene las soluciones
a los ejercicios que se le irn planteando durante el curso.

1.4. Guardar archivos


Cuando cree un documento de su propiedad durante el curso, podr
guardarlo en la carpeta QVCourse_EnterpriseScript.
Cualquier archivo nuevo de datos que cree durante el curso puede
guardarse en la carpeta QVCourse_EnterpriseScript
\Files\Datasources donde tambin encontrar otras fuentes de datos en
las que se basa el documento final.

copyright 1996-2005 QlikTech International

Page 7

QlikView Enterprise Script

1.5. Formato de texto del material de curso


Los extractos de script se representan con el siguiente estilo y tamao
de letra:
SQL SELECT
CustomerID,

Las palabras clave en el script se escriben del siguiente modo:


Load

Los comandos, mens y botones se representan as:


Editor de Script
Los nombres de hojas, cuadros de lista, campos y expresiones, etc. se
representan con el siguiente estilo y tamao de letra:
Salesperson
Los nombres de archivo aparecen del siguiente modo:
QVCourse_EntScr.qvw

copyright 1996-2005 QlikTech International

Page 8

QlikView Enterprise Script

2. El plan de proyecto BI Qlik Wholesale


Trade (QWT)
2.1. Introduccin al plan de proyecto
El plan de proyecto de Inteligencia de Negocio (o Business Intelligence,
BI) QWT ha sido incluido en el presente curso a modo de ejemplo de un
plan de proyecto que podra recibir en su entorno de trabajo. No se trata
de un plan completamente configurado, con sus cuadros de
planificacin del tiempo y asignacin de responsabilidades, etc. Est
ms bien diseado para proporcionarle un objetivo general que cumplir
durante el curso. Utilizaremos este plan de proyecto como una gua para
desarrollar el script de carga necesario para la creacin del documento
QlikView. Haremos referencia constante al documento del plan de
proyecto durante el curso, as que puede que desee mantenerlo abierto
en su PC para un acceso ms rpido al mismo.
Encontrar el plan de proyecto, entre los materiales del curso, con el
siguiente nombre: QWT BI Project Plan.doc.

2.2. Plan de Proyecto: Visin general


Si abre el documento con el plan de proyecto BI QWT, ver que
contiene las siguientes secciones:
Mediciones clave: aqu hallar algunas de las expresiones que
se utilizarn en el documento QlikView. Algunos de estos
clculos se emplearn en el script de carga, mientras que otros
se utilizarn en los objetos de hoja (grficos, cuadros de texto,
etc.) incluidos en el diseo de la interfaz de usuario
Indicadores Clave de Rendimiento (ICRs): esta seccin
contiene los indicadores de rendimiento de alto nivel que
pueden presentarse desde una perspectiva de cuadro de mando
en el documento QlikView.
Dimensiones clave: esta seccin incluye una lista con las
dimensiones clave que se emplearn a lo largo de la aplicacin.
Tendencias: proporciona un listado de los campos de dimensin
de tiempo ms relevantes, que se irn solicitando para anlisis
de histricos.
Filtros clave de seleccin: incluye una lista de los campos
requeridos en el documento QlikView para seleccin y filtrado
de los datos.
Seguridad: contiene los requisitos de seguridad de acceso del
documento QlikView.

copyright 1996-2005 QlikTech International

Page 9

QlikView Enterprise Script

Descripciones de los datos de origen: suministra la ubicacin y


las descripciones a nivel de campo para cada una de las fuentes
de datos.
Cada una de estas secciones puede incluir una o ms Reglas de Negocio
para ayudar al desarrollador a comprender y crear la funcionalidad ms
adecuada y las caractersticas ms tiles para el usuario de este
documento QlikView.

copyright 1996-2005 QlikTech International

Page 10

QlikView Enterprise Script

3. Una breve introduccin a las


estructuras de datos
3.1. Acerca de las estructuras de datos
Para facilitarle las cosas, si no ha trabajado anteriormente gran cosa con
bases de datos, le ofrecemos una breve introduccin a los conceptos
bsicos en cuanto a estructuras y bases de datos. Esta introduccin le
ayudar a crear documentos QlikView basados en sus propios datos. Si
ya est familiarizado con este tipo de trminos puede saltarse este
captulo.

3.2. Bases de datos relacionales


Los datos a menudo se guardan en bases de datos relacionales. Bases de
datos relacionales son, por ejemplo, Microsoft SQL Server, Microsoft
Access, Oracle, DB2, Sybase, Informix, y Teradata.
Una base de datos relacional se fundamenta en una serie de reglas. Una
de tales reglas consiste en representar la informacin de la base de datos
mediante valores contenidos en tablas, los cuales a su vez constituyen la
base de datos. Otra regla supone que la base de datos debe ser capaz de
manejar al menos un lenguaje estructurado. Un ejemplo de lenguaje
estructurado lo encontramos en el Structured Query Language (SQL),
que se emplea para definir y manipular los datos.

3.3. Otras estructuras de datos


Otro formato muy comn de fuentes de datos para QlikView es el
constituido por los archivos de texto delimitados por caracteres. Los
archivos de texto han de tener una estructura especfica para que
QlikView sea capaz de interpretarlos correctamente, sin una
manipulacin adicional del script de carga. La primera lnea de este tipo
de archivos de texto suele ser, aunque no siempre, un nombre de
archivo o etiqueta. Las lneas subsuguientes contienen datos que
pertenecen a los diversos campos. Los campos en el archivo estn
delimitados, o separados, por caracteres, normalmente comas,
tabuladores, o un punto y coma. Un archivo de texto estndar, por lo
tanto, equivale a una tabla completa, con filas y columnas.

copyright 1996-2005 QlikTech International

Page 11

QlikView Enterprise Script

4. Estructuras de datos QlikView


4.1. Comparacin entre estructuras de datos y
estructuras de datos QlikView

Figura 1. Estructura de tabla

En este ejemplo observamos una estructura de datos tomada de la base


de datos de Access con la que estaremos trabajando durante el curso. La
figura muestra seis tablas que tienen definidas unas relaciones o lo
que es lo mismo, estn asociadas mediante campos (clave) comunes.
Descubriremos a lo largo del curso que, a diferencia de las bases de
datos convencionales, QlikView no permite la definicin explcita de
relaciones entre tabla. QlikView define de forma automtica relaciones
de tabla o asociaciones mediante campos denominados de manera
similar. En este ejemplo, los campos clave se han denominado todos de
idntica manera en sus respectivas tablas. Por supuesto, esto no es as
siempre en una base de datos, as que explicaremos durante el curso
cmo crear las asociaciones apropiadas entre tablas en QlikView.
Aprenderemos tambin cmo evitar asociaciones indebidas entre tablas
en QlikView basndonos en campos con nombres similares. Se ver
tambin as mismo cmo asociar otros datos, que no tienen por qu
estar necesariamente en un formato de base de datos (por ejemplo
archivos de texto).

copyright 1996-2005 QlikTech International

Page 12

QlikView Enterprise Script

El campo CustomerID enlaza las tablas Customers y Orders. Si sigue


las flechas podr ver qu campos enlazan la estructura total. Si dos
registros de tablas diferentes tienen el mismo valor en alguno de los
campos comunes, quedarn asociadas. La asociacin en QlikView es
esencialmente la misma que en outer join de SQL.

4.2. Estructuras de datos en QlikView


Cada columna de una tabla de datos, que es cargada en QlikView, se
convierte en un campo de la base de datos asociativa de QlikView
(tambin conocida como base de datos AQL). Los campos que aparecen
en ms de una tabla y que tienen idnticas etiquetas quedarn asociados.
Cada campo puede presentarse en forma de cuadro de lista en el
documento QlikView. Ciertos campos no se muestran; su nica funcin
es enlazar diferentes tablas. Cuando hace una seleccin en un cuadro de
lista, QlikView busca las conexiones lgicas por toda la base de datos
asociativa. Como resultado de dicha bsqueda se identifican los valores
asociados a sus selecciones.

copyright 1996-2005 QlikTech International

Page 13

QlikView Enterprise Script

5. Cargar datos en QlikView


Para poder cargar datos en QlikView, es necesario crear instrucciones
para el manejo y recuperacin de la informacin. Estas instrucciones es
lo que compone y se conoce como el script de carga.
El script puede detallar instrucciones sobre la forma en que QlikView
debe interpretar los diferentes conjuntos de datos. QlikView puede
cargar e interpretar los siguientes tipos de datos de entrada:
Cualquier tipo de archivo de texto separado por caracteres, por
ejemplo archivos separados por comas.
El resultado de una consulta a una base de datos, realizada por SQL
mediante conexin OLE DB/ODBC.
Archivos QlikView creados con anterioridad (archivos binarios).
Archivos de datos QlikView (archivos qvd).
Archivos Excel en cdigo BIFF estndar.
Archivos de formato fijo.
Archivos dif (formato de exportacin comn desde AS/400).
Tablas HTML.
Tablas XML.

5.1. Edicin de Script


Ahora examinaremos el dilogo Editor de Script, que puede utilizarse
para generar, introducir y editar sentencias de script de carga QlikView.
1. Comience por crear un nuevo documento seleccionando el comando
Nuevo del men Archivo o empleando la barra de herramientas.
2. Elija Editor de Script en el men o en la barra de herramientas.
El dilogo que tiene ms abajo le aparecer en pantalla. Como podr
observar, hay numerosos comandos en forma de comandos de men,
botones de la barra de herramientas y botones de dilogo. Aunque la
ventana de edicin ocupa la mayor parte del cuadro de dilogo.
CONSEJO: Para una descripcin completa de todos los dilogos y
opciones de configuracin actualmente disponibles en el Editor de
Script, por favor acuda al documento ReferenceManual.pdf. Este
documento de referencia se instalar sin problema durante la fase de
instalacin habitual de QlikView.

copyright 1996-2005 QlikTech International

Page 14

QlikView Enterprise Script

Figura 2. Cuadro de dilogo Editor de Script

Barra de Herramientas del Editor de Script


La barra de herramientas contiene los siguientes controles:
Ejecutar Script
Ejecuta el script, cierra el dilogo Editor de Script y abre la
pgina Propiedades de Hoja: Campos.
Depurar
Inicia la ejecucin de script en el Depurador. El depurador
busca errores en el script. Cada sentencia de script puede ser
monitorizada y los valores de las variables examinados a la
vez que se ejecuta el script.
Guardar todo el Documento
Guarda el documento activo en un archivo. Los datos, el
script y el formato de diseo son guardados.
Imprimir Pestaa
Le permite imprimir los contenidos de la pestaa actualmente
activa.
Cortar
Corta el texto de script seleccionado y lo almacena en el
Portapapeles.

copyright 1996-2005 QlikTech International

Page 15

QlikView Enterprise Script

Copiar
Copia el texto de script seleccionado.
Pegar
Pega el texto de script almacenado en el Portapapeles.
Buscar
Busca en el script la cadena de texto especificada en la
pestaa actual nicamente.
Aadir nueva pestaa
Aade una nueva pestaa en el script. El script es ejecutado
pestaa a pestaa, de izquierda a derecha.
Visor de Tablas
Muestra el visor grfico de tablas de los datos actuales.
Tambin hay disponibles muchos comandos de utilidad en los cinco
mens superiores:

Comandos de men del Editor de Script


El men ARCHIVO contiene una opcin para guardar el documento sin
tener que cerrar el Editor de Script. Aqu hallar tambin la opcin para
exportar el script como un archivo de script especfico (extensin de
archivo .qvs) o como una copia impresa.
El men EDITAR tiene todos los comandos necesarios para editar los
contenidos del panel de edicin de texto. Adems de los comandos
hbaituales de seleccin, copiado, corte e insercin de texto, hallar las
funciones Insertar Archivo que se emplea para insertar un archivo de
script, as como Buscar/Reemplazar que le permite buscar cadenas de
texto especficas.
Muchas de estas opciones se pueden ejecutar mediante combinaciones
de teclas (teclas de mtodo abreviado), por ej. si pulsa Ctrl+A se
seleccionar todo el texto.
El men PESTAA contiene los comandos necesarios para hacer posible
la gestin de las pestaas en el script.
El men CONFIGURACIN incluye el comando Configurar, que abre el
dilogo Preferencias de Usuario: Editor donde puede fijar el tipo de letra
y el color de letra de los diversos tipos de texto del script.

copyright 1996-2005 QlikTech International

Page 16

QlikView Enterprise Script

Los comandos del men AYUDA abren los archivos de la ayuda de


QlikView. (Para ms informacin sobre el cuadro de dilogo Editor de
Script, puede acudir a la Ayuda en este mismo momento.)
El grfico Statements (Sentencias)
muestra un cuadro para cada sentencia de
la pestaa de script activa. El cuadro
seala las caractersticas ms importantes
y proporciona una manera ms sencilla
de navegacin por el script.

Panel de Herramientas del Editor de Script


El Panel de Herramientas tiene tres pestaas-pgina con funciones para
generacin de script: Datos, Funciones y Configuraciones.
La pgina Datos

La pgina Datos contiene los comandos bsicos para la carga de datos


en QlikView.
Los comandos del grupo Base de Datos se utilizan para crear una
conexin y seleccionar campos de una fuente de datos. Si est
utilizando una DBMS comercial, puede emplear ODBC o OLE DB
como interfaz entre QlikView y la base de datos.
OLE DB: Marque esta alternativa para acceder a las bases de datos
mediante OLE DB.
ODBC Marque esta alternativa si desea acceder a las bases de datos
mediante ODBC.
Use el botn Conectar para abrir el dilogo Propiedades de Enlace de
Datos, seleccionar una fuente de datos OLE DB o ODBC y generar la
sentencia de enlace adecuada en el script de carga.
Use el botn Seleccionar para abrir el dilogo Crear Sentencia
Select para especificar campos y tablas desde la fuente de datos
escogida y generar la sentencia select adecuada en el script de carga.

copyright 1996-2005 QlikTech International

Page 17

QlikView Enterprise Script

Las opciones del grupo Datos desde Archivos se emplean para generar
las sentencias de script de Carga necesarias para leer los datos desde los
archivos.
Marque la casilla de verificacin Rutas Relativas para emplear rutas
relativas en lugar de rutas abolutas para sentencias generadas en el
script.
Marque la casilla de verificacin FTP para disponer de un dilogo que le
permita seleccionar archivos desde un servidor ftp cuando elija Ficheros
Planos, Archivos QlikView, o Incluir sentencias de script.
Marque la casilla de verificacin Asistente para hacer uso del asistente
de archivos de tabla cuando haga clic en Abrir del cuadro de dilogo
Abrir Archivos Locales.
Pulse el botn Ficheros Planos para abrir el dilogo Abrir Archivos
Locales con un listado de los diversos formatos de archivo de texto,
incluidos datos de Excel y datos QlikView (archivos .qvd). Si
selecciona uno o varios archivos y pulsa Aceptar generar una o ms
sentencias de carga basndose en las opciones seleccionadas en el
asistente.
Haga clic en el botn Archivo QlikView para abrir el cuadro de dilogo
Abrir Archivo QlikView con una lista de los archivos QlikView (*.qvw).
Si selecciona un archivo y pulsa Aceptar generar una sentencia binaria.
Slo se permite una sentencia binaria en un script de carga QlikView, y
sta debe ser la primera sentencia del script de carga.
Haga clic en el botn Archivos Web para abrir el cuadro de dilogo
Asistente para Tablas: Fuente e introducir una URL como fuente de su
tabla de datos.
Los comandos del grupo Datos Inline se utilizan para generar las
sentencias de script que generarn datos inline en el script.
Haga clic en el botn Asistente Inline para abrir el dilogo Asistente
para Datos Inline que le ayudar en la creacin de una sentencia Cargar
Inline empleando un contrl del tipo de hoja de clculo.
Haga clic en el botn Acceso de Usuario para abrir el dilogo
Asistente de Tablas Restriccin de Acceso que le ayudar en la creacin
de una sentencia especial Cargar Inline para emplearla en una seccin de
acceso (seguridad).
La pgina Funciones

copyright 1996-2005 QlikTech International

Page 18

QlikView Enterprise Script

La pgina Funciones se puede utilizar como ayuda para generar


funciones QlikView que se emplearn en las sentencias de script.
El cuadro desplegable Categora de Funcin contiene un listado con las
categoras de funciones. Seleccione una categora de la lista para ver las
correspondientes funciones en la lista Nombre de Funcin que
encontrar un poco ms abajo.
El desplegable Nombre de Funcin lista las funciones de script estndar
en QlikView. Esta lista se puede filtrar (o limitar) seleccionando
previamente una categora de la lista Categora de Funcin.
Haga clic en el botn Pegar una vez que haya seleccionado el nombre
de funcin que necesite. La funcin se introducir en el script, en la
posicin actual del cursor.
Pgina Configuracin

La pgina Configuracin se puede utilizar para seleccionar ciertos


privilegios y opciones en el script de carga.
Utilice el grupo Privilegios de Script para fijar el comando ejecutar y el
calificador en modo de escritura en sentencias select. Si su script
contiene estos elementos y no ha activadoo estos parmetros, las
respectivas sentencias fallarn. Tras haber habilitado el uso de una o de
ambas funciones, al usuario se le pedir que apruebe el script la primera
vez que ste se ejecuta en un ordenador. Dicha comprobacin se puede
ignorar mediante la conmutacin de la lnea de comando /nosecurity o
mediante una opcin de la pgina Seguridad en Preferencias de Usuario.
Utilice el grupo Configuracin para habilitar o deshabilitar el parmetro
Encriptar Credenciales de Conexin de Usuario y controlar as si el
nombre de usuario de la base de datos y la contrasea estn cifrados en
sentencias connect.

Consejo: No es necesario que las sentencias de script de carga se


creen y almacenen en el documento QlikView, pero debe haber una
referencia a las mismas si se almacenan en un archivo externo. Esto se
realiza con la funcin Incluir disponible en el editor de script.

copyright 1996-2005 QlikTech International

Page 19

QlikView Enterprise Script

5.2. Sintaxis
En esta seccin, analizaremos las sentencias de script ms comunes
(connect, select, load) para identificar y cargar datos en QlikView.
Cada una de ellas puede generarse mediante el uso de asistentes.
Practicaremos esto en las prximas secciones, pero antes vamos a
considerar diversos ejemplos de tales sentencias, cmo y dnde pueden
utilizarse en un script de carga QlikView.
Tambin analizaremos algunas de las opciones disponibles para
renombrar un campo, que es un tema de gran importancia cuando
trabajamos con QlikView. Para detalles ms completos y actualizados
acerca de la sintaxis de sentencias de script, siempre le remitiremos a
los Manuales de Referencia de QlikView, o al subsistema de Ayuda.
Todas las sentencias de script del presente curso se describen con
detalle en el Libro I del Manual de Referencia de QlikView 7.

5.3. Connect
La sentencia connect se emplea para establecer una conexin con una
base de datos mediante una interfaz ODBC o OLE DB. Una vez
establecida dicha conexin, sta se utiliza entre tanto no se defina una
nueva sentencia connect. Se pueden definir mltiples sentencias
connect en un mismo script de carga QlikView, pero slo puede haber
una conexin abierta a la vez.
Si la sentencia connect es generada por el asistente suministrado,
cualquier ID de usuario y contrasea se encriptarn con sintaxis
xuserid is / xpassword is, siempre y cuando se haya seleccionado
Encriptar Credenciales de Conexin de Usuario en la pgina General del
dilogo Preferencias de Usuario. Si introduce la sentencia connect
manualmente, deber utilizar la sintaxis no encriptada userid is /
password is para proporcionar ID de usuario y contrasea. La
encriptacin total slo es posible actualmente para sentencias ODBC
connect. Algunas partes de la cadena OLEDB connect no pueden
encriptarse.
El delimitador codepage is se puede emplear si experimenta
problemas con los caracteres nacionales en determinados drivers
ODBC/OLE DB.
Si en modo de escritura est especificado en access_info (info de
acceso) la conexin se abrir en modo de lectura-escritura. En todos los
dems casos la conexin se abrir en modo de lectura nicamente. El
uso de en modo de escritura debe hallarse habilitado en la seccin
Configuracin, del dilogo Editor de Script.
Si se sita ODBC antes de connect, se emplear la interfaz ODBC, si
no, utilizar OLE DB.

copyright 1996-2005 QlikTech International

Page 20

QlikView Enterprise Script

Ejemplos de connect:
ODBC connect to [SQLDATA;database=SQL1] (UserId is
sa, Password is admin);
ODBC CONNECT TO [MS Access
Database;DBQ=data\sampledata.mdb];
ODBC connect to
[COSQL01;DATABASE=SALESDATA;Trusted_Connection=Yes];

La fuente de datos especificada por esta sentencia es utilizada por todas


las sentencias select subsiguientes, hasta que se encuentren con una
nueva sentencia connect.

copyright 1996-2005 QlikTech International

Page 21

QlikView Enterprise Script

5.4. Select
La sentencia SQL select se utiliza para identificar campos y tablas que
han de cargarse desde la conexin actual a la base de datos. Se puede
utilizar cualquier sentencia select que sea vlida, pero tenga en cuenta
que los drivers ODBC pueden imponer ciertas limitaciones de sintaxis a
una conexin de base de datos en particular. Asimismo, las sentencias
select no pueden hacer uso de la funcionalidad QlikView dentro de la
sentencia.
Los nombres de campo y de tabla deben ir delimitados por comillas o
corchetes si contienen espacios o caracteres especiales. Cuando
QlikView genere automticamente el script, el signo de entrecomillado
empleado es el preferido por el driver ODBC especificado en la
definicin de fuente de datos de la sentencia connect.
Adems, se pueden concatenar varias sentencias select en una,
mediante el empleo de un operador union:
sentenciaselect union sentenciaselect
La sentencia select es interpretada por el driver ODBC, as que se
pueden producir desviaciones de la seintaxis SQL general, dependiendo
de las capacidades de los drivers ODBC. Por ejemplo:
as en ciertas ocasiones no se acepta, por ej. aliasname debe ir
inmediatamente tras fieldname.
as es a veces de uso obligatorio, cuando se emplee un aliasname.
distinct, as, where, group by, order by, o union no reciben
soporte en algunas ocasiones.
El driver ODBC a veces no acepta ciertos tipos de comillas.
Ejemplos de select:
SQL SELECT * FROM FACILITIES;
SQL SELECT DISTINCT
I.AddressID,
Name,
Address,
PostalCode
FROM
[Invoice] I,
[Address] A
WHERE
I.InvoiceType is not null
and I.InvoiceDate >= '2001-01-01'
and I.AddressID = A.AddressID;

copyright 1996-2005 QlikTech International

Page 22

QlikView Enterprise Script

5.5. Load
La sentencia Load puede cargar datos segn diversos mtodos:
Cargar directamente desde un archivo de texto, Excel, qvd, xml, etc.
Cargar desde otra sentencia select o load subsiguiente. Dicha
sentencia select o load debe ir inmediatamente a continuacin de
esta sentencia load.
Cargar desde una tabla previamente cargada (residente)
Cargar directamente desde datos en el script de carga por medio de
una Carga Inline.
Cargar desde datos generados.
Todas las funciones de script de QlikView estn disponibles para su uso
en una sentencia load.
Los nombres de campo y de tabla deben ir delimitados por comillas o
corchetes cuando contengan espacios o caracteres especiales.
Ejemplos de load:
Load * from 'c:\userfiles\data2.txt' (ansi, txt,
delimiter is '\t', embedded labels);
Load A, B, if(C>0,'+','-') as X, weekday(D) as Y;
Select A,B,C,D from Table1;
Load
A, B, A*B+D as E
Resident tab1;
Load * Inline
[CatID, Category
0,Regular
1,Occasional
2,Permanent];
Load
RecNo() as A, rand() as B
Autogenerate(10000);

copyright 1996-2005 QlikTech International

Page 23

QlikView Enterprise Script

5.6. Renombrar un campo


Se pueden renombrar uno o ms campos en el script de carga. Tambin
es posible nombrar campos que no tengan nombre en la fuente de datos.
Existen diversas maneras de hacer esto en el script:
Renombrar empleando as en una sentencia load, lo cual implica que
otorgar un nuevo nombre a un campo especfico de esa sentencia
especfica. Si est utilizando el Asistente de Archivos de Tabla para
crear una sentencia load, puede hacer clic en cualquier nombre de
campo, en el rea de Etiqueta, e introducir un nuevo nombre. La
sentencia load generada incluir la sintaxis as automticamente.
Renombrar empleando alias, lo cual implica que dar nuevo nombre
a todas las ocurrencias de aquellos campos que tengan sus nombres
especificados en el script.
Renombrar uno o ms campos existentes empleando la sentencia
Rename Field. Esta sentencia puede utilizar, de modo opcional, una
tabla de mapeo (o indicacin de las correspondencias), que almacene
datos de conversin del nombre antiguo (oldname) al nuevo
(newname). Ms adelante en este mismo curso se analizan las tablas
de correspondencias (o mapeadas) con ms detalle.
Ejemplo de as:
Load
Capital as Capital city,
Cntry as Country,
Pop as Population
from Country.csv (ansi, txt

La sintaxis de una sentencia alias es:


Alias <fieldname> as <new fieldname>, <fieldname> as <new

fieldname>,
Ejemplo de alias:
Alias ProdId as ProductID, Mon as Month, Cname as
Customer;

La sintaxis de una sentencia rename field es:


rename field[s] (using mapname | oldname to newname {, oldname to

newname} )
donde
mapname es el nombre de una tabla con un mapa de correspondencias
cargada anteriormente, que contenga uno o ms pares de nombres de
campo, tanto antiguos como nuevos.

copyright 1996-2005 QlikTech International

Page 24

QlikView Enterprise Script

oldname es el nombre antiguo de campo y


newname es el nuevo nombre de campo.

Nota: Tanto rename field como rename fields son formas admitidas,
sin diferencia alguna en el efecto final que producen.
Ejemplo rename field :
Rename field XAZ0007 to Sales;
FieldMap:
Mapping select oldnames, newnames from datadict;
Rename fields using FieldMap;

copyright 1996-2005 QlikTech International

Page 25

QlikView Enterprise Script

6. Archivos fuente
En una primera parte del curso, cargaremos datos de tres fuentes
diferentes, de acuerdo al plan de proyecto inicial. Los datos principales
provendrn de una base de datos en Access, denominada QWT. Para
estos datos, aadiremos tablas desde hojas de clculo en Excel y desde
un archivo de texto en formato DIF, que se ha extraido de un sistema
AS/400.

Figura 3. Archivos fuente

Las fuentes de datos estn lgicamente conectadas entre s por campos


comunes (tambin denominados campos clave). En el caso de las tablas
que contienen informacin sobre empleados y pedidos de la empresa,
tenemos los campos comunes de EmployeeID y EmpID. No obstante,
hay que renombrar uno de los campos, para que QlikView pueda
asociar dichos campos en nuestra aplicacin. Tambin tenemos
SupplierID que es un campo comn en la base de datos QWT y la tabla
que contiene informacin sobre los proveedores (DIF). Tambin podr
observar que existen campos con nombres parecidos en las tablas y que
no queremos asociar. Estos campos habrn de ser remombrados
tambin, a fin de evitar un asociacin indeseada por parte de QlikView.

6.1. La base de datos de los pedidos


Segn nuestro plan de proyecto y como se puede observar en la figura
3, la base de datos QWT.mdb contiene las tablas Customers, Suppliers,
Products, Categories, Orders, y Order Details. Vamos a cargar cada

copyright 1996-2005 QlikTech International

Page 26

QlikView Enterprise Script

una de estas tablas, pero primero necesitamos crear una conexin


ODBC a la base de datos.

6.2. Creacin de una conexin ODBC


Para obtener acceso a la base de datos desde QlikView, es necesaria una
conexin ODBC a la fuente de datos. sta se crea a travs de Panel de
Control Herramientas Administrativas Fuentes de Datos
(ODBC) en Windows. A continuacin se detallan unos pantallazos para
guiarse por los diferentes pasos que habr de seguir.
Consejo: Tambin se puede definir una fuente de datos a travs del
dilogo Conectar en el Editor de Script de QlikView.
1. Ejecute el Pograma Administrador de ODBC mediante el Panel de
Control a fin de abrir el cuadro de dilogo ODBC Administrador de
Fuentes de Datos.

Figura 4. ODBC Administracin de las fuentes de datos

2. Determine si precisa definir una fuente de datos a nivel de Usuario


o a nivel de Sistema. Una fuente de datos de Usuario slo estar
disponible para el usuario actual de esta mquina. Una fuente de
datos de Sistema estar disponible para cualquier usuario de esta
mquina. Para nuestro curso en concreto, aadiremos una fuente de
datos de Sistema. Para ello, haga clic en la pestaa Sistema DSN del
cuadro de dilogo.

copyright 1996-2005 QlikTech International

Page 27

QlikView Enterprise Script

3. Aada una fuente de datos de sistema pulsando el botn Aadir...


A continuacin deber elegir un driver adecuado para acceder a la
fuente de datos. Puede contemplar diversos drivers en la figura que se
muestra a continuacin. Si est utilizando una base de datos comercial,
pero no tiene sus drivers instalados, los encontrar seguramente en los
discos de instalacin de la base de datos. Si los discos de instalacin no
se hallan disponibles o los drivers estn pasados de fecha, o no sirven
por cualquier otra razn, contacte con su proveedor habitual o bien
bsquelos por Internet.

Figura 5. Seleccin del driver

4. Seleccione Microsoft Access Driver (*.mdb) y pulse Finalizar.


5. Pulse Seleccionar.
6. Navegue hasta hallar la carpeta en la que se almacena la base de
datos QWT (FuentesdeDatos), y seleccione QWT.mdb. Pulse
Aceptar.

copyright 1996-2005 QlikTech International

Page 28

QlikView Enterprise Script

Figura 6. Seleccin de la fuente de datos

7. Introduzca un ttulo adecuado para su fuente de datos. Se


recomienda rellenar los campos Nombre de la Fuente de Datos y
Descripcin segn se detalla en la figura a continuacin. Tenga en
cuenta que la ubicacin de su base de datos puede encontrarse en
otra unidad.

Figura 7. Dar nombre a la base de datos

8. Pulse Aceptar para aceptar los cambios y cerrar el dilogo.


Ahora ya debera poder acceder a la fuente de datos sin problema desde
QlikView. Si por alguna razn la conexin a la fuente de datos se
rompiera, utilice el botn Repair (Reparar) del cuadro de dilogo que
contempla en la figura anterior a este prrafo para reestablecer la
conexin.

copyright 1996-2005 QlikTech International

Page 29

QlikView Enterprise Script

7. Creacin del script


El script que crearemos en este curso carga datos desde una base de
datos en Access. Se cargarn los campos de una serie de tablas
mediante sentencias select. La sintaxis empleada es SQL estndar.

7.1. Generacin de script


La ventaja de utilizar el editor de script de QlikView reside en que
muchas de las sentencias de script se generan de forma automtica
seleccionando los campos que se desea cargar en los asistentes de
archivo. A veces es necesario realizar algunos cambios manualmente,
por ej. a la hora de asignar nuevos nombres de campo. El editor de
script tambin puede sealar algunos errores obvios, mediante una
codificacin de color, por ej. unos parntesis no simtricos en una
funcin.

7.2. Generacin de script paso a paso


1. Inicie QlikView Enterprise, si es que no se encuentra ya activo.
2. Seleccione Nuevo en el men Archivo o en el correspondiente botn
de la barra de herramientas, para crear un documento nuevo.
3. Seleccione Propiedades de Documento en el men Configuracin y
abra la pestaa General del cuadro de dilogo. Asegrese de que
Generar Archivo log est activo. Esto generar un archivo de registro
de ejecucin de script cada vez que se ejecuta el script de carga.
Tambin puede habilitar la opcin Preferencias de Usuario en la
pestaa Diseo para que Utilizar Siempre Archivos de Log para
Nuevos Documentos de modo que esta opcin est siempre
disponible para usted de forma automtica en el futuro.
4. Seleccione Guardar en el men Archivo o pulse el botn
correspondiente de la barra de herramientas para guardar un
documento. Navegue hasta encontrar el directorio del curso y
guarde su archivo con un nombre apropiado en Archivos.
Consejo: Normalmente es recomendable guardar un documento
nuevo antes de editar el script, para que se puedan generar las rutas
relativas correctas. Esto normalmente es necesario para mejorar la
portabilidad del documento QlikView.

copyright 1996-2005 QlikTech International

Page 30

QlikView Enterprise Script

5. Seleccione Editor de Script en el men Archivo o en la barra de


herramientas.
Ahora ha creado un nuevo archivo de script y, como podr observar, ya
contiene algunas lneas de script. stas son las variables de formato, las
cuales son generadas automticamente por QlikView. Las variables se
basan en los parmetros de su sistema operativo en cuanto a fecha, hora,
etc.
6. Marque la casilla de verificacin Rutas Relativas, si es que no se
encuentra ya marcada. Esto generar rutas relativas para carga de
Datos desde Archivos desde la ubicacin guardada del documento
QlikView en nuestras sentencias de script. Esto no ser aplicable a
nuestra sentencia connect (ver abajo), pero ser til ms tarde,
cuando leamos archivos de texto.
7. Seleccione ODBC y haga clic en Conectar para abrir el cuadro de
dilogo Conectar a una Fuente de Datos.

Figura 8. Seleccionar la fuente de datos

8. Seleccione EnterpriseScript y pulse Aceptar. Debera ver ahora la


siguiente sentencia aadida a su script (con una ruta absoluta).
ODBC CONNECT TO
[EnterpriseScript;DBQ=Datasources\QWT.mdb];

La ruta generada en la sentencia connect es en realidad la ruta


absoluta. Sin embargo, es recomendable que cambie la ruta a una
relativa, como se muestra arriba. Le resultar mucho ms fcil mover
archivos de un PC a otro si emplea rutas relativas.

copyright 1996-2005 QlikTech International

Page 31

QlikView Enterprise Script

9. A continuacin aadiremos datos de la tabla Customers (Clientes).


Antes de generar la sentencia select, aadiremos un comentario para
documentar el script a medida que lo vamos creando.
QlikView admite tres tipos de comentarios diferentes:
REM precediendo a una sentencia, comenta dicha sentencia
hasta el final;
// este smbolo comenta todo el texto que le sigue en una nica
lnea.
/* */ comenta todo el texto que haya entre los delimitadores.
Consejo: Asegrese de no emplear el comentario // para una funcin
Include, dado que eso slo comentar la lnea inicial del archivo
Include.

Figura 9. Adicin de comentarios en el script de carga

Puede aadir libremente cualquier comentario que desee. La sugerencia


que se indica en la figura anterior emplea texto del documento del plan
de proyecto, es la descripcin de los datos de la tabla Customers. (Fue
necesario retocar un poco el formato para alinear las columnas de la
tabla Record Layout).

copyright 1996-2005 QlikTech International

Page 32

QlikView Enterprise Script

Figura 9. Seleccin de todos los campos de la tabla Customers

10. Pulse SELECT en el dilogo Editor de Script, y seleccione la tabla


Customers en Tablas de la Base de Datos.
11. Seleccione todos los campos de la tabla marcndolos con el ratn.
Tambin puede seleccionar * para marcar los archivos, pero en ese
caso los nombres de los campos no se registrarn en el script, lo
cual acarrear trabajo ms adelante. En el marco que hay bajo los
nombres de tabla y campos puede previsualizar el script que se
generar automticamente.
12. Pulse OK. Las tablas y campos seleccionados se incluirn ahora en
el script. La sentencia select habr de tener ms o menos el
siguiente aspecto:
Customers:
SQL SELECT
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
Fax,
Phone,
PostalCode,
StateProvince
FROM Customers;

13. Aada el nombre de tabla Customers: inmediatamente antes de


SQL SELECT a fin de otorgar el nombre adecuado a esta tabla

copyright 1996-2005 QlikTech International

Page 33

QlikView Enterprise Script

lgica en QlikView. QlikView utilizar por defecto el nombre de


tabla asignado como nombre de la tabla lgica, pero es conveniente
dar siempre nombre a sus cargas de tabla, para poder controlar
despus cmo referirse a ellas. QlikView pondr automticamente
en cursiva el nombre de tabla una vez que haya aadido los dos
puntos (:) tras el nombre.
14. Haga clic en el icono Guardar
del Editor de Script. Esto
guardar su documento QlikView completo, incluyendo el script de
carga.
15. A continuacin, repita este mismo procedimiento para cargar los
campos de las tablas Shippers, Products y Categories de la misma
manera descrita anteriormente. Cambie el nombre del campo
CompanyName por Shipper en la tabla Shipper para que los
exportadores (shippers) no se mezclen con nuestras empresas
cliente. Adems, no cargue el campo UnitPrice de la tabla Products,
ya que esos datos se extraern desde la tabla Order Details.
/* Shippers Table comments */
Shippers:
SQL SELECT
ShipperID,
CompanyName as Shipper
FROM Shippers;
/* Products Table comments */
Products:
SQL SELECT
CategoryID,
ProductID,
ProductName,
QuantityPerUnit,
SupplierID,
UnitCost,
UnitsInStock,
UnitsOnOrder
FROM Products;
/* Categories Table comments */
Categories:
SQL SELECT
CategoryID,
CategoryName,
Description
FROM Categories;

16. Pulse SELECT nuevamente y cargue la tabla Orders. Edite


manualmente el script para copiar el campo OrderDate tal como se
muestra ms adelante, para generar nuevos campos para ao, mes y
da. Cargaremos estos datos con una sentencia load precedente a fin
de utilizar las funciones de fecha de QlikView, incluyendo el

copyright 1996-2005 QlikTech International

Page 34

QlikView Enterprise Script

formateado de mes. (La diferencia est en que el mes se representa


como valor numrico cuando se emplea la sentencia select y como
una combinacin de texto y nmero con la sentencia load.)
Observe que las cadenas de texto que se utilizan para representar los
meses dependen de los parmetros regionales de su sistema
operativo (como se ve en las sentencias de script iniciales). Si sus
configuraciones estuvieran en ingls, los meses aparecern en
ingls.
Segn el plan de proyecto, en la seccin Trends, necesitaremos
finalmente ofrecer un anlisis de tiempos acerca del Mes, Trimestre y
Ao. El siguiente script proporcionar el Ao, el Mes y el Da del mes.
Ampliaremos informacin sobre esto mismo ms adelante, a fin de
aadir el Mes & Trimestre actualizado.
Tenga presente que la sentencia Load no tiene clusula From o
Resident, dado que la fuente es la siguiente sentencia que se indica a
continuacin SQL SELECT.
/* Orders Table comments */
Orders:
Load
CustomerID,
EmployeeID,
Freight,
OrderDate,
Year(OrderDate) as Year,
Month(OrderDate) as Month,
Day(OrderDate) as Day,
OrderID,
ShipperID;
SQL SELECT * FROM Orders;

17. Finalmente, cargaremos la tabla OrderDetails. Aqu crearemos un


nuevo campo NetSales que es la primera Medida Clave (Key
Measure) identificada en el plan de proyecto, en la seccin Medidas
Clave (Key Measures). NetSales es el resultado de un clculo
basado en UnitPrice*Quantity*(1-Discount). El script de carga es
como sigue:
/* Order Details Table comments */
Order_Details:
SQL SELECT
OrderID,
ProductID,
Quantity,
UnitPrice,
UnitPrice*Quantity*(1-Discount) as NetSales
FROM `Order Details`;

copyright 1996-2005 QlikTech International

Page 35

QlikView Enterprise Script

Consejo: No se permiten espacios en la etiqueta del nombre de la


tabla.
Asegrese de guardar su aplicacin, bien mediante el dilogo Editor de
Script, o en la interfaz de QlikView, mediante Archivo Guardar.

7.3. Su primer script bsico


Su script debiera tener ahora ms o menos el siguiente aspecto:
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='$#,##0.00;($#,##0.00)';
SET TimeFormat='h:mm:ss TT';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
SET
MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oc
t;Nov;Dec';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
ODBC CONNECT TO
[EnterpriseScript;DBQ=DATASOURCES\QWT.mdb];
/* Customers Table comments */
Customers:
SQL SELECT
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
Fax,
Phone,
PostalCode,
StateProvince
FROM Customers;
/* Shippers Table comments */
Shippers:
SQL SELECT
ShipperID,
CompanyName as Shipper
FROM Shippers;
/* Products Table comments */
Products:
SQL SELECT
CategoryID,
ProductID,
ProductName,

copyright 1996-2005 QlikTech International

Page 36

QlikView Enterprise Script

QuantityPerUnit,
SupplierID,
UnitCost,
UnitsInStock,
UnitsOnOrder
FROM Products;
/* Categories Table comments */
Categories:
SQL SELECT
CategoryID,
CategoryName,
Description
FROM Categories;
/* Orders Table comments */
Orders:
Load
CustomerID,
EmployeeID,
Freight,
OrderDate,
Year(OrderDate) as Year,
Month(OrderDate) as Month,
Day(OrderDate) as Day,
OrderID,
ShipperID;
SQL SELECT * FROM Orders;
/* Order Details Table comments */
Order_Details:
SQL SELECT
OrderID,
ProductID,
Quantity,
UnitPrice,
UnitPrice*Quantity*(1-Discount) as NetSales
FROM `Order Details`;

copyright 1996-2005 QlikTech International

Page 37

QlikView Enterprise Script

7.4. Ejecucin del script


Para eliminar un posible riesgo de prdida de su script, por una u otra
causa, es importante guardarlo con cierta frecuencia, y especialmente
antes de la ejecucin de un script de carga. A continuacin, haga clic en
el icono Ejecutar Script
de la barra de herramientas. El script se
ejecutar y los datos se cargarn en la aplicacin.
Seleccionar Campos en el men Diseo o Configuracin Propiedades
de Hoja Campos lista todos los campos cargados:

Figura 10. La pgina de dilogo Propiedades de Hoja: Campos

copyright 1996-2005 QlikTech International

Page 38

QlikView Enterprise Script

8. Estructura de los datos cargados


En este captulo se analizan los campos de sistema creados y
mantenidos por QlikView de manera automtica, y que se pueden
emplear para comprender la estructura interna de nuestro documento
QlikView. El captulo nos introduce as mismo en una serie de mtodos
para monitorizar y analizar la estructura de los datos QlikView. Estas
tcnicas y herramientas nos resultarn tiles a la hora de crear el script
de carga y la estructura del documento, y sern esenciales cuando
tratemos de verificar la integridad de un documento, o de depurar
errores.

8.1. Campos de sistema


Durante el proceso de carga, se generan seis campos especiales que
contienen informacin sobre la estructura de la base de datos asociativa
de QlikView, es decir, contienen meta-datos sobre la base de datos
AQL. stos son los que reciben el nombre de campos de sistema y a
continuacin veremos cmo se pueden utilizar al trabajar con
QlikView.
1.
2.
3.
4.
5.

$Field
$Table
$Rows
$Fields
$FieldsNo

6. $Info

Muestra los nombres de todos los campos cargados


Muestra los nombres de todas las tablas cargadas
Muestra el nmero de filas que hay en las tablas
Muestra el nmero de campos en las diversas tablas
Muestra las posiciones de los campos en las tablas
(nmero de columna)
Muestra los nombres de las tablas de informacin
cargadas

8.1.1. La pestaa sistema


Cuando est desarrollando un documento, una hoja de sistema le
resultar muy til, ya que le mostrar cmo se relacionan entre s las
tablas lgicas en el documento. Es una prctica muy conveniente la de
crear una hoja de sistema como primer paso tras haber cargado los
datos.
A continuacin crearemos una hoja de sistema:
de
1. Cree una nueva hoja, haciendo clic en el botn Aadir Hoja
la barra de herramientas Diseo o seleccionando Aadir Hoja en el
men Diseo.
2. Haga clic con el botn derecho en la hoja nueva, y seleccione
Propiedades. Introduzca el Ttulo de la hoja como Sistema en la
pestaa General.

copyright 1996-2005 QlikTech International

Page 39

QlikView Enterprise Script

3. En la pestaa Campos, marque la casilla de verificacin Mostrar


Campos de Sistema y seleccione a continuacin todos los campos
que contengan un signo dlar $ frente a ellos.
4. Pulse Aadir, a continuacin Aceptar.
Disponga los campos en la hoja y a continuacin seleccione
Propiedades, General, Mostrar Campos de Sistema para el cuadro de
lista $Field, a fin de poder ver cuntas veces aparecen los diversos
campos en las tablas de la base de datos asociativa. En la pestaa
Ordenar podr clasificarlos en orden descendente segn su frecuencia
de aparicin, de modo que los campos que aparezcan un mayor nmero
de veces se siten en la parte superior de la lista.
8.1.2. Utilizacin de los campos de sistema
Si selecciona CustomerID en $Field ver en qu tablas aparece el
campo, adems de otra informacin relativa a los campos de sistema.

Figura 112. Resultado de seleccionar CustomerID en el cuadro de lista $Field

8.2. El visor de tablas


Otra forma de mostrar la estructura lgica de las tablas disponibles en
un documento QlikView y las conexiones entre las mismas, consiste en
emplear el visor de tablas grfico integrado. La opcin Archivo Visor
de Tablas (o <Ctrl>-T) abre una ventana que muestra todas las tablas
cargadas y sus campos de conexin clave. Puede reorganizar sus
componentes haciendo clic y arrastrando, o seleccionando Auto-Diseo.
Asegrese de pulsar Aceptar cuando haya finalizado, para guardar su
diseo.

copyright 1996-2005 QlikTech International

Page 40

QlikView Enterprise Script

Figura 13. Una vista de tabla a modo de ejemplo

8.3. La tabla de sistema


En QlikView se pueden crear mltiples tablas de diversa ndole, que
contengan tipos de datos muy dispares, as pues, por qu no emplear la
misma tcnica para investigar las relaciones entre las tablas de nuestra
base de datos?
La tabla de sistema es una tabla pivotante que ilustra las relaciones y
conexiones que se dan entre tablas y campos de la base de datos
asociativa de QlikView.
Empezaremos por crear dicha tabla en nuestra hoja de sistema. Todo
desarrollador de sistemas debiera contar con una tabla de sistema.
Cuanto ms complicada sea la estructura de datos, mayor la necesidad y
el uso que se har de dicha tabla.
1. En su aplicacin QlikView, asegrese de que se halla en la hoja
Sistema.
2. Haga clic con el botn derecho en la hoja y seleccione nuevo objeto
de hoja, Tabla de Sistema. Se crear una Tabla Pivotante con las
dimensiones $Field y $Table. La expresin del grfico ser
Only($Field). Ambas dimensiones se ordenan segn el orden de
carga.

copyright 1996-2005 QlikTech International

Page 41

QlikView Enterprise Script

Figura 14. Una tabla de sistema

copyright 1996-2005 QlikTech International

Page 42

QlikView Enterprise Script

8.4. Propiedades de Documento: la pgina Tablas


Esta pgina de dilogo le ofrece otra forma ms de contemplar la
estructura de datos. Todas las tablas y campos incluidos en el
documento QlikView se listan aqu, junto con unas estadsticas de cada
entidad.
Haga clic en el botn Exportar Estructura para exportar diversos
archivos de texto delimitados por tabulador, que contienen dicha
informacin. Estos archivos pueden importarse de nuevo a QlikView
bien este mismo documento, u otro distinto para un anlisis adicional.

Figura 15. Propiedades de Documento: el dilogo Tablas

Volveremos a este cuadro de dilogo ms adelante, en un captulo


posterior, cuando analicemos las referencias circulares en la estructura
de datos y como se puede hacer un seguimiento de las mismas
empleando el dilogo Propiedades de Documento: Tablas. Ms
concretamente, analizaremos las casillas de verificacin Parcialmente
Desconectado para las Tablas, y sus posibilidades de utilizacin.

copyright 1996-2005 QlikTech International

Page 43

QlikView Enterprise Script

9. Aadir Datos de Texto


Segn nuestro plan de proyecto, hay tablas adicionales de datos que
cargar. Estas no se encuentran en formato de base de datos, as que
comenzaremos a utilizar el Asistente para Tablas a fin de crear las
sentencias de Carga de QlikView. Las fuentes esta vez sern dos hojas
de clculo Excel y un archivo DIF. Estos archivos contienen datos
acerca de los empleados, las oficinas y los proveedores. Comencemos
analizando las fuentes de datos.

9.1. Empleados
Tomamos los datos sobre los empleados del archivo Excel EmpOff.xls
y la hoja de clculo Employee (empleado) en la carpeta DataSources
(Fuentes de Datos). Primero abrimos el archivo Excel y echamos un
vistazo a su contenido.

Figura 16. La tabla Employee (Empleado)

La clave de esta tabla se halla en el campo EmpID, que conecta la tabla


con los dems datos que hemos cargado.

9.2. Oficinas
Los datos relativos a las oficinas de la compaa tambin se toman del
archivo Excel: EmpOff.xls pero de la hoja de clculo Office (Oficina),
que es la segunda hoja de clculo del archivo Excel EmpOff.xls.

Figura 17. La tabla Office (Oficina)

La clave de esta tabla es Office y los valores de este campo se asociarn


a los valores del campo Office de la tabla Employee.

copyright 1996-2005 QlikTech International

Page 44

QlikView Enterprise Script

9.3. Proveedores
Los datos sobre los proveedores se tomarn de un archivo DIF llamado
suppliers.dif (carpeta DataSources). Este formato es en cierto modo
diferente, como podr observar si echa un vistazo al archivo en un
editor de texto normal, por ejemplo en el Bloc de notas. El archivo DIF
tendr el siguiente aspecto:
TABLE
0,1
"EXCEL"
VECTORS
0,30
""
TUPLES
0,9
""
DATA
0,0
""
-1,0
BOT
1,0
"SupplierID"
1,0
"CompanyName"
1,0
"ContactName"
1,0
"Address"
1,0
"City"
1,0

En cambio, el mismo archivo, pero en Excel, resulta bastante ms


legible:

Figura 18. El archivo DIF Suppliers (Proveedores)

Cargaremos datos desde este archivo ms adelante, en otro captulo


posterior.

9.4. Generacin de script mediante el asistente de


archivo
Ahora continuamos con la generacin de nuestro script de carga,
aadiendo sentencias de Carga QlikView para los tres archivos que
acabamos de ver.

copyright 1996-2005 QlikTech International

Page 45

QlikView Enterprise Script

Para crear estas sentencias, emplearemos el Asistente para Tablas del


cuadro de dilogo Editor de Script.
1. Abra el dilogo Editor de Script desde el men, o la barra de
herramientas.
2. Asegrese de que la casilla de verificacin Rutas Relativas est
marcada.
3. Asegrese de que la casilla de verificacin Asistente est marcada y
a continuacin haga clic en el botn Ficheros Planos para abrir el
dilogo Abrir Archivos Locales.
4. Navegue hasta encontrar el archivo EmpOff.xls en la carpeta
DataSources y haga clic en Abrir.

Figura 19. El Asistente de Archivos

Compruebe que las configuraciones sugeridas por el asistente sean las


correctas. Debiera mostrarse lo siguiente:
Type: Excel files (BIFF), Table: Employee$, Embedded Labels
5. Haga clic en el nombre del campo EmpID y cambie el nombre por
el de EmployeeID.

copyright 1996-2005 QlikTech International

Page 46

QlikView Enterprise Script

6. Pulse Finalizar para volver al cuadro de dilogo Editor de Script y


visualice la nueva sentencia Load generada para los datos de
Employee...
7. Ahora, aada sus comentarios a esta carga de datos, y nombre la
tabla como Employee. Tambin puede borrar la sentencia
Directorio, generada debido a la especificacin de Rutas Relativas.
No necesitaremos estas sentencias en nuestro script.
8. Adems, segn nuestro plan de proyecto, necesitaremos aadir un
campo [Employee Hire Year]. Incluya dicho campo ahora,
empleando la funcin year en el campo [Hire Date].
9. Las sentencias de script debieran ofrecer el siguiente aspecto:
/* Employee Table comments */
Employee:
Load
EmpID as EmployeeID,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) as [Employee Hire Year],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\EmpOff.xls (biff, embedded labels,
table is [Employee$]);

10. A continuacin, siga el mismo procedimiento para los datos de la


tabla Office. Esta se encuentra en la segunda hoja de clculo del
archivo Excel EmpOff.xls. Cuando abra el Asistente para Tablas,
asegrese de cambiar a la hoja de clculo Excel Office$ en el cuadro
denominado Table (Tabla) en la primera pgina del asistente.
11. Aada los comentarios a la tabla y denomine la sentencia de Carga
con el nombre Office. Las siguientes sentencias deberan incluirse
en su script:
/* Office Table comments */
Office:
Load
Office,
Address,
[Postal Code],
City,
StateProvince,
Phone,
Fax,
Country

copyright 1996-2005 QlikTech International

Page 47

QlikView Enterprise Script

FROM Datasources\EmpOff.xls (biff, embedded labels,


table is [Office$]);

Observe que los nombres de campo que contienen espacios se encierran


entre corchetes (tambin se pueden emplear comillas " "), por ejemplo,
[Cdigo Postal].
12. Pulse Aceptar en el Editor de Script, y guarde el documento. A
continuacin recargue los datos desde los mens o desde la barra de
herramientas.

Figura 20. Advertencia acerca de referencias circulares

13. QlikView le avisa si encuentra referencias circulares, o bucles, en la


estructura de tabla. Pulse Aceptar.
Cuando trabaje con estructuras de datos muy complejas, que contengan
gran cantidad de tablas, es posible que se vea en una situacin en la que
la interpretacin de los datos sea incierta. QlikView ha sido
desarrollado de tal manera que pueda manejar las estructuras ms
complejas, e interpretarlas automticamente de forma correcta, no
obstante existen ciertas limitaciones. Es importante que sea consciente
de cules son estas limitaciones y sepa cmo resolver el problema de
los bucles cuando ste se plantee.
Pronto volveremos a la generacin de nuestro script, pero primero
analicemos las referencias circulares y sus consecuencias.

9.5. Referencias circulares


Observe el siguiente ejemplo, que consiste en una estuctura de datos
simple, con tres tablas:
Clientes

Pedidos

Presupuesto

IDCliente
Pas

IDCliente
IDProducto
ValorPedido

Pas
IDProducto

copyright 1996-2005 QlikTech International

Page 48

QlikView Enterprise Script

Como puede ver, es posible literalmente ir en crculos. En este


ejemplo, es fcil detectar una referencia circular, pero esto puede
complicarse mucho ms en estructuras ms complejas.
Las estructuras de datos de este tipo debieran evitarse, ya que pueden
llevar a una interpretacin ambiga de los datos.
Desgraciadamente, las referencias circulares son algo habitual, y no es
raro encontrrselas a lo largo de la vida laboral. A menudo se deben a
un diseo pobre de la base de datos, pero en algunas ocasiones son
inevitables.
En ciertos casos, un campo (o tabla) puede cumplir diversos roles, por
ejemplo, una compaa puede ser cliente y proveedor a la vez. El
campo, o tabla, debe entonces cargarse dos veces en QlikView, bajo
nombres diferentes.
QlikView resuelve el problema de las referencias circulares empleando
una tabla parcialmente desconectada. Si QlikView encuentra un bucle
mientras se ejecuta el script de carga, se mostrar un dilogo de
advertencia y una o ms tablas se configurarn como parcialmente
desconectadas. QlikView tratar de desconectar parcialmente la tabla de
mayor longitud. Esta ser a menudo una tabla de transaccin. Si desea
desviarse de la opcin prederminada por defecto en QlikView, puede
definir la tabla como parcialmente desconectada empleando una
sentencia loosen table (desconectar tabla) en el script. Tambin es
posible modificar los parmetros de configuracin de las tablas
parcialmente desconectadas de forma interactiva tras la ejecucin de
script mediante la pestaa Tablas en Propiedades de Documento.
Tambin puede determinar qu tablas de su estructura estn
establecidas como parcialmente esconectadas empleando la utilidad
Visor de Tabla. Las tablas parcialmente desconectadas mostrarn lneas
de puntos a modo de conectores.
Para evitar las referencias circulares y las tablas parcialmente
desconectadas, debe renombrar los campos que ocasionan los bucles y
eliminar las tablas parcialmente desconectadas en la pestaa Tablas en
Propiedades de Documento.

9.6. Causas de las referencias circulares


Con frecuencia, las estructuras circulares son resultado de la existencia
de campos clave incluidos de manera no intencional en la carga de
datos. En nuestro documento QlikView, hemos recibido un mensaje de
advertencia ante referencias circulares porque muchos campos de tablas
diferentes tenan el mismo nombre. Esto ocasiona asociaciones
indebidas de campos QlikView. Puede verse ms claramente analizando
la hoja de sistema.

copyright 1996-2005 QlikTech International

Page 49

QlikView Enterprise Script

1. Vaya a la hoja de sistema y haga clic con el botn derecho en el


cuadro de lista $Table y seleccione Propiedades.
2. Seleccione Mostrar Frecuencia en la pestaa General y ordene
por frecuencia.
3. Ahora podemos ver la frecuencia en ambos cuadros de lista
$Field y $Table. Ahora seleccionamos todos los que tengan una
frecuencia mayor que 1 en $Field y a continuacin hacemos lo
mismo para $Table.
4. Elimine todos los valores de $Field que tengan la frecuencia 1, y
luego proceda igual en $Table. Contine de la misma manera
hasta que ya no le sea posible eliminar los valores con
frecuencia 1.
Si no es posible obtener la frecuencia 1 para todas las tablas posibles
restantes en el cuadro de lista $Table, entonces tenemos una referencia
circular en alguna parte de la aplicacin.

Figura 21. Todos los valores posibles tienen una frecuencia mayor que 1

Si examinamos ahora ms de cerca los valores posibles del cuadro de


lista $Field, veremos que algunos de estos campos probablemente no
deberan estar conectados. Un ejemplo de ello lo tenemos en el campo
Fax.
1. Seleccione Fax en el cuadro de lista $Field.

copyright 1996-2005 QlikTech International

Page 50

QlikView Enterprise Script

2. Compruebe en qu tablas aparece el campo Fax.


Fax se encuentra en las tablas Customers y Office. No queremos que los
nmeros de fax de nuestros clientes se mezclen con los nmeros de fax
de nuestras oficinas. Por lo tanto, debemos renombrar este campo en la
tabla Office, que fue la que se carg ms recientemente. Los dems
campos de esta tabla tambin debieran ser renombrados.

9.7. Renombrar campos para evitar las referencias


circulares
Podemos evitar las referencias circulares modificando el script.
1. Abra el cuadro de dilogo Editor de Script y renombre los campos
de la tabla Office tal y como se muestra ms adelante. Observe que
no queremos renombrar el campo clave intencional Office, dado que
an necesitamos un enlace con la tabla Employee. Tambin
aprovechamos la oportunidad para renombrar el campo City como
[Sales Office] segn nuestro plan de proyecto.
Office:
Load
Office,
Address as OfficeAddress,
[Postal Code] as OfficePostalCode,
City as [Sales Office],
StateProvince as OfficeStateProvince,
Phone as OfficePhone,
Fax as OfficeFax,
Country as OfficeCountry
FROM Datasources\EmpOff.xls (biff, embedded labels,
table is [Office$]);

2. Haga clic en Aceptar en el Editor de Script, y guarde el documento.


A continuacin recargue los datos desde los mens o la barra de
herramientas. No debera haber ninguna advertencia ms sobre
referencias circulares, lo cual quiere decir que todas han sido
eliminadas.

copyright 1996-2005 QlikTech International

Page 51

QlikView Enterprise Script

Figura 22. Las tablas posibles tienen ahora la frecuencia 1

Como puede ver en la figura superior, ya no hay ningn campo que


asocie las tablas Office y Customers. QlikView eliminar
automticamente la designacin de parcialmente desconectado de la
tabla Orders (Pedidos) una vez que la referencia circular haya sido
corregida.

9.8. Tablas parcialmente desconectadas


En una tabla parcialmente desconectada, la lgica asociativa de
QlikView est internamente desconectada. Esto significa que las
selecciones en los campos no clave de una tabla no afectarn a otras
tablas. En ciertos casos, esto puede resultar muy eficaz, aunque en
nuestro caso no queremos implementar esta funcin. Para entender el
concepto de parialmente desconectado, observe el siguiente ejemplo:
Aqu vemos cuadros de tabla creados por tres tablas diferentes.

Si elegimos el valor 2 del campo B, ocurre lo siguiente:

copyright 1996-2005 QlikTech International

Page 52

QlikView Enterprise Script

La seleccin afecta a todas las tablas. Ahora conservemos este valor,


pero haciendo la Tabla 2 parcialmente conectada. Esto implica que la
lgica entre los campos A y C est desconectada. El resultado es:

Observe que la Tabla 2 mostrada arriba es un cuadro de tabla y no la


tabla real. El cuadro de tabla muestra todas las combinaciones posibles
de columnas. Como no existe una conexin lgica entre los campos A y
C, todas las combinaciones posibles entre sus valores se muestran.
Como la Tabla 2 est parcialmente conectada, las selecciones realizadas
en la Tabla 1 no se propagarn a la Tabla 3.

copyright 1996-2005 QlikTech International

Page 53

QlikView Enterprise Script

10. Ejercicios
1. Use el botn Exportar Estructura situado en el dilogo Propiedades de
Documento: Tablas para exportar la estructura de tabla desde su documento
QlikView.
2. Cree un nuevo documento QlikView, y cargue los datos desde las tablas que
export en el paso 1.
3. Muestre los campos de esta carga en una o ms hojas.

copyright 1996-2005 QlikTech International

Page 54

QlikView Enterprise Script

11. Creacin de datos en QlikView


En nuestro plan de proyecto, una de las Dimensiones Clave que
aparecen listadas es Sales Person. Dado que no existe ningn campo en
nuestros datos fuente para Sales Person, necesitaremos generar este
campo en QlikView durante el proceso de carga de datos. En este
captulo, practicaremos con las cargas residentes y condicionales,
tambin se introducir al lector en el concepto de creacin de mltiples
tablas lgicas en QlikView, basadas en una nica tabla de datos fuente.
Tambin nos iniciaremos en la tabulacin de script.

11.1. Carga residente


En esta seccin, aprenderemos cmo crear una nueva tabla lgica en
QlikView, basada en una tabla (residente) previamente cargada.
Tambin se ver cmo segregar el script de carga en distintas pestaas
para facilitar la lectura y el mantenimiento.
1. Abra el dilogo Editor de Script.
2. Aada una nueva tabla al script haciendo clic en el icono Aadir
nueva pestaa
o seleccionando Aadir Pestaa del elemento
de men Pestaa. Otorgue el nombre de Sales Person a la nueva
pestaa.
3. Ahora aadiremos otra carga de tabla al script, pero esta vez, en
lugar de utilizar un asistente para crear el cdigo, copiaremos
cdigo ya existente, y lo modificaremos. Primeramente localice la
carga de la tabla Employee en la pespaa de script Principal. Copie
(pulsando <Ctrl>-C, o mediante Editar Copiar) todas las lneas de
esta sentencia. A continuacin vuelva a la pestaa Sales Person, y
pegue (pulsando <Ctrl>-V, o mediante Editar Pegar). Ahora
debera tener un duplicado de la carga de la tabla Employee en la
nueva pestaa.
4. A continuacin, edite la sentencia de carga tal y como se le indica:
- Cambie el nombre de tabla por el de Sales_Person
- Elimine el renombrado de EmpID, y cambie al nombre de campo
QlikView: EmployeeID (ya no estamos leyendo de la fuente de
datos).
- Elimine los campos [Hire Date], Office, Extension, [Reports To],
y [Year Salary] de la sentencia load.
- Elimine la coma del campo Ttulo (ahora es el ltimo campo de
esta carga) y renombre este campo con el nombre de SalesTitle.
- Elimine la especificacin Desde, dado que no se leer desde un
archivo de disco para esta carga.

copyright 1996-2005 QlikTech International

Page 55

QlikView Enterprise Script

- Aada la especificacin Residente, apuntando al archivo


residente del que deseamos cargar, en la misma ubicacin en la que
se hallaba Desde.
5. Su script debera tener ahora el siguiente aspecto:
/* Sales Person Table comments */
Sales_Person:
Load
EmployeeID,
[Last Name],
[First Name],
Title as SalesTitle
Resident Employee;
6. Ahora queremos limitar la carga de todos los registros de datos de

Employee nicamente a aquellos que podamos identificar como


vendedores (Salesperson). Para hacer esto, necesitamos hacer otro
cambio al cdigo de script. Primero, elimine el punto y coma (;)
situado tras Resident Employee. A continuacin, aada la
condicin where tras la lnea Resident, tal como se indica:
where Left(Title,3) = 'Sal'
OR Title = 'President';

7. Pulse Aceptar en el Editor de Script, y guarde el documento. A


continuacin recargue los datos desde los mens o mediante la barra
de herramientas.
8. Aada cuadros de lista para [Last Name], Title, y SalesTitle a la
hoja Principal. Elija Seleccionar Todo en el campo SalesTitle, y
observe que slo algunos de los valores [Last Name] y Title se
muestran como posibles (es decir, en blanco).
Para que un valor de la tabla Employee original sea incluido en la nueva
tabla lgica Sales_Person, debe satisfacer al menos una de las
condiciones ya definidas. La primera de ellas, que los tres primeros
caracteres del campo Title deben ser Sal. La segunda, que el campo sea
igual a President.
9. Guarde el documento.

11.2. Tablas de clave sinttica


No es algo deseable el tener varias claves comunes a lo largo de
diversas tablas en una estructura de datos QlikView. Esto puede
ocasionar que QlikView tenga que utilizar claves complejas (tambin
conocidas como claves sintticas) para generar las conexiones de la
estructura de datos. Las claves sintticas generalmente consumen
muchos recursos y pueden ralentizar los clculos o incluso, en casos

copyright 1996-2005 QlikTech International

Page 56

QlikView Enterprise Script

extremos, sobrecargar las aplicaciones. Tambin dificultan la


comprensin y el mantenimiento de los documentos. Existen varios
casos en los que las claves sintticas son imposibles de evitar (por
ejemplo en las Tablas de Correspondencia de Intervalos), pero, en
general, las claves sintticas deberan eliminarse en todos los casos,
siempre, si ello es posible.
Cuando anteriormente cargamos la tabla que genera el campo
SalesTitle, sin querer estbamos creando una clave sinttica entre las
tablas Employee y Sales_Person. La clave sinttica se genera en una
nueva tabla de clave sinttica ($ Syn 1 Table) la cual puede verse desde
el Visor de Tablas en el men Archivo.

Figura 23. Las tablas de clave sinttica vistas desde el Visor de Tablas

11.3. Cmo eliminar una tabla de clave sinttica


Como se puede deducir por lo expuesto en el Visor de Tablas ahora
mismo tenemos una tabla de clave sinttica que se compone de los
campos First Name, Last Name y EmployeeID. En este caso, no hay
razn por la que necesitaemos emplear los campos de nombre como una
clave adicional entre estas tablas, dado que EmployeeID ya cumple este
propsito. Para corregir esta situacin, emplearemos de nuevo la tcnica
de renombrar campos. Para eliminar las conexiones redundantes,
deberamos renombrar los campos que no deseamos utilizar como
campos clave. Podemos aprovechar la oportunidad para introducir un
cambio ms combinando los campos First Name y Last Name en
nuevos campos Name por concatenacin. As mismo, nuestro plan de
proyecto nos exige que proporcionemos un campo Sales Person
consistente en nombre de pila y apellido.

copyright 1996-2005 QlikTech International

Page 57

QlikView Enterprise Script

Efecte los siguientes cambios en las lneas de script que sirven para
cargar los campos First Name y Last Name para que el script que carga
las dos tablas implicadas ahora sea as:
Employee:
Load
EmpID as EmployeeID,
[First Name] & ' ' & [Last Name] as Name,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) as [Employee Hire Year],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\EmpOff.xls (biff, embedded
labels, table is [Employee$]);

Sales_Person:
Load
EmployeeID,
Name as [SalesPerson],
Title as SalesTitle
Resident Employee
Where
Left(Title,3) = 'Sal'
OR Title = 'President';

Tras ejecutar el script, puede constatar que la clave compleja se ha ido,


empleando de nuevo para ello la utilidad Visor de Tablas. Tambin
puede aadir el nuevo cuadro de lista [Sales Person] a la hoja Principal
para visualizar los resultados.

11.4. Avanzado Cmo valerse de Orders (pedidos)


para determinar Sales Person (Vendedor).
Acabamos de emplear un mtodo bastante simple, que nos ha permitido
probar los valores de campo requeridos para el campo SalesPerson.
Este es un mtodo perfectamente vlido y adecuado, pero tambin
podramos haber obtenido el mismo resultado utilizando una solucin
ms elegante.
Comenzamos observando que todos los vendedores (sales people) estn
incluidos en nuestros datos de ventas. De ah se deduce que deben estar
incluidos en el campo EmployeeID en la tabla Orders. Comenzamos
por crear un campo nuevo EmployeeSales en el script, en el que Orders
se est cargando. Haciendo referencia a este campo posteriormente en
el script, podemos asegurarnos de que todos los empleados que han sido

copyright 1996-2005 QlikTech International

Page 58

QlikView Enterprise Script

acreditados por las ventas aparecern listados en el campo [Sales


Person].
1. Para hacer esto, introduzca la siguiente lnea en la sentencia load de
la tabla Orders inmediatamente despus de la carga del campo
EmployeeID.
EmployeeID as EmployeeSales,

2. A continuacin, cambie la condicin Where en la sentencia load de


la tabla Sales_Person para utilizar la funcin exists de QlikView.
Tambin incluiremos un campo exclusivo SalesPersonID para
identificar al vendedor (SalesPerson).
Sales_Person:
Load
EmployeeID,
EmployeeID as SalesPersonID,
Name as [SalesPerson],
Title as SalesTitle
Resident Employee
Where
Exists(EmployeeSales,EmployeeID);

La condicin de la clusula Where comprueba que los datos cargados


tengan sus correspondientes valores en el campo EmployeeSales. Como
su propio nombre indica, la funcin exists puede utilizarse para
comprobar si existe un valor de campo especfico en un determinado
campo de los datos cargados hasta el momento. Recuerde ser cuidadoso
en el orden que siga en sus sentencias de script, ya que el campo de
referencia debera ir lleno antes de comprobar los valores. En este
ejemplo, la tabla Orders debe cargarse antes que la tabla Sales_Person
para que esta condicin funcione como es debido. Tras haber terminado
de efectuar estos cambios, y haber guardado el documento, debera
comprobar la funcionalidad de su script.

copyright 1996-2005 QlikTech International

Page 59

QlikView Enterprise Script

12. Cmo cargar un archivo DIF


12.1. Archivos de texto en Formato de Intercambio
de Datos
El acrnimo formado por las siglas DIF significa Data Interchange
Format (Formato de Intercambio de Datos) y se utiliza, por ejemplo, al
transferir archivos de texto desde el entorno AS/400. Ahora aadiremos
la tabla suppliers a nuestro script de carga, la cual, como ya se ha visto,
est en formato DIF.
1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Site el cursor en la parte inferior de la pestaa Principal, y aada
su comentario para la carga de la tabla de datos Suppliers.
3. Asegrese de que la casilla de verificacin Asistente est marcada y
a continuacin haga clic en el botn Ficheros Planos para abrir el
dilogo Abrir Archivos Locales.
4. Navegue hasta hallar el archivo suppliers.dif en la carpeta
DataSources y pulse Abrir.
5. Compruebe que el asistente haya interpretado el formato de archivo
correctamente.
Tipo: DIF, Juego de Caracteres: OEM, Etiquetas Incrustadas.
Nota 1:
El juego de caracteres correcto para este archivo es OEM. Los archivos
creados en Windows tienen ANSI como juego de caracteres estndar.
Macintosh usa el juego de caracteres MAC. A veces, como en este caso,
se pueden utilizar otros juegos de caracteres al importar datos desde
otros ordenadores. En tal caso, OEM quiz sea el ms comn. Este
juego de caracteres se emplea por ejemplo en OS/2 y DOS. Si usted
especifica un juego de caracteres indebido, existe el riesgo de que se
pierdan algunos caracteres, o que se interpreten de manera incorrecta.
Nota 2:
QlikView asocia campos con el mismo nombre. Si dos tablas tienen
varios campos en comn, QlikView puede crear claves complejas para
poder asociar las tablas (vase tablas de clave sinttica).
Como suceda en la tabla Office, suppliers.dif tiene varios campos en
comn con la tabla Customers en la base de datos de Access. Estos

copyright 1996-2005 QlikTech International

Page 60

QlikView Enterprise Script

campos no deberan asociarse unos con otros, y algunos de los campos


de suppliers.dif deben ser renombrados. El nico campo en comn
debera ser SupplierID, que tambin se encuentra en la tabla Products.
Como renombraremos prcticamente todos los campos de
suppliers.dif, emplearemos una sentencia especial de QlikView que
califica todos los nombres de los campos con el nombre de la tabla,
cuando stos son cargados. Los nuevos nombres de campo sern por
tanto table name.field name. Como queremos renombrar todos los
campos excepto SupplierID, utilizaremos *.
6. Haga clic en Finalizar para volver al dilogo Editor de Script y ver
la nueva sentencia de Carga generada para los datos de los
Proveedores (Suppliers).
7. Introduzca las siguientes lneas de cdigo antes de la sentencia load
de la tabla suppliers.
Qualify *;
Unqualify SupplierID;

Como SupplierID va a conectarse a otra tabla, no debera tener el


cualificador de tabla. Esto se especifica empleando la sentencia
unqualify SupplierID.
8. Una vez que la tabla Suppliers haya sido cargada, debemos incluir
la siguiente sentencia, para que todos los campos cargados tras sta
no tengan el cualificador de tabla.
Unqualify *;

Ahora debera encontrarse con las siguientes lneas en su script:


/* suppliers Table comments */
Qualify *;
Unqualify SupplierID;
suppliers:
Load
SupplierID,
CompanyName,
ContactName,
Address,
City,
PostalCode,
Country,
Phone,
Fax
FROM Datasources\suppliers.dif (oem, dif, embedded
labels);
Unqualify *;

copyright 1996-2005 QlikTech International

Page 61

QlikView Enterprise Script

9. Pulse Aceptar en el Editor de Script y guarde el documento. A


continuacin recargue los datos desde los mens o la barra de
herramientas.

copyright 1996-2005 QlikTech International

Page 62

QlikView Enterprise Script

13. Campos clave


Los campos clave son campos comunes a una o ms tablas (campos
asociados). Cuando un campo se repite en ms de una tabla, QlikView
no sabe qu tabla utilizar para calcular la frecuencia de los datos.

13.1. Un ejemplo de problema que puede surgir


Pongamos por caso que tenemos una tabla llamada Orders (Pedidos)
con 1000 nmeros diferentes de pedidos (OrderID). Tambin tenemos
una tabla llamada ForeignOrders (Pedidos del extranjero), que
contiene 200 nmeros. Estos nmeros de pedidos tambin se encuentran
incluidos en la primera tabla.
Las dos tablas se asociarn a travs del campo comn OrderID (ID de
pedido). El problema surge cuando deseamos saber el nmero exacto de
OrderID nicos. Es 1000, 200 o 1200? Nosotros sabemos, por la
informacin que tenemos, que la respuesta correcta es 1000 OrderID
nicos, pero para QlikView no est tan claro.
En este caso, QlikView buscar una tabla principal. Puede ser que elija
la correcta, pero en muchos casos el programa tendr que optar por una
al azar.
Como la eleccin al azar puede traer nefastas consecuencias, QlikView
ha sido diseado para que no permita ciertas operaciones si existe duda
alguna respecto a qu campo es el ms correcto para calcular la
frecuencia.

13.2. En qu me afecta esto?


Debera tener en cuenta las siguientes limitaciones cuando trabaje con
campos clave.

En la mayora de ocasiones, no es posible obtener informacin


sobre la frecuencia en un cuadro de lista que muestre campos
asociados. Ver que la casilla de verificacin Mostrar Frecuencia
est inactiva.

En la mayora de las ocasiones, tampoco ser posible utilizar


funciones para calcular la frecuencia de los campos asociados en
grficos (Count, etc.) Deber emplear un cualificador Distinct en
este tipo de expresiones.

En general, es una buena medida evitar la utilizacin de campos


clave en los cuadros de lista y las expresiones. Los campos clave

copyright 1996-2005 QlikTech International

Page 63

QlikView Enterprise Script

deberan emplearse para enlazar tablas unas con otras, y no para


mostrar datos en un documento QlikView.

13.3. Cmo resolver el problema de los campos


clave
Hay una solucin relativamente fcil al problema de los campos clave y
al clculo de la frecuencia de los datos. Puede cargar de nuevo el campo
que desee emplear para calcular la frecuencia pero esta vez bajo un
nombre distinto.
El problema descrito en el apartado anterior puede resolverse pues de la
siguiente manera:
Load
,
OrderID,
OrderID as OrderIDCount,

from Order.xls ();

Ahora puede utilizar el campo nuevo (no asociado) en un cuadro de


lista que muestre la frecuencia, o en un grfico con funciones
especficas para el clculo de frecuencia. El nuevo nombre de campo
puede ocultarse fcilmente otorgndole otro ttulo para no confundir a
los usuarios del documento.

13.4. El grfico muestra realmente lo que deseo


mostrar?
Cuando cree un grfico en QlikView, naturalmente es importante que
verifique si realmente muestra lo que usted desea que muestre. Tenga
cuidado con la eleccin de las expresiones, para que sean las ms
adecuadas para cada caso. QlikView cuenta con diversas expresiones. A
continuacin tiene un resumen de dichas expresiones, junto con lo que
stas muestran.
Vendedor
Karl
Janne
Ola
Karl

Artculo
A
A
B
B

ClienteNo
10
101
10
111

Expresin
Total Count(Vendedor)
Total Count(VendedorDistinto)
Total Count(Artculo)
Total Count(ArtculoDistinto)

Cantidad
100
200
250
350
Resultado
4
3
4
2

copyright 1996-2005 QlikTech International

Page 64

QlikView Enterprise Script

Num(Cantidad)
Sum(Cantidad)

4
900

copyright 1996-2005 QlikTech International

Page 65

QlikView Enterprise Script

14. Ejercicios
1. Modifique el script en su documento QlikView de forma que incluya un
campo llamado CuentaIDProducto, basado en el campo ProductID. El
nuevo campo se utilizar para producir la Medida Clave (Key Measure)
requerida: Total Productos Vendidos tal y como se detalla en nuestro plan
de proyecto.
2. Modifique el script de su documento QlikView para que incluya un campo
denominado CountOrderDate, basado en el campo OrderDate. El nuevo
campo se emplear para contar el nmero total de Pedidos (Orders).
3. Cree una tabla pivotante, con las dimensiones Vendedor, NombreProducto,
y Mes. La expresin debera contar el nmero de productos DISTINTOS
vendidos, y debera etiquetarse [Productos Totales Vendidos]. Mostrar
Sumas Parciales por Vendedor, y Mes.
4. Aada una nueva expresin para la cuenta total de productos vendidos y
denomnela [Cantidad Ventas].
5. Ordene las dimensiones NombreProducto y Vendedor por la misma
expresin que [Cantidad Ventas], en orden Descendente.

Figura 24. La solucin

copyright 1996-2005 QlikTech International

Page 66

QlikView Enterprise Script

15. Campos de dimensin de tiempo


adicionales
Hay dos (2) campos de dimensin de tiempo adicionales necesarios
para nuestro documento QlikView segn la seccin Trends
(Tendencias) de nuestro plan de proyecto. Necesitamos aadir Quarter
(o Trimestre) y Rolling Month (Mes en curso actualizado).
Emplearemos una tcnica bastante simple para generar Quarter que
introduce los conceptos de tablas de Load Inline, autogenerate y
Mapping. Para Rolling Month, introduciremos algunas funciones de
fecha QlikView adicionales, as como tambin indicaciones sobre cmo
especificar formatos de fecha.

15.1. Tablas Inline


Quiz recuerde que al principio del curso se analizaron las distintas
maneras de cargar datos en el script QlikView. Ya se nos ha introducido
en varias de estas tcnicas, y ahora conoceremos una ms.
En algunos casos, puede resultar interesante poder introducir los datos
de una tabla directamente en el script. Esto se hace con la ayuda de una
sentencia denominada load inline.
1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Site el cursor cerca de la parte superior de la pestaa Principal,
antes que cualquier carga de tabla, pero tras las sentencias SET.
Aada un comentario para cargar los datos del Trimestre.
3. Incluya la siguiente sentencia en el script:
Quarters:
Load * Inline [
Month, Quarter
1,Q1
2,Q1
3,Q1
4,Q2
5,Q2
6,Q2
7,Q3
8,Q3
9,Q3
10,Q4
11,Q4
12,Q4];

copyright 1996-2005 QlikTech International

Page 67

QlikView Enterprise Script

Como puede ver una carga inline contiene los nombres de campo y los
datos encerrados entre corchetes ([]). Tambin observe que los nombres
de campo se sitan en la primera lnea, y los valores de datos van
separados por comas. La tabla introducida en el script asocia meses
numricos con el correspondiente trimestre. Cuando ejecutamos el
script, se genera un nuevo campo (Quarter).
Pulse Aceptar en el Editor de Script, y guarde el documento. A
continuacin recargue los datos desde los mens o la barra de
herramientas.
Consejo: Las tablas inline tambin se pueden generar por medio del
Asistente Inline que se abre pulsando un botn del grupo Datos Inline en
el editor de script.

15.2. Autogenerar tablas


Otra forma de generar datos en QlikView consiste en emplear la
clusula autogenerate en la sentencia load. Especificar autogenerate
en una sentencia load generar automticamente un nmero de
registros. Slo se permiten funciones libres de parmetros y constantes
en una autogenerate load. Muy a menudo, las funciones recno() o
rowno() se emplean para proporcionar un nmero exclusivo y nico
para cada fila.
1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Site el cursor tras la carga de las tablas Quarters que acabamos de
aadir en el paso anterior, en la pestaa Principal. Asegrese de
comentar esa sentencia load, ya que la reemplazaremos con otra
alternativa. Si aade REM frente a la etiqueta de la tabla, eso servir
para comentar toda la sentencia.
3. Incluya la siguiente sentencia en el script:
Quarters:
Load
rowno() as Month,
'Q' & Ceil(rowno()/3) as Quarter
Autogenerate(12);

La funcin rowno() devolver el nmero actual de filas de la tabla


lgica QlikView que se est creando, empezando por 1. La funcin Ceil
(de ceiling, techo o tope) redondea el nmero hacia el siguiente
entero. El caracter & se usa para la concatenacin de cadenas en
QlikView.

copyright 1996-2005 QlikTech International

Page 68

QlikView Enterprise Script

Pulse Aceptar en el Editor de Script, y guarde el documento. A


continuacin recargue los datos desde los mens o la barra de
herramientas.
Recuerde emplear slo una de las sentencias Quarters load, y comentar
la otra.

15.3. Tablas Mapping o Tablas de correspondencias


Este tipo de tabla es til porque enlaza los datos de Mes (Month) con el
Trimestre (Quarter) correcto en la tabla Orders (Pedidos). Sin embargo,
el campo Month es ahora un campo clave, y esto probablemente
acarrear problemas ms adelante. Hay unas cuantas soluciones y ahora
pasaremos a investigar una de ellas.
Transformando nuestra tabla load inline Quarters en una tabla
mapping, podremos integrar el campo Quarters en la misma tabla que
Month (la tabla Orders).
El prefijo mapping se utiliza en una sentencia join o select para crear
una tabla mapping. Las tablas ledas va mapping load o mapping
select reciben un tratamiento distinto de las dems tablas. Se
almacenan en un rea de memoria diferente y se emplean nicamente
como tablas mapping durante la ejecucin de script. Tras la ejecucin
de script se descartan de forma automtica.
Una tabla mapping debe contener dos columnas, la primera con valores
comparativos y la segunda con los valores de correspondencia que se
desee. Hay que nombrar las dos columnas, pero los nombres no tienen
especial relevancia en s mismos. Los nombres de columna no tienen
conexin con los nombres de campo de las tablas regulares. Cuando las
tablas mapping se usan para mapear un determinado valor o expresin,
ese valor ser comparado con los valores de la primera columna de la
tabla mapping. Si se encuentra, el valor original ser reemplazado por el
correspondiente valor en la segunda columna de la tabla mapping. Si no
se encuentra, no se efectuar reemplazo alguno.
La sintaxis es la siguiente:
mapping ( load statement | select statement )
Ahora, cambie la carga de la tabla Quarters a una mapping, como se
indica:
Quarters_Map:
Mapping Load

Si recarga los datos ahora, perder la tabla Quarters y el campo, dado


que las tablas mapping son temporales. No obstante, podemos usar la

copyright 1996-2005 QlikTech International

Page 69

QlikView Enterprise Script

tabla Quarters_Map en nuestro script (siempre y cuando lo empleemos


tras haber sido definido en el script). Para hacer esto, emplearemos la
funcin applymap.
La sintaxis es:
applymap( 'mapname', expr, [ , defaultexpr ] )

La funcin applymap hace corresponder cualquier expresin de una


tabla mapping previamente cargada. Mapname es el nombre de una
tabla mapping previamente cargada por una sentencia mapping load o
mapping select. El nombre debe ir enmarcado por comillas simples.
Expr es la expresin cuyo resultado habr de ser mapeado. Defaultexpr
es una expresin opcional, que se emplear como valor de
correspondencia por defecto si la tabla mapping no contiene ningn
valor que encaje con expr. Si no se suministra valor predeterminado
alguno, el valor de expr es devuelto tal cual.
Aada una funcin applymap a la tabla Orders, basndose en el valor
numrico de Month. Esta funcin debera hacer referencia a la tabla the
Quarters_Map. La funcin debera presentar el siguiente aspecto:
applymap('Quarters_Map',num(Month(OrderDate))) as
Quarter,

Pulse Aceptar en el Editor de Script y guarde el documento. A


continuacin recargue los datos desde los mens o la barra de
herramientas. Luego incluya el campo Quarter a la hoja Principal, y
revise su trabajo.

15.4. Mes en curso actualizado


Completaremos nuestros campos de dimensin de tiempo creando un
campo nuevo que haga cada mes nico. Hay, desde luego, diversas
maneras de acometer esto. En este curso, crearemos el campo Rolling
Month (Mes en curso actualizado) empleando funciones de fecha
QlikView basadas en el campo OrderDate, junto con una funcin de
formateado de fecha que suministre el formato correcto de presentacin
para nuestro campo de mes. No vamos a entrar a discutir si limitar los
valores del campo Rolling Month a los ltimos 24 meses, ya que dicho
tema se ve en el mdulo de formacin Time Dimension (Dimensin de
Tiempo).
1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Site la sentencia de carga de la tabla Orders en la pestaa
Principal.

copyright 1996-2005 QlikTech International

Page 70

QlikView Enterprise Script

3. Cree un nuevo campo (Rolling Month ) en la sentencia Load de la


tabla Orders, tal como se indica:
date(monthstart(OrderDate),'MMM-YYYY') as [Rolling Month],

La funcin monthstart devuelve el primer da del mes del valor


OrderDate. La funcin date a continuacin da formato a este valor con
un nombre de mes compuesto de tres caracteres, seguidos de un ao con
cuatro dgitos. Dado que QlikView almacena este campo como una
cadena de texto (en el formato que acabamos de detallar) y tambin
como cadena numrica, puede ser ordenado numricamente, como
cabra esperar.
Se analizarn ms funciones de formato en un captulo posterior.
4. La sentencia de carga completa de la tabla Orders debiera presentar
ahora el siguiente aspecto. Asegrese de que su script coincida con
esto:
Orders:
Load
CustomerID,
EmployeeID,
EmployeeID as EmployeeSales,
Freight,
OrderDate,
OrderDate as CountOrderDate,
Year(OrderDate) as Year,
Month(OrderDate) as Month,
date(monthstart(OrderDate),'MMM-YYYY') as [Rolling Month],
applymap('Quarters_Map',num(Month(OrderDate))) as Quarter,
Day(OrderDate) as Day,
OrderID,
ShipperID;
SQL SELECT * FROM Orders;

5. Pulse Aceptar y guarde a continuacin su archivo. Ejecute el script.


6. Ahora, reemplace la dimensin Month en el grfico de la tabla
pivotante que cre en el segundo grupo de ejercicios con el campo
Rolling Month. Tendr que definir de nuevo las propiedades de este
campo tal y como se definieron para Month.
Consejo: Para una informacin ms detallada acerca de la
utilizacin de los datos de dimensin de tiempo en documentos
QlikView, por favor consulte el mdulo de formacin Time Dimension
(Dimensin de Tiempo).

copyright 1996-2005 QlikTech International

Page 71

QlikView Enterprise Script

16. Tabla cruzada y Carga Genrica


Todos los datos que hemos cargado hasta ahora presentaban una
estructura razonable, y pueden ser cargados mediante sentencias select
o load estndar. Sin embargo, no todos los datos vienen con un formato
favorable a una carga QlikView. En esta seccin se exploran algunas
opciones adicionales disponibles en QlikView para cargar formatos de
datos no estndar. En el directorio DataSources encontrar un archivo
Excel (Budget.xls) con datos financieros. Este archivo presenta datos
en dos hojas. La primera es muy sencilla de cargar en QlikView, sin
necesidad de manipulacin alguna. La segunda, en cambio, contiene
datos que se encontraran habitualmenete en cualquier organizacin,
pero presentan un formato para su visualizacin y no necesariamente
para una carga QlikView. Ambas hojas incluyen campos que
suministran costes de presupuestos e ingresos as como el resultado real
en un cierto nmero de aos recientes. Queremos cargar los datos en la
Hoja2 empleando las tcnicas de Tabla Cruzada y Carga Genrica.

16.1. Tabla Cruzada


Eche un vistazo al archivo Excel de presupuestos antes de cargar los
datos. Los datos contenidos en la hoja2 estn en un formato de tabla
cruzada, lo cual quiere decir que se trata de una matriz de valores entre
dos listas de datos de cabecera.
1. Abra el archivo Budget.xls que se halla en el directorio
DataSources. Visualice la Hoja2. Este formato de datos presenta
unos cuantos desafos, pero por lo menos debera percatarse de que
una carga regular en QlikView producira campos para cada Ao,
en vez de valores anuales en un nico campo Ao, como nos
gustara que apareciera en nuestro documento QlikView.

copyright 1996-2005 QlikTech International

Page 72

QlikView Enterprise Script

Figura 25. Hoja de clculo con datos del presupuesto en la Hoja2

2. Cierre el archivo Excel y retorne a QlikView.


3. Abra el dilogo Editor de Script.
4. Aada una nueva pestaa en el script haciendo clic en el icono
Aadir Nueva Pestaa
o selecionando Aadir Pestaa desde el
elemento de men Pestaa. Nombre la nueva pestaa: Budget/
Actual.
5. Primero, haremos uso del Asistente para Tablas para abrir el archivo
Budget.xls situado en el directorio Datasources.

copyright 1996-2005 QlikTech International

Page 73

QlikView Enterprise Script

Figura 26. Hoja de clculo Presupuesto en el Asistente para Tablas

Seleccione la Hoja2 en Tabla (Table). Observe que hay una lnea de


cabecera extra en estos datos, as pues necesitamos incrementar el
Tamao de Cabecera para poder leer las Etiquetas de columna
correctamente. Modifique este valor de 0 a 1 en Fila (Row).
6. A continuacin, necesitamos rellenar las celdas vacas de Office
para que todos los datos se conecten como es debido. Haga clic en
el botn Transformar en el dilogo Asistente para Tablas. Elija la
hoja Rellenar, y pulse el botn Rellenar Verifique que la Columna
Destino est en 1, y pulse el botn Condicin de Celda Verifique
que el Valor de Celda est vaco, y pulse Aceptar. Haga clic en
Aceptar, en el dilogo Rellenar Celdas, y pulse Aceptar en el dilogo
Rellenar.

Figura 27. Asistente de Tablas Transformar. el dilogo Rellenar

copyright 1996-2005 QlikTech International

Page 74

QlikView Enterprise Script

7. Cuando vuelva al dilogo Asistente para Tablas, notar que las


celdas de la columna Office estn ahora todas rellenas con valores.
8. A continuacin, necesitamos especificar que estos datos estn en un
formato de tabla cruzado. Haga clic en Siguiente para abrir el
dilogo Asistente para Tablas: Avanzado. Aqu, pulse el botn Tabla
cruzada en Opciones.
9. A continuacin se le pedirn los campos a importar. Un campo a
importar es simplemente un campo normal, con valores de datos en
una columna. Un campo a importar no se modificar en una carga
de tabla cruzada. En este caso, los campos Office y Metric son
ambos campos a importar. En la carga de tabla cruzada, todos los
campos a importar deben estar colocados antes de los campos de
datos y atributos. Responda No cuando se le pida 2001 como campo
a importar. Introduzca AodePresupuesto como nombre del
campo atributo. Introduzca Cantidad como nombre del campo de
datos.

Figura 28. Opcin de Tabla cruzada completa

10. Haga clic en Finalizarpara cerrar el cuadro de dilogo.


Ahora debera poder ver la sentencia de carga de la tabla cruzada en su
script. Elimine la sentencia del Directorio e introduzca el nombre de
tabla Budget_Actual_S1 antes de load. Tambin puede ser que desee
eliminar los nombres de campo y reemplazarlos por un *. Esto
permitir al script leer esta hoja de clculo incluso cuando los valores
de Year cambien. Su script debera presentar ahora el siguiente aspecto:
/* Budget Actual crosstable load comments */
Budget_Actual_S1:
CROSSTABLE(BudgetYear, Amount, 2)
Load

copyright 1996-2005 QlikTech International

Page 75

QlikView Enterprise Script

*
FROM
Datasources\Budget.xls (biff, header is line,
embedded labels, table is [Sheet2$], filters(
Replace(1, top, StrCnd(null))
));

11. Pulse Aceptar y guarde a continuacin el archivo. Ejecute el script.


12. Cree una nueva hoja, haciendo clic en el botn Aadir Hoja
, en
la barra de herramientas Diseo, o seleccionando Aadir Hoja en el
men Diseo.
13. Haga clic con el botn derecho en la nueva hoja y seleccione
Propiedades. Introduzca como Ttulo de la hoja: Budget/Actual en la
pestaa General.
14. En la pestaa Campos, seleccione la tabla Budget_ Actual_S1 e
incluya todos los campos desde esta tabla. Observe que el campo
Cantidad contiene todos los valores de las cantidades Presupuesto
(Budget) y Real (Actual), pero preferiramos tener estos valores por
separado, en campos diferentes. Para hacerlo, necesitaremos
implementar otro tipo de carga ms para estos datos.

16.2. Generic Load (Carga Genrica)


Un conjunto de datos genricos es aquel en el que los nombres de
campo se almacenan como valores de campo en una columna, mientras
que los valores mismos de campo se almacenan en una segunda
columna. En nuestro caso concreto tenemos el campo Metric (una
columna), que contiene los nombres de los campos que necesitamos, y
el campo Cantidad (otra columna), que contiene todos los valores de los
campos individuales. Una manera de transformar estos datos en campos
diferenciados, con todos sus valores, es emplear una sentencia Generic
Load.
Si piensa en una tabla cruzada como en unos datos que tienen valores a
modo de campos, entonces una tabla genrica tendra los campos a
modo de valores. Hemos visto ya cmo cambiar los datos de una tabla
cruzada a datos estndar. Ahora veremos cmo pasar los datos
genricos a datos estndar.
1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Site el cursor en la parte inferior de la pestaa Budget/Actual, e
incluya la siguiente sentencia en su script:

copyright 1996-2005 QlikTech International

Page 76

QlikView Enterprise Script

/* Budget Actual generic load comments */


Budget_Actual:
Generic Load
Office,
BudgetYear,
Metric,
Amount
Resident
Budget_Actual_S1;
DROP TABLE Budget_Actual_S1;

Tenga en cuenta que el orden de los campos en una Carga Genrica es


sumamente importante, ya que los ltimos dos campos listados se
emplearn como nombres de campo y campos de valores,
respectivamente.
3. Pulse Aceptar y a continuacin guarde el archivo. Ejecute el script.
4. Ahora puede aadir los campos Actual cost, Actual rev., Budget cost
y Budget rev. a su diseo.
El inconveniente de utilizar una Generic Load reside en que por lo
general produce claves sintticas (claves mltiples comunes entre las
tablas). Puede verlo utilizando el Visor de Tablas. Otra de sus
limitaciones es que las tablas genricas resultantes no pueden ser
concatenadas.

copyright 1996-2005 QlikTech International

Page 77

QlikView Enterprise Script

17. Include
Es posible incluir archivos en el script que contengan script o partes de
un script. Ahora veremos cmo se hace esto y cmo podemos hacer uso
de aplicaciones ms avanzadas con este fin, sin tener que escribir nada
directamente en el script.
Primero echemos un vistazo a lo que vamos a incluir en el script.
Abra el archivo de texto Email.txt, situado en el directorio Datasources
empleando para ello el Bloc de notas, o una herramienta similar. Este
archivo contiene el siguiente script.
Rem *** creates e-mail address;
LOAD
EmpID as EmployeeID,
IF((ord("First Name") >= 65 AND ord("First Name") <=
90), chr(ord("First Name")+32),
IF((Left("First Name",1)='' OR Left("First
Name",1)=''), chr(97),
IF((Left("First Name",1)='' OR Left("First
Name",1)=''), chr(97),
IF((Left("First Name",1)='' OR Left("First
Name",1)=''), chr(111),Left("First Name",1)))))&
IF((ord("Last Name") >= 65 AND ord("Last Name") <=
90), chr(ord("Last Name")+32),
IF((Left("Last Name",1)='' OR Left("First
Name",1)=''), chr(97),
IF((Left("Last Name",1)='' OR Left("First
Name",1)=''), chr(97),
IF((Left("Last Name",1)='' OR Left("First
Name",1)=''), chr(111), Left("Last Name",1)))))&
IF((ord(Right("Last Name",1)) >= 65 AND
ord(Right("Last Name",1)) <= 90), chr(Right("Last
Name",1))+32,
IF((Right("Last Name",1)='' OR Left("First
Name",1)=''), chr(97),
IF((Right("Last Name",1)='' OR Left("First
Name",1)=''), chr(97),
IF((Right("Last Name",1)='' OR Left("First
Name",1)=''), chr(111), Right("Last Name",1)))))&
'@'&
IF(Office=1,'stockholm.se',
IF(Office=2,'lund.se',
IF(Office=3,'paris.fr',
IF(Office=4,'nice.fr','seattle.com')))) as "e-mail"
FROM datasources\empoff.xls(ansi, biff, embedded
labels, table is [Employee$]);

Este es un ejemplo de sentencia load bastante complicada, porque se


basa principalmente en sentencias if anidadas. En este caso, queremos
crear direcciones de correo electrnico desde la informacin contenida
en nuestra base de datos. Muchas condiciones han de ser satisfechas, lo

copyright 1996-2005 QlikTech International

Page 78

QlikView Enterprise Script

cual lleva a una sentencia load compleja, que genera una nueva tabla
lgica con dos campos. Cargaremos EmployeeID y el nuevo campo email, dndonos el primero de ellos el enlace con el resto de la
estructura.
La sentencia load crea una firma compuesta por la primera letra del
primer nombre, y la primera y ltima letras del ltimo nombre.
Tambin asegura que no haya letras maysculas en la firma, slo
minsculas. Las letras extranjeras (del Sueco), por ejemplo , , , ,
y tambin se eliminan. Siguiendo a la firma se inserta @, seguido de
la direccin apropiada del servidor. Esta ltima vendr determinada por
la oficina en la que trabajen los empleados.
Ahora incluiremos el archivo externo en nuestro script de carga.
1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Site el cursor en la parte inferior de la pestaa Principal.
3. Seleccione Include desde el comando de men Editar.
4. Navegue hasta el archivo Email.txt situado en el directorio
Datasources, pulse Abrir. La siguiente lnea se aadir a su script:
$(Include=datasources\Email.txt)

Merece la pena resear que no existe punto y coma tras la sentencia,


pero puede haber uno o ms situados dentro del archivo de texto
incluido.
5. Pulse Aceptar y guarde el documento QlikView.
6. Ejecute el script.
7. Aada una nueva hoja al diseo y nmbrela Employees. Aada el
nuevo campo e-mail como un cuadro de lista.
Por supuesto, cualquier parte o incluso el script completo puede
emplazarse en un archivo Include externo. Tambin podemos tener
mltiples archivos Include en un script.

copyright 1996-2005 QlikTech International

Page 79

QlikView Enterprise Script

18. Archivos de Datos QlikView: Archivos


QVD
Uno de los cambios que ms notablemente han afectado a la escritura
de script en QlikView ha sido la introduccin de los archivos de Datos
QlikView (QlikView Data = QVD). Un archivo QVD contiene una
tabla de datos exportados desde QlikView. QVD es por tanto el formato
propio, o nativo, de QlikView. Slo puede leerse y escribirse desde
QlikView. El formato de archivo est optimizado en su velocidad de
lectura, para poder leer datos con suma rapidez desde un script
QlikView, siendo al mismo tiempo muy compacto. Leer datos desde un
archivo QVD es normalmente entre 10-100 veces ms rpido que leer
desde otras fuentes de datos.

18.1. El formato de archivo QVD


Un archivo QVD contiene exactamente una tabla. Conceptualmente es
muy similar a cualquier otro tipo de archivo estndar (csv, dif, biff o
fix). Un archivo QVD consta de tres partes:
1. Una cabecera XML bien constituida (con juego de caracteres
UTF-8) que describe los campos de la tabla, el diseo de la
informacin subsiguiente, as como algunos otros metadatos.
2. Tablas de smbolos en un formato de bits.
3. Datos reales de la tabla en formato de bits.

18.2. Para qu sirven los archivos QVD?


Los archivos QVD se pueden emplear con muy diversa finalidad. Podemos
identificar claramente al menos cuatro usos fundamentales. En muchos casos
se aplicarn dos o ms de ellos al mismo tiempo. Se trata de los siguientes:
Incremento de la velocidad de carga - Mediante el envo a buffers
de las partes que no cambian, o cambian muy lentamente, de los
datos de entrada de los archivos QVD, podemos acelerar
considerablemente la ejecucin de script en caso de tener grandes
conjuntos de datos. Para conjuntos de datos de gran tamao ser por
tanto mucho ms fcil cumplir con los lmites de tiempo de recarga
de las ventanas.Cuando se desarrollan aplicaciones, a menudo es
necesario ejecutar el script una y otra vez. Mediante el empleo de
buffers QVD en tales ocasiones, los tiempos de espera se pueden
reducir considerablemente, incluso en el caso de que el conjunto de
datos no fuera tan grande.

copyright 1996-2005 QlikTech International

Page 80

QlikView Enterprise Script

Reduccin de la carga en los servidores de las bases de datos Mediante el envo a buffers de las partes que no cambian, o cambian
muy lentamente, de los datos de entrada de archivos QVD, podemos
reducir enormemente la cantidad de datos obtenidos de fuentes de
datos externas. Esto alivia la carga de las bases de datos externas y
reduce el trfico de red. Cuando varios scripts QlikView comparten
los mismos datos solo es necesario cargarlos una nica vez desde la
base de datos fuente. Las restantes aplicaciones pueden hacer uso de
los datos de un archivo QVD.
Consolidacin de los datos de mltiples aplicaciones QlikView Se pueden consolidar los datos de mltiples aplicaciones QlikView
gracias a los archivos QVD. Con la sentencia de script en binario
solo se puede cargar datos de una aplicacin a otra. Con los
archivos QVD, un script QlikView puede combinar datos de
cualquier aplicacin QlikView. Esto abre todo un mundo de
posibilidades, por ejemplo para aplicaciones que deseen consolidar
datos similares procedentes de diversas unidades de negocio, etc.
Carga Incremental - En muchas ocasiones la funcionalidad QVD
se puede emplear para facilitar la carga incremental, cargando por
ejemplo nicamente los registros nuevos de una base de datos en
expansin.

18.3. Creacin de archivos QVD


Se pueden crear archivos QVD de tres maneras diferentes. En el
presente curso exploraremos los dos primeros mtodos.
1. Pueden ser explcitamente creados y nombrados desde el script
mediante el comando store. Usted simplemente ha de indicar en el
script que desea exportar una tabla anteriormente leda, o parte de
ella, a un nombre de archivo explcitamente nombrado en una
ubicacin de su eleccin.
2. Se pueden crear y mantener automticamente desde el script. Con
una sentencia load o select precedida del nuevo prefijo buffer,
QlikView crea de manera automtica un archivo QVD que
posteriormente, si se cumplen ciertas condiciones, se utilizar en
lugar de la fuente de datos original al recargar los datos. El archivo
QVD tendr un nombre crptico basado en un hash de la sentencia
de carga/select y residir normalmente en una carpeta de datos de la
aplicacin Windows.
3. Pueden ser explcitamente nombrados y creados desde el diseo o
mediante Automatizacin. Los datos exportados desde el diseo
QlikView por medio de comandos GUI o macros de
Automatizacin. En la GUI encontrar QVD como uno de los
posibles formatos de exportacin bajo el comando Export..., que se
halla en el men de objeto de la mayora de objetos de hoja.

copyright 1996-2005 QlikTech International

Page 81

QlikView Enterprise Script

18.4. Creacin manual desde el script


Ahora crearemos un archivo QVD en nuestro script de carga mediante
una sentencia store. Esta sentencia crea un archivo explcitamente
denominado QVD.
La sintaxis para la sentencia store es:
store [(*|<lista_de_campos>) from] <tabla> into

<nombre_de_archivo>;
Donde:
<tabla> es una tabla con etiqueta de script, ya cargada, residente.
<nombre_de_archivo> se interpreta de manera similar a los nombres de
las sentencias load, por ejemplo las sentencias directory.
Los campos de la <lista de campos > pueden ser renombrados
utilizando sintaxis as estndar.
1. Abra el Editor de Script desde el men o la barra de herramientas.
2. Site la sentencia de carga de la tabla Customers en la pestaa
Principal.
3. Siguiendo a la sentencia de carga de la tabla Customers, aada la
sentencia store tal como se indica:
store Customers into datasources/customers.qvd;

4. Pulse Aceptar y a continuacin guarde el archivo.Ejecute el script.


No notar ningn cambio en la hoja de Sistema de su aplicacin. No
hay campos nuevos ni tablas lgicas nuevas. La sentencia store que
acaba de incluir no tiene efecto alguno en su documento QlikView
actual, ms que el de ejecutar una sentencia adicional de script. Una vez
se haya ejecutado esta sentencia, sin embargo, existe un nuevo archivo
de datos que puede ser ledo por este documento QlikView, o cualquier
documento QlikView que tenga acceso a la carpeta en la que situamos
el archivo customers.qvd. Para comprobar esto, vamos a reemplazar de
forma temporal la sentencia select Customers por una nueva sentencia
load procedente del archivo customers.qvd que acabamos de crear.
5. Abra de nuevo el Editor de Script desde el men o la barra de
herramientas.
6. Comente la sentencia select Customers que ya est presente y la
sentencia store que acabamos de aadir.
7. A continuacin, aada una nueva sentencia de carga de Archivos de
Tabla empleando el Asistente para Tablas. Site el archivo

copyright 1996-2005 QlikTech International

Page 82

QlikView Enterprise Script

customers.qvd en la carpeta Datasources y brala.

Figura 29. Asistente para Tablas QVD

8. Compruebe que el Tipo est bien indicado como QVD. Seleccione


Finalizar para cerrar el dilogo.
9. Puede eliminar la sentencia Directory y aadir la etiqueta de la
tabla Customers a la nueva sentencia de carga. Su script tendr
ahora el siguiente aspecto:
Customers:
Load
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
Fax,
Phone,
PostalCode,
StateProvince
FROM Datasources\customers.qvd (qvd);

10. Pulse Aceptar y guarde su archivo. Ejecute el script.


Una vez ms, no notar cambio alguno en la hoja de su aplicacin, ya
que no se cambi ninguna tabla, slo la ubicacin y el tipo desde donde
se lean los datos. En un entorno normal, usted probablemente notara
una gran diferencia en lo que se tarda en leer la tabla Customer, pero un
archivo QVD se lee en QlikView de una manera extremadamente veloz.

copyright 1996-2005 QlikTech International

Page 83

QlikView Enterprise Script

Por supuesto, el inconveniente de esta tcnica es que cuando los datos


de nuestra base de datos Customers cambian, no se registrar en nuestro
documento QlikView. Arreglaremos esto en la siguiente seccin.

18.5. Creacin automtica de un archivo QVD en el


script
Los archivos QVD tambin se pueden crear y mantener de manera
automtica mediante un prefijo buffer. Este prefijo puede utilizarse en
la mayora de sentencias load y select del script. Indica que un archivo
QVD se emplea para enviar el resultado de la sentencia a una
cach/buffer. Existen ciertas limitaciones, siendo la ms notable de ellas
que debe haber una carga de archivo, o una sentencia select en la parte
inferior. El nombre del archivo QVD es un nombre calculado (un hash
de 160 bits de sentencia y otra informacin distintiva, como
hexadecimal) y normalmente se almacena en la carpeta DATOS:
C:\Document and Settings\%user%\Local Settings\Application
Data\QlikTech\QlikView\Buffers

Consejo: Para determinar y/o cambiar dnde debe situar QlikView


los archivos buffer QVD, as como las ubicaciones por defecto de las
carpetas adicionales, puede marcar Configuracin Preferencias de
Usuario Carpetas.
La sintaxis del prefijo es:
buffer [(opcin [,opcin])] load
o
buffer [(opcin [,opcin])] select
donde una opcin es cualquiera de lo siguiente:
incremental permite leer slo parte de un archivo subyacente. El
tamao previo del archivo se almacena en la cabecera XML, en el
archivo QVD. Esto resulta especialmente til en el caso de archivos
de registro. Todos los registros cargados con anterioridad son ledos
desde el archivo QVD mientras que los siguientes registros nuevos
se leen desde la fuente principal, crendose finalmente un archivo
QVD actualizado.
stale (after) amount [ (days | hours) ] Esto se suele emplear
normalmente con fuentes de BD en las que no existe una marca de
tiempo (fecha/hora) en los datos originales. En su lugar, uno
especifica qu antigedad puede tener el pantallazo QVD antes de
que sea reemplazado por una nueva lectura del archivo fuente o de
la base de datos.

copyright 1996-2005 QlikTech International

Page 84

QlikView Enterprise Script

A continuacin revisaremos nuestra carga de datos de la tabla


Customers para emplear el mtodo automtico de generacin de
archivos QVD. Sabemos por nuestro plan de proyecto que los datos de
Customers se actualizan semanalmente, as que solo necesitamos leer en
los datos actualizados cada 7 das. Cambiaremos por tanto el script para
que incluya el prefijo buffer QVD correcto, acorde con nuestra
sentencia Customers select original.
1. Abra nuevamente el Editor de Script desde el men o la barra de
herramientas.
2. Comente la sentencia load de la tabla Customers desde el QVD que
aadimos en la seccin anterior y elimine el comentario de la
sentencia Customers select original.
3. Incluya ahora el prefijo buffer (stale after 7 days) a la sentencia
select de Customers. Su script debiera mostrarse as:
Customers:
buffer (stale after 7 days) SELECT
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
Fax,
Phone,
PostalCode,
StateProvince
FROM Customers;

4. Pulse Aceptar y guarde su archivo. Ejecute el script


Cuando se emplea el prefijo buffer en sentencias load o select, no se
necesitan sentencias explcitas para la lectura. QlikView determinar
hasta qu punto utilizar los datos del archivo QVD o adquirir los datos
mediante la sentencia load o select original.
Independientemente del mtodo QVD empleado, cuando no se aplique
transformacin alguna a los archivos ledos (aparte del renombrado de
campos) se emplear el modo de lectura super-rpido (optimizado).
Puede ver qu modo qvd se utiliz abriendo el cuadro de dilogo
Progreso de Ejecucin del Script.

18.6. Funciones de script de archivos QVD


Hay varias funciones de script nuevas que han sido aadidas para
acceder a los datos que se encuentran en la cabecera XML de un
archivo QVD. Estas funciones se describen en la seccin Funciones de

copyright 1996-2005 QlikTech International

Page 85

QlikView Enterprise Script

Archivo del Manual de Referencia QlikView. Aqu tiene una muestra


de las nuevas funciones disponibles:
QvdCreateTime( nombredearchivo ) Devuelve la marca de tiempo
de la cabecera XML de un archivo QVD si hubiera alguno (si no,
devuelve NULL).
QvdNoOfRecords( nombredearchivo ) Devuelve el nmero de
registros que hay actualmente en un archivo QVD.
QvdNoOfFields( nombredearchivo ) Devuelve el nmero de campos
de un archivo QVD.
QvdFieldName( nombredearchivo ) Devuelve el nombre del campo
nmero field_no, si existe en un archivo QVD (si no, NULL).
QvdTableName( nombredearchivo ) Devuelve el nombre de la tabla
contenida en un archivo QVD.

copyright 1996-2005 QlikTech International

Page 86

QlikView Enterprise Script

19. Ejercicios
1. Modifique el script en su documento QlikView para emplear una carga qvd
buffer en las tablas Orders y Order_Details.
2. Utilice la especificacin stale. Consulte el plan de proyecto para determinar
con qu frecuencia hay que refrescar estas tablas (es decir, con qu
frecuencia se actualizan los datos segn las reglas de la organizacin).

copyright 1996-2005 QlikTech International

Page 87

QlikView Enterprise Script

20. Script avanzado 1 Parte


Dos de los Indicadores de Rendimiento Clave, segn el plan de
proyecto, requieren que nosotros calculemos el cambio anual de Ventas
Netas (NetSales) por Cliente (Customer). Esta seccin nos introduce en
una serie de tcnicas avanzadas de script QlikView, de las cuales
podemos beneficiarnos, por ejemplo, para dar solucin a esto. Por
supuesto, como sucede con la mayora de los problemas, existen
mltiples enfoques para resolver este mismo problema. Este enfoque en
particular nos permite explorar los conceptos de:

Unir
Agregacin
Ordenar por
Previo (acceder a los datos desde el registro previamente
cargado)
Variables

20.1. Unir datos procedentes de mltiples tablas


Si queremos comparar las NetSales (Ventas Netas) de un Customer
(Cliente) entre dos aos pasados, podramos hacerlo simplemente
seleccionando los aos de forma individual en la interfaz de la
aplicacin y comparando los resultados en el grfico, o incluyendo Year
(Ao) como una dimensin en un objeto grfico que calcule NetSales.
Esto pudiera bastar para nuestros requisitos, pero para determinar el
rendimiento global de Customer, crearemos datos adicionales que
describan el rendimiento anual de NetSales por Cliente en el script de
carga. Luego podemos utilizar estos datos para determinar los
aumentos/descensos por Cliente, as como los porcentajes de
variaciones por Cliente en nuestro documento QlikView.
Obtenemos el campo calculado NetSales de la tabla Order_Details,
pero slo para un determinado ao que se suministra en el campo
OrderDate y para un determinado Cliente del campo CustomerID en la
tabla Orders. Para usar dos tablas a la vez, como en este caso, debemos
comenzar combinndolas en una nica tabla. Aqu, Join (Unir) datos
entre tablas puede realizarse contrastando con la base de datos fuente o
empleando un comando Join (Unir) de QlikView. Como ya tenemos los
datos fuente que precisamos cargados en la memoria, usaremos la
sentencia QlikView Join Load con estas dos tablas residentes
(Order_Details y Orders).
Comenzamos aadiendo una nueva pestaa en nuestro script,
denominada Sales Change.
6. Abra el Editor de Script.

copyright 1996-2005 QlikTech International

Page 88

QlikView Enterprise Script

7. Aada una nueva pestaa al script haciendo clic en el icono Aadir


o seleccionando Aadir Pestaa desde el
Nueva Pestaa
elemento de men Pestaa. Denomine la nueva pestaa con el
nombre de Sales Change (Cambios en Ventas).
8. Primero, necesitamos cargar una nueva tabla lgica basada en la
tabla residente Orders. Nombraremos a esta nueva tabla as:
OrdersByYear_Source (PedidosPorAo_Fuente)
/* Sales Change Source load comments */
OrdersByYear_Source:
Load
CustomerID,
OrderID,
Year
RESIDENT
Orders
Where
Year = 2003 or Year = 2004; /*only load 2 years*/

Cargamos los campos CustomerID y Year para agrupar (agregar) los


datos. El campo OrderID se usar para enlazar con la tabla
Orders_Detail cuando enlacemos (Join) con dicha tabla. La clusula
Where limitar los datos a los aos de pedidos 2003 and 2004
exclusivamente.
A continuacin, aadimos los datos de NetSales a esta tabla mediante
un Join Load.
9. Incluya la siguiente sentencia en su script:
Left Join (OrdersByYear_Source) Load
OrderID,
NetSales
RESIDENT
OrderDetails;

Aqu empleamos una carga Left Join porque slo queremos enlazar los
pedidos cargados basados en la clusula Where que especificamos en la
carga anterior. Necesitamos asegurarnos de que el campo OrderID est
incluido en esta carga para que entronque con los registros de la tabla
OrdersByYear_Source con la que estamos enlazando. En QlikView, el
comportamiento de unin establecido por defecto es una unin externa
completa (a full outer join). Por lo tanto, si no hay campos que se
correspondan entre las dos tablas unidas, obtendr un producto
Cartesiano de los registros. Puesto que estamos especificando OrderID
en ambas tablas, y estamos especificando Left, slo los registros que se
correspondan con OrderID incluidos en la tabla OrdersByYear_Source
sern incluidos. Metemos el campo NetSales porque eso es

copyright 1996-2005 QlikTech International

Page 89

QlikView Enterprise Script

precisamente lo que queremos incluir en la tabla OrdersByYear_Source


que estamos creando.
10. Pulse Aceptar y guarde el documento QlikView.
11. Ejecute el script.
12. Aada una nueva hoja al diseo y denomnela Sales Change. Aada
todos los campos de la tabla OrdersByYear_Source. Observe que
todos estos campos son campos clave. Sabra explicar por qu?

20.2. Agregar datos


Para agrupar o agregar datos, emplearemos la clusula Group by
(Agrupar por) de la sentencia Load. En este caso, necesitamos agregar
los datos de la tabla OrdersByYear_Source por CustomerID y Year.
1. Abra el dilogo Editor de Script.
2. Aada la siguiente sentencia en su script:
/* Aggregation by Customer comments */
OrdersByYear:
Load
CustomerID,
Year,
sum(NetSales) as NetSalesByYear
RESIDENT
OrdersByYear_Source
Group by
CustomerID,Year;

Observe la funcin de agregacin sum(NetSales) incluida en esta


sentencia. Esta funcin ser evaluada por encima de todas las
combinaciones posibles de los dems campos den la sentencia Load
(CustomerID y Year). Normalmente, siempre agrupar con Group by
los campos de Load que no sean campos de agregacin. Este campo
recibe un nombre nuevo para diferenciarlo de NetSales. Los campos
CustomerID y Year se emplearn como campos Clave (aunque en la
prxima seccin eliminaremos el campo Year.
Consejo: Para una informacin adicional acerca de las funciones de
agregacin disponibles en el script de carga, consulte por favor el
Manual de Referencia QlikView.
3. Tambin podemos prescindir (Drop) de la tabla temporal que
utilizamos para la unin, dado que no la necesitaremos ms:

copyright 1996-2005 QlikTech International

Page 90

QlikView Enterprise Script

DROP TABLE OrdersByYear_Source;

4. Pulse Aceptar y guarde el documento QlikView.


5. Ejecute el script.
6. Aada el campo NetSalesByYear a la hoja Sales Change. Observe
que si selecciona un CustomerID, generalmente ver dos valores
asociados en este nuevo campo (los dos aos de NetSales agregados
a cada ao).

20.3. Cmo calcular los datos entre registros


Para calcular la variacin anual para cada Cliente (Customer), podemos
cargar estos datos de nuevo, empleando una clusula Order by
(Ordenar por) que ordene los registros adecuadamente, y una funcin
Previous para acceder a los datos desde el registro anterior.
1. Abra el dilogo Editor de Script.
2. Incluya la siguiente sentencia en su script al final de la pestaa Sales
Change:
/* Sales Change by Customer comments */
Sales_Change:
Load
CustomerID,
NetSalesByYear,
If(CustomerID = Previous(CustomerID),
If(NetSalesByYear > Previous(NetSalesByYear),
'UP','DOWN'),null()) as SalesChangeIndicator,
If(CustomerID = Previous(CustomerID),
NetSalesByYear - Previous(NetSalesByYear),
null()) as SalesChangeAmt
RESIDENT
OrdersByYear
Order by
CustomerID,Year;

Primero, observe la clusula Order by al final de la sentencia. Esto


asegurar que los registros se ordenen como es debido: por CustomerID
y Year. El criterio de ordenacin establecido por defecto que emplea
QlikView es ascendente, de modo que el registro del ao 2003 de un
cliente (si es que existe) ser el primero en cargarse.
Ahora observe la primera funcin If empleada para el campo
SalesChangeIndicator. Este es un If anidado, con el formato:
If(<condition>, [If(<condition>, then, else)], else)
La primera <condicin>: CustomerID = Previous (CustomerID)
comparar el valor actual de registro del campo CustomerID con el
registro previo de entrada que no haya sido descartado por una clusula

copyright 1996-2005 QlikTech International

Page 91

QlikView Enterprise Script

where. En otras palabras, esta condicin comprueba si ambos registros


son para el mismo Cliente (Customer). La segunda <condicin>:
NetSalesByYear > Previous(NetSalesByYear) comparar el valor
actual de registro del campo NetSalesByYear con el valor de entrada
previamente registrado para NetSalesByYear. As pues, si el Cliente
(Customer) es el mismo, y el campo NetSalesByYear es mayor en 2004
que en 2003, el resultado en el campo SalesChangeIndicator ser
ARRIBA. Si el CustomerID no es el mismo, a este campo se le
asignar el valor de nulo().
El campo SalesChangeAmount utiliza una funcin If similar, aunque no
es un If anidado. En este caso, si el Cliente (Customer) es el mismo
entre registros, calcular la diferencia entre NetSalesByYear en 2004 y
NetSalesByYear en 2003, si no, el campo aparecer como nulo().
7. Tambin podemos prescindir (Drop) de la tabla temporal que
utilizamos para la unin, dado que no la necesitaremos ms:
DROP TABLE OrdersByYear;

8. Pulse Aceptar y guarde el documento QlikView.


9. Ejecute el script.
10. Aada los camposSalesChangeIndicator y SalesChangeAmount a la
hoja Sales Change. Puede que necesite stablecer el formato
Numrico del campo SalesChangeAmount en 2 decimales mediante
el dilogo Configuracin Propiedades de Documento Nmero.
Tambin observar que el campo NetSalesByYear ya no es relevante,
puesto que ya no conecta con los datos de Year. Incluimos este campo
en nuestra tabla final Sales_Change por claridad (porque tcnicamente
no es algo necesario para QlikView), pero no necesitaremos este campo
una vez que la carga est completa. Podemos por lo tanto prescindir
(Drop) del campo, empleando la sentencia Drop Field.
DROP FIELD NetSalesByYear;

11. Pulse Aceptar y guarde el documento QlikView.


12. Ejecute el script.
El campo NetSalesByYear no debera verse ahora ya como disponible.

20.4. Utilizacin de las variables en el script


Es importante disear sus scripts de carga QlikView de modo que sean
flexibles y fciles de mantener. Una de las maneras de contribuir a

copyright 1996-2005 QlikTech International

Page 92

QlikView Enterprise Script

lograr este objetivo es utilizando variables de script. Las variables


pueden establecerse en una constante numrica o de cadena de texto, o
pueden asignarse a un valor mediante una expresin evaluada. Utilice la
sentencia SET para asignar un valor constante, y la sentencia LET para
asignar un valor a travs de una expresin evaluada. Tambin es una
buena idea nombrar variables de forma nica (exclusivas) para que se
puedan identificar fcilmente en el documento QlikView. Las variables
definidas en el script de carga estn disponibles en la interfaz del
documento.
En este caso, vamos a asignar un valor al ao en curso para una
comparacin de las Ventas Netas (NetSales). Previamente fijamos este
valor de forma invariable en 2004, en el script. Primero, asignaremos un
valor constante a la variable, y a continuacin lo modificaremos para
que se base de una forma dinmica en la fecha del sistema actual.
1. Abra el dilogo Editor de Script.
2. Site el cursor en la pestaa Principal en la parte superior. Aada
una nueva sentencia SET que defina nuestra variable. Por lo
general, debera asignar siempre variables al comienzo del script de
carga, de modo que estn disponibles a lo largo del script.
SET vCurrentFullYear = 2004;

3. Ahora, muvase a la pestaa Sales Change. Necesitamos editar la


clusula Where para la tabla OrdersByYear_Source. Modifique esto
de la siguiente manera:
/* Sales Change Source load comments */
OrdersByYear_Source:
Load
CustomerID,
OrderID,
Year
RESIDENT
Orders
Where
Year = $(vCurrentFullYear) - 1 or Year =
$(vCurrentFullYear); /*only load 2 years*/

QlikView sustituir el valor de vCurrentFullYear en la sentencia de


script cuando ste se ejecute. En nuestro caso, el valor ser 2004.
4. Pulse Aceptar y guarde el documento QlikView.
5. Ejecute el script.
No deberan producirse ms cambios en los valores de campo tras
haberse ejecutado el nuevo script.

copyright 1996-2005 QlikTech International

Page 93

QlikView Enterprise Script

Esto funcionar bien hasta el prximo ao. En lugar de requerir un


cambio de script cada ao, a fin de mantener esta variable, podemos
asignar un valor a la misma empleando el sistema de fecha como
entrada de datos. Como esta asignacin requerir una evaluacin de la
expresin, necesitaremos cambiar nuestra sentencia SET por una LET.
6. Abra el dilogo Editor de Script.
7. Site el cursor en la parte superior de la pestaa Principal.
Modifique la sentencia SET (para que defina nuestra variable
vCurrentFullYear) a una sentencia LET, como se indica:
LET vCurrentFullYear = Year(today()) - 1;

Esta sentencia evaluar el ao de la fecha de hoy (la fecha de ejecucin


del script), y restar 1 para obtener el ao completo actual.
8. Pulse Aceptar y guarde el documento QlikView.
9. Ejecute el script.
No deberan producirse ms cambios en los valores de campo tras
haberse ejecutado el nuevo script.

copyright 1996-2005 QlikTech International

Page 94

QlikView Enterprise Script

21. Ejercicios
En este ejercicio nos vamos a tomar un respiro en cuanto a escritura de script y
vamos a crear una tabla simple utilizando campos de la tabla Sales_Change que
cargamos en la seccin anterior. La tabla simple incorporar grficos QlikView
para suministrar una pista visual que indique la direccin de los cambios (hacia
arriba o hacia abajo).
1. En la hoja de Sales Change (Cambios en las Ventas) que se aadi
recientemente a la interfaz del documento, elija Diseo Nuevo Objeto de
Hoja Grfico. Introduzca Net Sales Change by Customer (o Cambios en
las Ventas por Cliente) como Ttulo de la Ventana. Seleccione Tabla
Simple en el Tipo de Grfico y aada el campo CompanyName como nica
Dimensin. Nombre la dimensin como Customer.
2. Aada una expresin NetSales [sum(NetSales)].
3. Aada otra expresin tal y como se indica a continuacin:
If(SalesChangeIndicator =
'UP','qmem://<bundled>/BuiltIn/arrow_n_g.png',
If(SalesChangeIndicator =
'DOWN','qmem://<bundled>/BuiltIn/arrow_s_r.png',
'qmem://<bundled>/BuiltIn/cross.png'))

Consejo: Utilice la seccin Imgenes del dilogo Editar Expresin para


pegar la funcin qmem QlikView con el grfico ms apropiado.
Etiquete esta expresin con una cadena dinmica, incluyendo los aos de
comparacin de Sales Change. Pista: utilice la variable vCurrentFullYear
que ya creamos en el script de carga.
4. Con un poco de formato, su nuevo objeto de grfico debera mostrar ms o
menos el aspecto que puede ver en la pgina siguiente. Si ve la funcin
qmem en lugar del grfico listado en la columna Sales Change, asegrese
de especificar Imgen como Representacin y Mantener Aspecto como
Formato de Imagen para la expresin Sales Change.

copyright 1996-2005 QlikTech International

Page 95

QlikView Enterprise Script

Figura 30. Grfico Sales Change, una Tabla Simple

copyright 1996-2005 QlikTech International

Page 96

QlikView Enterprise Script

22. Script avanzado 2 Parte


Otra forma de unir datos procedentes de mltiples tablas es empleando
concatenacin.

22.1. Concatenacin

Concatenacin automtica
Si los nombres de campo y el nmero de campos de dos o ms tablas
cargadas son exactamente iguales, QlikView automticamente
concatenar los resultados de las distintas 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 & 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 exactamente
iguales.
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 concatenar las dos tablas.
Esto se realia mediante el prefijo concatenate en el script, el cual
concatena una tabla con otra nombrada o con la tabla lgica creada en
ltimo lugar.
Ejemplo:
load a, b, c from table1.csv;
concatenate load a, c from table2,csv;

copyright 1996-2005 QlikTech International

Page 97

QlikView Enterprise Script

La tabla lgica resultante tiene los campos a, b & 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 provenientes de la tabla 2 es
NULO.
Reglas:
Los nombres de los campos deben ser exactamente iguales.
El orden de los campos listados en cada sentencia es arbitrario.
A menos que se especifique el nombre de una tabla cargada
anteriormente en la sentencia concatenate el prefijo
concatenate utilizar la ltima tabla lgica creada con
anterioridad. El orden de las dos sentencias por tanto no es
arbitrario.

Impedir la concatenacin
Si dos tablas poseen el mismo conjunto de campos y por tanto se
concatenaran normalmente de forma automtica, puede evitar la
concatenacin mediante el prefijo noconcatenate. Esta sentencia
impide la concatenacin con cualquier otra tabla lgica existente que
tenga los mismos campos.
La sintaxis es:
noconcatenate ( loadstatement | selectstatement )
Ejemplo:
Load A,B from file1.csv;
Noconcatenate load A,B from file2.csv;

Ejemplo
En nuestros datos, se nos ha suministrado un conjunto adicional de
empleados nuevos que an no estn contenidos en el archivo
EmpOff.xls. Para incluir estos datos, necesitamos modificar nuestro
script de carga.
1. Abra el Editor de Script.
2. Site el cursor en la pestaa Principal, despus de haber cargado la
tabla Employee necesitamos duplicar los campos que tenemos
actualmente para Employee, as que no usaremos el Asistente para
Tablas en este caso. En su lugar, copie la sentencia load Employee,
y pegue el texto copiado tras el texto original.
3. Dado que el nuevo formato de datos del archivo encaja con nuestro
primer archivo, solo necesitamos cambiar la fuente de los datos.

copyright 1996-2005 QlikTech International

Page 98

QlikView Enterprise Script

Revise la clusula From en la nueva sentencia load para que diga 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 varias Claves Sintticas nuevas, o un nuevo valor
$Table de Employee-1, puede estar seguro de que algo no funcion
correctamente en la concatenacin automtica.
6. Puede ahorrarse bastantes problemas con la concatenacin
automtica empleando el prefijo concatenate en las sentencias
load que sepa que deberan ir concatenadas. Aada el prefijo
concatenate a la nueva sentencia Employee load y especifique la

tabla Employee. Esto siempre concatenar estas dos tablas juntas,


incluso si se realizasen cambios posteriores de forma inadvertida en
una de las cargas pero no en la otra. La nueva sentencia de carga de
Employee comenzara ahora de la siguiente manera:
concatenate (Employee) Load

7. Puede que se haya percatado de que existen escasas diferencias


entre nuestras dos sentencias de Employee load. De hecho, podemos
utilizar otra funcin QlikView que cargue los mismos datos en una
sola sentencia load. Empleando una especificacin comodn en el
nombre de archivo From, QlikView automticamente cargar desde
todos los archivos que coincidan con tal especificacin y
concatenar los datos en una nica tabla lgica para usted. Dado que
ambos de nuestros nombres de archivo comienzan por Emp y
tienen la extensin de archivo .xls, podemos emplear el comodn
Emp*.xls en la clusula From. Si hacemos este cambio, y
comentamos la segunda sentencia de Employee load, el script
debera verse ahora as:
Employee:
Load
EmpID as EmployeeID,
[First Name] & ' ' & [Last Name] as Name,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) as [Employee Hire Year],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\Emp*.xls (biff, embedded labels,
table is [Employee$]);

copyright 1996-2005 QlikTech International

Page 99

QlikView Enterprise Script

REM Employee:
concatenate (Employee) Load
EmpID as EmployeeID,
[First Name] & ' ' & [Last Name] as Name,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) as [Employee Hire Year],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\Employees_New.xls (biff, embedded
labels, table is [Employee$]);

8. Guarde el script una vez revisado, as como el documento QlikView. A


continuacin ejecute el script y verifique que los datos de Employee no
hayan cambiado.
9. Como ejercicio opcional, puede que quiera tratar de determinar por qu
a los empleados listados en el archivo Employees_New.xls no se les
asign direccin de correo electrnico (el campo e-mail es nulo para
estos empleados). Qu necesita para corregir este problema?

copyright 1996-2005 QlikTech International

Page 100

QlikView Enterprise Script

23. Seguridad
La seguridad informtica es un elemento importante en este curso. Los
documentos QlikView a menudo contienen informacin confidencial y
es esencial saber cmo impedir el acceso a usuarios no autorizados.

23.1. Control de accesso


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 puede proporcionar alguna proteccin intrnseca, ya que no es
posible abrir un archivo si no dispone de la aplicacin QlikView.
Tambin es posible incluir niveles de acceso en el script de carga.

23.2. Niveles de acceso


A cada usuario del documento QlikView se le debe asignar un nivel de
acceso: ADMINISTRADOR o USUARIO. Un usuario con privilegios
de ADMINISTRADOR puede modificar cualquier elemento del
documento (sujeto, claro est, a las limitaciones del producto), mientras
que una persona con privilegios de USUARIO posee un acceso
restringido. Un usuario de QlikView Analyzer+ se ver restringido de
manera automtica a los privilegios de USUARIO, independientemente
de las configuraciones de nivel de acceso. Si no se asigna nivel alguno a
un usuario en la seccin de acceso, el usuario no podr abrir el
documento QlikView.
Para mayor claridad, puede ser til emplar otros niveles de acceso, por
ejemplo NINGUNO. Este siempre recibir el tratamiento de ningn
acceso.

23.3. La base de datos de control de acceso


Todo el control de acceso est gestionado por medio de archivos de
texto, bases de datos o clusulas inline de la misma manera que los
datos se manejan normalmente en QlikView. Las tablas se cargan de la
forma habitual, pero en una seccin de acceso que se inicia en el script
por medio de la sentencia section access.
Consejo: Tenga presente que todos los nombres de campo y valores se
convertirn automticamente a maysculas en la seccin de acceso. Esto
debe ser tenido en cuenta cuando se empleen sentencias de carga residentes
o precedentes dentro de la seccin de acceso.

copyright 1996-2005 QlikTech International

Page 101

QlikView Enterprise Script

Si dicha seccin de acceso se declara en el script de carga, la parte del


script que carga los datos estndar debe ir precedida por la sentencia
section application. Hay una serie de 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 ejemplo
GRUPO o DEPARTAMENTO, para facilitar la reduccin dinmica de
datos o la administracin, pero QlikView no utiliza los campos extra
para limitar el acceso al documento. En la seccin de acceso se pueden
cargar ninguna, todas o cualquier combinacin de los campos de
seguridad. Si no se carga ninguno de los campos de seguridad, entonces
todos los usuarios tendrn derechos de ADMINISTRADOR.
Por lo tanto no es necesario emplear un IDdeUsuario se puede hacer
una comprobacin en SERIAL (N de Serie) nicamente, por ejemplo.
Este hecho puede ser aprovechado para las recargas de lneas de
comandos de documentos de acceso restringido.
ACCESS Un campo que define el acceso que debiera tener el
usuario.
USERID Un campo con un ID de usuario que tiene el
privilegio especificado en el campo ACCESS.
PASSWORD Un campo que debiera contener una contrasea
aceptada.
SERIAL Un campo que debiera contener un nmero
correspondiente al nmero de serie QlikView. Ejemplo: 4900
2394 7113 7304
NTNAME Un campo que debiera contener una cadena
correspondiente a un nombre de usuario o nombre de grupo de
un Dominio Windows NT.
NTDOMAINSID Un campo que debiera contener una cadena
que se corresponda con un SID de Dominio deWindows NT.
Ejemplo: S-1-5-21-125976590-467238106-1092489882
NTSID Un campo que debiera contener un SID Windows NT.
Ejemplo: S-1-5-21-125976590-467238106-1092489882-1378
QlikView comparar el nmero de serie de QlikView con el archivo en
SERIE, el nombre de usuario o de grupo deWindows NT con
NTNAME, el SID de Dominio Windows NT con NTDOMAINSID y el
SID de Windows NT con NTSID. Adems pedir el ID de usuario y la
contrasea y comparar stos con los campos USERID y PASSWORD.
Si la combinacin encontrada de ID de usuario, contrasea y
propiedades del entorno se encuentra tambin en la tabla de la Seccin
de Acceso, entonces el documento se abre con el correspondiente nivel
de acceso. Si no, QlikView denegar el acceso de usuario al documento.

copyright 1996-2005 QlikTech International

Page 102

QlikView Enterprise Script

Si el ID de usuario y la contrasea no se introducen correctamente en


tres intentos, habr que repetir de nuevo todo el procedimiento de
entrada registrada completo.
En dicho procedimiento de entrada registrada, QlikView comprobar
primeramente SERIAL, NTNAME, NTDOMAINSID, y NTSID para
ver si esta informacin es suficiente para garantizar al usuario acceso al
documento. Si es as, QlikView abrir el documento sin pedir USERID
y PASSWORD. Si slo se cargan algunos de los campos de acceso, se
emplearn los requisitos anteriores que se consideren ms apropiados.
Todos los campos listados en las sentencias Load o Select en la
Seccin de Acceso deben estar escritas en MAYSCULAS. Cualquier
nombre de campo que contenga minsculas ser convertido a
maysculas en la base de datos antes de ser ledo por la sentencia Load
o Select. Sin embargo, los campos USERID y PASSWORD
introducidos por el usuario final cuando abre los documentos QlikView
no son sensibles a maysculas/minsculas.

23.4. Restricciones de acceso heredadas


Una sentencia binary har que la restriccin de acceso sea heredada por
el nuevo documento QlikView que contiene la sentencia binary. Una
persona con derechos de ADMIN a este nuevo documento puede
modificar los derechos de acceso del nuevo documento aadiendo una
nueva seccin de acceso. Una persona con privilegios de USUARIO
puede ejecutar el script y modificar el script (aadiendo sus propios
datos al archivo cargado con la sentencia binary). Una persona con
derechos de USUARIO no puede cambiar los derechos de acceso. Esto
hace posible que un administrador de la base de datos pueda controlar el
acceso de los usuarios, incluyendo el de aquellos que comienzan con
una sentencia binary.

23.5. Seccin de acceso en el script


Ahora incluiremos las lneas necesarias en nuestro script para
comprobar los derechos de acceso de ciertos usuarios. Por lo general es
una buena prctica situar el cdigo de la seccin de acceso en el rea de
script oculto.

Script Oculto
Un script oculto es un rea del script de cdigo que est protegida por
contrasea. Siempre se ejecuta antes del script estndar durante una
recarga.

copyright 1996-2005 QlikTech International

Page 103

QlikView Enterprise Script

Cuando elija Editor de Script oculto del men Archivo en el dilogo


Editor de Script se le pedir que introduzca una contrasea, la cual se
requerir de nuevo antes de darle acceso al script oculto. Si es la
primera vez que accede al script oculto de un documento (creando con
ello uno, por tanto), tendr que confirmar la nueva contrasea. Tras
esto, la pestaa de Script oculto aparecer 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 los scripts
ocultos, si elige utilizarlos:
Si emplea un script oculto, el comando binary no puede
utilizarse en el script normal, ya que debe ser la primera
sentencia ejecutada en un script de documento.
Las tablas generadas por la parte oculta del script no se
representarn por nombre 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 utiliza. Tenga en cuenta que en la
versin 7 de QlikView hay disponible una anulacin del
automatismo de Seguridad de Documento que permite 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, dicha
seccin no se permitir en el script normal ni en un script que
comience con una carga binaria del archivo QlikView que
contenga el script oculto.
Adicin de la Seccin de Acceso
A continuacin aadiremos una seccin de acceso bsica en el rea de
script oculto de nuestro documento QlikView.
1. Abra el Editor de Script desde el men o la barra de herramientas.
2. Aada un script oculto seleccionando Archivo Editor de Script
oculto Use qlikview como contrasea para el script oculto. A
continuacin, incluya las siguientes lneas de script:
/* SECURITY section access comments */
Section Access;
Access01:
Load * Inline
[USERID, PASSWORD, ACCESS
Demo, User, User
Demo, Admin, Admin];
Section Application;

copyright 1996-2005 QlikTech International

Page 104

QlikView Enterprise Script

Consejo: ES NECESARIO QUE INCLUYA LA SENTENCIA


Section Application TRAS LA CARGA DE ACCESO PARA
PRODUCIR UN DOCUMENTO UTILIZABLE.

Esta simple comprobacin de acceso requerir que el usuario se


identifique cuando abra un documento.
La Demo de USERID y la CONTRASEA de Usuario impedirn que
el usuario acceda al script de carga si tal requisito de seguridad
estuviera contemplado en las Propiedades de Documento. Un usuario
perteneciente al grupo USER tampoco tendr acceso a la pestaa
Seguridad de los dilogos Propiedades de Documento y Propiedades de
Hoja. Tambin tenga en cuenta que si utiliza QlikView Analyzer+ ste
se abrir automticamente en modo de USUARIO, independientemente
de cules sean las configuraciones de la Seccin de Acceso.
La Demo de USERID junto con la CONTRASEA de Admin otorgarn
al usuario los derechos de realizacin de todo tipo de cambios en el
documento, en QlikView Enterprise.

Consejo: SE RECOMIENDA ENCARECIDAMENTE GUARDAR


UN DOCUMENTO CON SECCIN DE ACCESO COMO ARCHIVO
NUEVO, CON UN NUEVO NOMBRE, TRAS EJECUTAR EL
SCRIPT, PERO ANTES DE INTENTAR CERRAR Y VOLVER A
ABRIR EL DOCUMENTO QlikView. SI TIENE ERRORES
LGICOS EN LA SECCIN DE ACCESO, PUEDE QUE YA NO
SEA POSIBLE ABRIR EL DOCUMENTO DE NUEVO UNA VEZ
QUE HAYA SIDO CARGADO.
3. Pulse Aceptar.
4. Guarde su archivo, pero NO EJECUTE AN EL SCRIPT.
5. En Guardar Como elija un nuevo nombre de archivo (puede aadir
_seguro al nombre que ya tiene) y a continuacin ejecute el script.
6. Salga de QlikView y abra su documento recin renombrado. Ahora
ver el siguiente cuadro de dilogo, en el que puede introducir su ID
de Usuario y contrasea.

copyright 1996-2005 QlikTech International

Page 105

QlikView Enterprise Script

Figura 31. Cuadro de dilogo en el que se introduce ID de usuario

23.6. Control de acceso para ciertos comandos


Los parmetros en las pestaas de Seguridad de los dilogos
Propiedades de Documento y Propiedades de Hoja en el men
Configuraciones permiten impedir el acceso a los usuarios, para que no
puedan ejecutar determinados comandos de men ni modificar el
diseo. Para poder utilizar estos parmetros de configuracin como
medidas de seguridad, es importante no obstante, que los usuarios slo
tengan privilegios de USUARIO. Todo el que tenga privilegios de
ADMIN puede cambiar las configuraciones de seguridad en cualquier
momento.

23.7. Ms control de acceso


Es fcil incrementar el control de la seguridad frente a aquellos usuarios
que creemos que requerirn acceso a un documento especfico.
Aadiendo un campo a la tabla inline anteriormente creada, podemos
conectarla con una nueva tabla de dos columnas, en la que
especificaremos los nmeros de serie que s tienen acceso al
documento. De esta manera, restringimos an ms el acceso a un
documento.
La nueva tabla de dos columnas se crear en el Bloc de notas, o en un
editor de texto similar, y se llamar Access. Guardaremoss este nuevo
archivo de texto delimitado por tabuladores en el directorio
DataSources.
Procederemos de la siguiente manera:
1. Aada otro campo llamado COMPUTER a la tabla inline Access01
que ya tenamos. Incluya uno o dos identificadores para ordenadores

copyright 1996-2005 QlikTech International

Page 106

QlikView Enterprise Script

en el presente curso (estos actuarn como campos conectados) tal


como se indica a continuacin:
/* SECURITY section access comments */
Section Access;
Access01:
Load * Inline
[USERID, PASSWORD, ACCESS, COMPUTER
Demo, User, User, Course1
Demo, Admin, Admin, Course2];
Section Application;

2. Abra el bloc de notas, u otro editor de texto similar y cree una


columna de dos tablas con los campos COMPUTER y SERIAL.
Incluya su propio nmero de serie como un valor de campo;
encontrar este nmero en el men Acerca de QlikView en QlikView.
Aqu tiene un ejemplo:
COMPUTER
Course1
Course2

SERIAL
2300 2394 7111 8000
2300 2394 7111 8001

3. Guarde este archivo como Access02.txt.


Como se puede ver, slo dos nmeros de licencia tienen acceso al
documento que hemos creado, uno con derechos de USUARIO y
otro con privilegios de ADMIN. Observe tambin que estamos
aadiendo restricciones a los USERIDs (Demo) existentes, y no
reemplazando las restricciones actuales.
4. Abra el script de carga y haga clic en el botn Ficheros Planos.
Cargue la tabla Access02.txt recin creada tras la tabla inline, y
antes de la sentencia section application, como aqu se indica:
Access02:
Load
COMPUTER,
SERIAL
FROM Datasources\Access02.txt (ansi, txt,
delimiter is '\t', embedded labels);
Section Application;

5. Pulse Aceptar.
6. Guarde su archivo y a continuacin ejecute el script. Si esto
funciona, guarde su archivo otra vez (quizs prefiera elegir Guardar
como aqu de nuevo) y salga (Exit) de QlikView.

copyright 1996-2005 QlikTech International

Page 107

QlikView Enterprise Script

7. Abra nuevamente el programa e introduzca su USERID y


CONTRASEA.
Dando por sentado que no ha introducido su nmero de serie en ambos
registros en el archivo Access02.txt, slo puede acceder como USER o
ADMIN. Sera fcil aadir una tercera lnea a las tablas de control de
acceso que siempre otorgara derechos de USUARIO a cada nmero de
serie, dando por hecho que se presenta un ID de Usuario y Contrasea
vlidos. Para hacer esto, podemos aadir un tercer ordenador (por ej.
Cursoe3) e introducir * como valor en el campo SERIAL.

Otras consideraciones de lneas de comando desatendidas


Para crear un acceso de seguridad para un proceso de recarga de lneas
de comando de no-intervencin, se tendra que introducir el SERIAL
registrado a nombre del usuario asignado al proceso de recarga en el
ordenador de recarga. Luego se conecta esto a USERID y
CONTRASEA con * como valores (aqu * representa todos los valores
posibles que evitaran que se solicite USERID y CONTRASEA).
Tambin debera fijar el campo ACCESS a Admin para este tipo de
usuario.
Si aade el siguiente registro a la sentencia Load Inline de Access01,
esto permitir que el ordenador Curso2 se pueda utilizar para recargas
no atendidas.
*,*,Admin,Course2]

23.8. Restricciones de acceso en valores de campo


seleccionados
El acceso asegurado de QlikView suministra una funcionalidad que
impide a los usuarios ver partes de los datos de uno o varios
documentos. Esta funcionalidad se desarroll originalmente para
QlikView Server, pero tambin se puede usar en QlikView, con una
serie de consideraciones.
La seleccin de valores que se habrn de mostrar u ocultar se controla
teniendo uno o ms campos con los mismos nombres en la seccin de
acceso y en la seccin de aplicacin. Cuando el usuario se ha
introducido, una vez registrado, QlikView copia los valores
seleccionados (en mayscula) de la seccin de acceso a campos de la
seccin de aplicacin con el mismo nombre. QlikView ocultar al
usuario, de manera permanente, todos los datos que hayan sido
excluidos mediante este proceso.

copyright 1996-2005 QlikTech International

Page 108

QlikView Enterprise Script

Todos los nombres de campo y valores empleados para conectar


seccin de acceso y seccin de aplicacin deben ir escritos en
maysculas, ya que todos los nombres y valores de campo son
convertidos a maysculas por defecto en la seccin de acceso.
Para poder utilizar 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 ser comprobada. Si esta caracterstica
se emplea en documentos que van a ser distribuidos por otros medios
diferentes a los de QlikView Server, la opcin Carga Binaria no
permitida, en la misma pgina, debe estar seleccionada, para mantener
la integridad de la proteccin de los datos.
Consejo: Hay una cuestin ya conocida en la Reduccin de Datos
Dinmica de documentos QlikView en la que una ejecucin de script
ejecutada por completo ignorar los parmetros de configuracin de la
reduccin de datos dinmica, permitiendo a los usuarios ver todos los
datos. Para mitigar este riesgo de seguridad, la versin 7 de QlikView
prohibir las recargas en documentos que tengan activa la reduccin de
datos dinmica.

Sentencias de control de script


Ahora nos gustara explicar un mtodo diferente para determinar el
acceso de seguridad a un documento empleando el campo SalesPerson,
junto con reduccin de datos. Utilizaremos el concepto de sentencias de
control de script para permitir al administrador de este documento elegir
qu mtodo de seguridad de acceso emplear para utilizarlo con la
recarga de datos. Para ello, fijamos una variable para especificar el
mtodo y luego referenciamos dicha variable en un control de script IF
THEN ELSE. A diferencia de la funcin If, utilizada normalmente
en una sentencia Load o una expresin de grfico, el control de script IF
THEN ELSE permite la inclusin de una o ms sentencias de
script en los parmetros de control.
La sintaxis del control IF THEN ELSE es la siguiente:
if condition then
[ statements ]
{ elseif condition then
[ statements ] }
[ else
[ statements ] ]
end if

dnde
condition es una expresin lgica que puede ser evaluada
comoverdadera o falsa.

copyright 1996-2005 QlikTech International

Page 109

QlikView Enterprise Script

statements es cualquier grupo de una o ms sentencias de script


QlikView.
Consejo: Dado que la sentencia if..then es una sentencia de control,
cada una de sus cuatro clusulas posibles (if..then, elseif..then, else y end
if) no deben cruzar una lnea fronteriza: deben ir terminadas por un punto y
coma o un final de lnea.
1. Abra el script de carga y el Editor de Script Oculto (recuerde que
debe tener privilegios de Administrador para poder editar el script
oculto). Verifique que su cursor est situado en la parte superior de
la pestaa de Script Oculto.
2. Primeramente, aadimos la variable de control de script y las
sentencias de control de script. Su pestaa de Script Oculto debera
mostrar ahora el siguiente aspecto (las nuevas sentencias se han
resaltado en amarillo):
/* SECURITY section access comments */
/* Use for BASIC security access */
SET vSecureType = 'BASIC';
/* Comment following statement for BASIC security
access */
/* Use for SalesPerson and Data Reduction */
//SET vSecureType = 'DATA';
Section Access;
IF vSecureType = 'BASIC' THEN
Access01:
Load * Inline
[USERID, PASSWORD, ACCESS, COMPUTER
Demo, User, User, Course1
Demo, Admin, Admin, Course2
*,*,Admin,Course2];
Access02:
Load
COMPUTER,
SERIAL
FROM Datasources\Access02.txt (ansi, txt, delimiter
is '\t', embedded labels);
Section Application;
ELSE

/* 'DATA' Security Access */

END IF

NO hemos aadido sentencia alguna en la parte de control a los accesos


de seguridad de los DATOS an, as que necesitamos asegurarnos

copyright 1996-2005 QlikTech International

Page 110

QlikView Enterprise Script

primero de que la sentencia que fija el vSecureType = 'DATA' sea


comentada.
3. Pulse Aceptar.
4. Guarde su archivo y ejecute el script. Si esto funciona, guarde de
nuevo el archivo (puede que desee pulsar Guardar Como
nuevamente) y salga (Exit) de QlikView.
5. Abra de nuevo el programa e introduzca su USERID y
PASSWORD.
Nada debera haber cambiado todava en lo que se refiere a su
documento.
Ahora, sin embargo, implementaremos el segundo mtodo utilizando el
campo SalesPerson y reduccin 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 las ventas. No obstante, no todos los agentes de ventas
tendrn acceso a todos los datos que son propiedad de sus colegas. Por
lo tanto, incluiremos una limitacin en el script, que asegure que cada
persona tiene acceso nica y exclusivamente a sus propios datos.
Para ello emplearemos dos archivos de texto. El primero establecer los
campos de la seccin de acceso para 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 est autorizado a ver
una vez que abran el documento QlikView. Ambos archivos de texto se
localizan en el directorio Datasources.
Tambin hemos de tener en cuenta que necesitamos un administrador
que gestione el documento. Uno de los agentes de ventas es tambin el
Director de Marketing de la empresa, por lo que ste ser el ms
indicado para tener acceso total a todo el documento y as poder evaluar
el rendimiento de cada agente de ventas. Tambin tenemos un
Coordinador de Ventas en Lund (Suecia) que debe tener acceso a los
datos de todos los agentes de ventas. Este acceso se puede implementar
mediante el uso de un valor nulo, especificado en el campo de enlace
cuando se carga en la seccin de acceso. Podra utilizar el valor *
para este campo, como ya lo utilizamos antes para los campos de
USERID y PASSWORD, pero generalmente es preferible usar nulo
para los campos de conexin, puesto que ello permitir el acceso a
TODOS los datos, independientemente de si tiene una conexin lgica
con el campo conector.

copyright 1996-2005 QlikTech International

Page 111

QlikView Enterprise Script

1. Abra el script de carga y el Editor de Script Oculto (recuerde que


debe tener privilegios de Administrador para poder editar el script
oculto). Verifique que su cursor est situado sobre la pestaa Script
Oculto.
2. Ahora, aadiremos las sentencias en la parte de acceso de seguridad
a los DATOS. Aqu, incluimos sentencias Load para los dos
achivos de texto, separados por la sentencia Section Application.
3. El primer archivo de texto que se habr de cargar es
SalesSecurity.txt, situado en el directorio Datasources. Denomine
esta tabla lgica como Access01.
4. Luego aada la sentencia Section Application.
5. A continuacin, cree una sentencia de carga para el archivo
SalesInitials.txt, situado en el directorio Datasources. Es una
buena prctica utilizar la funcin Superior con el campo conector
(SP), ya que el valor debe hallarse en maysculas para coincidir con
el valor de la seccin de acceso. Las nuevas sentencias deberan
verse as:
ELSE

/* 'DATA' Security 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);
END IF

6. Pulse Aceptar.
7. Guarde su archivo y ejecute el script. Si esto funciona, guarde de
nuevo el archivo (Elija Guardar Como si lo desea de nuevo) y
abandone (Exit) QlikView.
8. Abra de nuevo el programa e introduzca James como USERID.

copyright 1996-2005 QlikTech International

Page 112

QlikView Enterprise Script

Debera poder ver todos los datos. A continuacin cierre QlikView y


entre registrndose como Leif. Observe que puede ver los datos para
este usuario, as como tambin los del agente de ventas Tom Lindwall.

copyright 1996-2005 QlikTech International

Page 113

QlikView Enterprise Script

24. Ejercicios
En este ejercicio, nos aseguraremos de que es posible realizar una recarga de lneas
de comando desatendida, independientemente del mtodo de seguridad de acceso
empleado en el script.
1. Haga los cambios que considere necesarios en el script para permitir que se
abra el nmero de SERIE registrado en la computadora Curso2, ejecute el
script y guarde este documento QlikView, sin tener en consideracin si el
mtodo de seguridad empleado es el BSICO o el de DATOS.

copyright 1996-2005 QlikTech International

Page 114

QlikView Enterprise Script

25. Depuracin
Cuando se realizan cambios en el script, a veces es difcil encontrar los
errores. QlikView cuenta con un depurador de errores de script que le
ayudar a identificar los errores cometidos en su script.
Ejecutar el script en el depurador hace mucho ms fcil la localizacin
de errores. Tambin puede ahorrar mucho tiempo. En el depurador,
puede estudiar cada sentencia y comprobar los valores de las variables
mientras el script se est ejecutando.
El script se muestra en la ventana, en la mitad superior del dilogo. Un
cursor amarillo indica hasta dnde ha llegado la ejecucin. Se pueden
insertar Puntos de Interrupcin haciendo clic en un nmero de lnea y
eliminarlos haciendo clic de nuevo sobre ellos. Todos los puntos de
interrupcin pueden eliminarse haciendo clic en el botn Borrar.
Cuando se encuentra un nuevo punto de interrupcin, la ejecucin se
detiene hasta que el comando ordene reanudar.
La actual sentencia de script se muestra en la ventana, en la parte
intermedia del dilogo.
Los cdigos de estado y mensajes de error se muestran en la ventana
inferior izquierda. Esta es esencialmente la misma informacin que se
muestra en la ventana de Progreso de Ejecucin del Script cuando el
script se ejecuta sin el depurador.
La ventana inferior a mano derecha muestra todas las variables y sus
valores. Los valores que han sido modificados, aparecen en rojo.
El script se puede ejecutar en tres modos diferentes:
Ejecutar Este es el modo normal de ejecucin de script. El script
se ejecuta hasta el final, o hasta que se encuentra con un
punto de interrupcin.
Animar

El script se ejecuta como se describe arriba, pero con


una breve pausa tras cada sentencia. Esto le permite
seguir la ejecucin con ms cuidado.

Paso a
paso

El script se ejecuta sentencia por sentencia, una cada


vez.

Para ejecutar el script completo, utilice uno de los mtodos siguientes:

copyright 1996-2005 QlikTech International

Page 115

QlikView Enterprise Script

Seleccione Carga limitada e introduzca un nmero en la ventana


inferior. El nmero es el mayor nmero de registros aceptados para
cada sentencia load y select. Esta es una manera muy prctica de
limitar el tiempo de ejecucin cuando un script se est ejecutando con
datos en vivo.
Haga clic en Finalizar Aqu para salir del depurador. Los datos que se
hayan cargado se conservarn en QlikView.
Haga clic en Cancelar para detener la ejecucin y descartar los datos
cargados.

Figura 32. El dilogo Depurador

Ahora vamos a tratar de ejecutar el depurador en nuestro script.


1. Abra el dilogo Editor de Script desde el men o la barra de
herramientas.
2. Haga clic en el icono Depurar
abrir el dilogo Depurador.

de la barra de herramientas para

3. Inserte puntosde interrupcin antes de SQL Select en las tablas


Products, Categories y antes de Load en la tabla Sales_Person,
haciendo clic en el nmero de lnea en la ventana de script.
Los puntos de insercin se vern como puntos rojos.
4. Observe lo que sucede cuando pulsa el botn Animar.

copyright 1996-2005 QlikTech International

Page 116

QlikView Enterprise Script

Ejecutar el script en los diversos modos disponibles en el depurador


es tan sencillo como pulsar Ejecutar en el script. Cuando el script ha
sido cargado, debe hacer clic en Cerrar para acceder al dilogo
Seleccionar Campos.
5. Abra de nuevo el depurador y pulse Ejecutar el script con una Carga
limitada de 10 registros. Esto no slo puede ser una herramienta
muy til para identificar errores y validar cambios, sino que tambin
puede ser una manera de crear plantillas para aplicaciones con un
pequeo nmero de registros en ellos.

25.1. El archivo de registro de ejecucin de script


Al principio del curso, fijamos la seleccin de Generar Archivo log en
Propiedades de Documento. Ahora vamos a echar un visazo al archivo
que se genera durante la ejecucin de script.
El archivo log (o archivo de registro) tendr el mismo nombre que su
documento QlikView, pero con un apndice .qvw aadido a l, y una
extensin .log (por ej. QVE_Course.qvw.log). El archivo se ubicar en
el mismo directorio que el documento QlikView que est siendo
ejecutado.
El archivo log generalmente contiene todas las sentencias de script
ejecutadas, sin las lneas y comentarios entre corchetes (se muestran
sentencias REM). Incluye tambin la siguiente informacin:
Marca de tiempo (Fecha /hora) de inicio de ejecucin
Marca de tiempo (Fecha /hora) de final de ejecucin
El nmero de campos y el nombre de cada campo identificado en
una sentencia load o select, junto con el nmero de registros
incluidos en dicha load o select.
El nmero de lneas del script
La versin de QlikView que ejecuta el script
Cualquier error de ejecucin de script que pueda haberse producido
Cualquier Clave Sinttica que se cree se listar al final del archivo
log.
Vea si puede localizar el archivo de registro (log) desde su aplicacin, y
bralo utilizando el Bloc de notas u otra herramienta similar.

copyright 1996-2005 QlikTech International

Page 117

QlikView Enterprise Script

25.2. Informes de errores en QlikView


Si descubre un error en QlikView, le rogamos lo comunique a QlikTech
o a un Partner certificado por QlikTech. Tambin es fundamental que
suministre cuanta ms informacin le sea posible para describir el error,
y, si es posible, que los desarrolladores de QlikTech puedan reproducir
el comportamiento. Hay varias cosas que puede hacer para convertir el
descubrimiento de un error en un proceso til y eficaz.
1. Proporcione una descripcin clara y detallada del problema,
incluyendo las acciones que le llevaron hasta el error y los mensajes
de error que se dispararon, si es que los hubo.
2. Si ello fuera posible, suministre una muestra de un documento
QlikView que pueda emplearse para demostrar el error; esto sera de
gran utilidad en la resolucin del problema.
3. Si el error se produjo durante una recarga, incluya el archivo de
registro (log) QlikView junto con el informe de error. El archivo de
registro se describe en la seccin precedente de este curso.
4. Siempre debera crear una hoja de Sistema en sus documentos
QlikView, la cual le ayudar a determinar la integridad de su
estructura de datos. Esta hoja se puede ocultar fcilmente a los
usuarios en una aplicacin de produccin mediante el uso del
parmetro Mostrar Hoja en Propiedades de Hoja.
5. Todo informe de error debiera incluir la informacin de Informacin
Adicional del Documento. Estos datos contienen informacin muy
valiosa acerca de la computadora que experiment el problema, la
versin de QlikView en ejecucin, y los parmetros del documento
QlikView. Est disponible desde la Ayuda de men, o pulsando
Ctrl-Mays-Q. Utilice el botn Copiar al Portapapeles para copiar
esta informacin y pegarla en su correo electrnico, o en un
documento de texto.

copyright 1996-2005 QlikTech International

Page 118

QlikView Enterprise Script

Figura 33. Informacin Adicional del Documento

25.3. Materiales de referencia QlikView


Hay varios materiales de referencia QlikView a su disposicin.
Muchos ya se han ido mencionando a lo largo de este curso. Es
importante familiarizarse con estas herramientas segn avanzan sus
conocimientos y habilidades en la creacin de documentos QlikView
que puedan resultar tiles y eficaces.
1. El Manual de Referencia QlikView: Los documentos del
Manual de Referencia se instalan en su ordenador como parte del
proceso habitual de instalacin de QlikView. Estos incluyen una
gua o Tutorial para usuarios inexpertos, junto con guas de
referencia ms detallada para desarrollo de script y diseo.
Pngase en contacto con QlikTech o su proveedor QlikView
certificado habitual si desea solicitar ms manuales en copia
impresa.
2. Sistema de Ayuda QlikView: El subsistema de Ayuda est
disponible directamente desde su aplicacin, en la mayora de
dilogos y mens. Incluye unos contenidos generales, un ndice
con la informacin disponible y una funcionalidad completa de
bsqueda de texto. Si se invoca desde un dilogo, abrir
informacin relacionada con el contexto.
3. Documentos de ejemplo en QlikView: Estos documentos se
han incluido a modo de muestra porque pueden ser una fuente
muy valiosa de informacin que muestre mtodos vlidos de

copyright 1996-2005 QlikTech International

Page 119

QlikView Enterprise Script

desarrollo de documentos QlikView. Pueden resultar de gran


utilidad si se navega por ellos en busca de ideas acerca de lo que
se puede lograr con QlikView.
4. Material formativo de QlikView: El presente curso, junto con
otros cursos ofrecidos por QlikTech, puede emplearse tambin
como gua de referencia de gran valor, a la que siempre se puede
recurrir una vez que la formacin haya finalizado.

copyright 1996-2005 QlikTech International

Page 120

QlikView Enterprise Script

26. Apndice 1: Tipos de datos en


QlikView
QlikView puede manejar cadenas de texto, nmeros, fechas, horas,
marcas de tiempo y monedas. Estos pueden ordenarse, mostrarse en
diversos formatos y emplearse en los clculos. Esto significa que las
fechas, horas, marcas de tiempo, etc. pueden ser sumadas y restadas. El
presente captulo se suministra como informacin de referencia y de
consulta respecto a cmo maneja QlikView los tipos de datos.

26.1. Almacenamiento de datos en QlikView


Para comprender cmo interpreta QlikView los formatos de datos y
nmeros, primero debe conocer cmo se almacenan los datos
internamente en la aplicacin. Todos los datos cargados en QlikView se
almacenan de dos maneras: como cadenas de texto o como nmeros.
1.

La cadena de texto siempre se utiliza. Es la que se muestra en los


cuadros de lista y en otros objetos de hoja. En el formateado de
datos de los cuadros de lista (formato de nmeros) slo la cadena
de texto se ve afectada.

2.

Los nmeros slo se emplean cuando los datos pueden ser


interpretados como un nmero vlido. Se pueden emplear todas las
formas posibles de clculos numricos y ordenacin.

Si varios conjuntos de datos con un mismo valor numrico se cargan en


el mismo campo, sern tratados como mltiples ocurrencias del mismo
valor y se les asignar conjuntamente la primera cadena de texto
encontrada. Si los nmeros 1.0, 1 y 1.000 se cargan por este orden,
recibirn el valor numrico 1,y la cadena de texto original 1.0.

26.2. Datos que contienen informacin sobre tipos


de datos
Los campos que contienen nmeros de un determinado tipo de datos, en
una base de datos cargada mediante ODBC, se manejarn segn su tipo
de datos correspondiente en QlikView.
QlikView recuerda el formato original de los campos, incluso si es
modificado en uno de los dilogos de formato de nmeros. Siempre es
posible volver a restaurar el formato original haciendo clic con el ratn
en el botn Configuracin predeterminada para la entrada en el dilogo
de formato de nmeros.

copyright 1996-2005 QlikTech International

Page 121

QlikView Enterprise Script

QlikView utiliza los siguientes formatos estndar de datos para cada


tipo de nmero:
Enteros, nmeros de punto flotante: formato numrico estndar
Dinero: formato estndar para unidades monetarias
Hora, fecha, marca de tiempo: estndar ISO
Las configuraciones estndar para nmeros y monedas se definen
mediante variables, las cuales se interpretan en el script, o a travs de
parmetros de configuracin de los sistema operativos (Panel de
Control).

26.3. Datos sin informacin sobre el tipo de datos


El manejo de datos sin informacin especfica de formato (por ejemplo
datos de archivos de texto, o datos ODBC con un formato general) son
ms complicados. El resultado final depende al menos de seis factores.
1. El formato de los datos en la base de datos
2. Las configuraciones del sistema operativo en cuanto a nmeros,
hora, fecha, etc. (Panel de Control)
3. La utilizacin de variables para su interpretacin en el script
4. El empleo de funciones de interpretacin en el script
5. El uso de funciones de formateado en el script
6. La utilizacin de dilogos de formato numrico en el documento
QlikView trata de interpretar los datos de entrada como nmeros,
fechas, horas, etc. Mientras se empleen las configuraciones del sistema
estndar, QlikView interpretar y formatear los datos
automticamente. Por lo tanto el usuario no tiene por qu cambiar el
script o las configuraciones en QlikView. Hay una manera muy simple
de comprobar si QlikView ha interpretado los datos correctamente: los
datos numricos normalmente se alinean a la derecha en cuadros de
lista, mientras que las cadenas de texto suelen ir alineadas a la
izquierda.
La rutina habitual implica atravesar el siguiente proceso hasta que se
encuentra el formato adecuado. (El formato estndar incluye, por
ejemplo, el separador decimal, el orden de los aos, meses y nmeros,
etc. en el sistema operativo, es decir, en el Panel de Control, o en
algunos casos definido mediante variables especiales para que las
interprete el script.)

copyright 1996-2005 QlikTech International

Page 122

QlikView Enterprise Script

QlikView interpreta datos como:


1. un nmero segn el formato numrico estndar
2. una fecha segn el formato estndar de fecha
3. una marca de tiempo segn el formato estndar de fecha y hora
4. una hora segn el formato estndar de hora
5. una fecha segn el siguiente formato: yyyy-MM-dd
6. una marca de tiempo segn el siguiente formato: yyyy-MM-dd
hh:mm
[:ss[.fff]]
7. una hora segn el siguiente formato: hh:mm [:ss[.fff]]
8. las monedas segn el formato estndar de moneda
9. un nmero con '.' como separador decimal y ',' como separador de
miles, dando por sentado que ni el separador decimal ni el separador
de miles est establecido en ','
10. un nmero con ',' como separador decimal y '.' como separador de
miles, dando por sentado que ni el separador decimal ni el separador
de miles est establecido en '.'
11. una cadena de texto. El siguiente test nunca falla: si es posible
cargar los datos, siempre ser posible interpretarlos como cadena de
texto.
Los problemas de interpretacin suelen surgir cuando los datos se
cargan desde archivos de texto. Un separador de decimales incorrecto o
un separador de miles en uno u otro idioma pueden llevar a QlikView a
interpretar los nmeros de forma incorrecta. Lo primero que debera
hacer es comprobar que las variables de interpretacin de nmeros en el
script estn correctamente definidas y que los parmetros del sistema en
el Panel de Control sean los correctos.
Cuando QlikView ha interpretado los datos como una fecha u hora, es
posible cambiar el formato de tiempo y fecha en el dilogo Propiedades
del objeto de hoja (en la pestaa Nmero). La omisin de formato es
algo que se realiza a nivel de documento en Propiedades de Documento:
hoja nmero.
Como no existe un formato predefinido para los datos, un registro
puede contener obviamente valores con distintos formatos en un nico

copyright 1996-2005 QlikTech International

Page 123

QlikView Enterprise Script

campo. Por ejemplo, se pueden encontrar en un mismo campo fechas


vlidas, enteros y texto. Estos datos no recibirn formato, pero se
mostrarn en cuadros de lista en su formato original.
Cuando el dilogo de formato numrico para dicho campo se abra por
primera vez, el formato ser Mixto. Una vez que haya modificado el
formato ser imposible que QlikView lo revierta al formato original en
estos valores de campo, es decir, si la casilla de Mantener Formato tras
Recarga se encuentra marcada cuando se ejecuta el script.
El botn Configuracin predeterminada para la entrada no est activo
por tanto para este tipo de campo una vez que el formato numrico ha
sido modificado.

26.4. Fechas y horas


QlikView almacena fechas, horas y marcas de tiempo como un nmero
de serie de datos para fecha. El nmero en serie para las fechas se
utiliza para fechas, horas y marcas de tiempo, as como para clculos
aritmticos basados en unidades de fecha y hora. Las fechas y horas
pueden por tanto sumarse y restarse, y los intervalos pueden
compararse, etc.
Los nmeros empleados para fecha y hora son los valores del nmero
de das que han transcurrido despus del 30 de diciembre de 1899.
QlikView es por tanto compatible con el sistema de fecha 1900
empledo por Microsoft Excel paraWindows, Lotus 1-2-3 y otros
programas, entre el 1 de marzo de 1900 y el 28 de febrero de 2100.
Fuera de este marco de tiempo QlikView utiliza el mismo sistema de
fecha extrapolado con la ayuda del calendario Gregoriano, el cual est
considerado como un estndar en el mundo occidental en la actualidad.
El nmero de serie para las fechas es un nmero entre 0 y 1. El nmero
de serie 0.00000 corresponde a 00:00:00, mientras que 0.99999 se
corresponde con 23:59:59. La mezcla de nmeros muestra ambos, la
fecha y la hora: el nmero en serie 2.5 corresponde al 1 de enero de
1900, a las12.00 horas.
Los datos se muestran conforme al formato de la cadena de texto. Los
parmetros fijados en el Panel de Control se utilizan como estndar.
Tambin es posible definir el formato para fecha y hora mediante una
serie de variables que son interpretadas por el script o con la ayuda de
una funcin de formateado. Adems, tambin es posible reformatear
datos en el dilogo Propiedades de los objetos de hoja.
Ejemplo:

1997-08-06

se almacena como

copyright 1996-2005 QlikTech International

35648

Page 124

QlikView Enterprise Script

09:00

se almacena como

0.375

1997-08-06 09:00

se almacena como

35648.375

o vice versa

35648
6/8/97

en formato numrico 'D/M/YY' se muestra como

0.375
09.00

en formato numrico 'hh.mm' se muestra como

Como ya se ha mencionado anteriormente, QlikView seguir un


determinado procedimiento para la interpretacin de los datos de fecha,
hora, etc. El resultado final, no obstante, se ver afectado por una serie
de factores.

copyright 1996-2005 QlikTech International

Page 125

QlikView Enterprise Script

27. Apndice 2: El script final


///$tab HiddenScript
/* SECURITY section access comments */
/* Use for BASIC security access */
SET vSecureType = 'BASIC';
/* Comment following statement for BASIC security access */
/* Use for SalesPerson and Data Reduction */
//SET vSecureType = 'DATA';
Section Access;
IF vSecureType = 'BASIC' THEN
Access01:
Load * Inline
[USERID, PASSWORD, ACCESS, COMPUTER
Demo, User, User, Course1
Demo, Admin, Admin, Course2
*,*,Admin,Server,Course2];
/*
*/

UnComment following statement AFTER adding correct


serial number in Access02.txt file

REM Access02:
Load
COMPUTER,
SERIAL
FROM Datasources\Access02.txt (ansi, txt, delimiter is '\t',
embedded labels);
Section Application;
ELSE

/* 'DATA' Security Access */

Access01:
Load
[USERID],
'*' as SERIAL, /* Needed for command line user */
[ACCESS],
SP /* Connecting field for data reduction */
FROM Datasources\SalesSecurity.txt (ansi, txt, delimiter is
'\t', embedded labels);
/* Concatenate data for command line reload */
concatenate (Access01) Load * Inline
[USERID, SERIAL, ACCESS, SP
*,1002 3426 4752 6766,Admin,];
Section Application;
Access_Application:
Load

copyright 1996-2005 QlikTech International

Page 126

QlikView Enterprise Script

upper(SP) as SP, /* Connecting field for data


reduction */
[Sales Person]
FROM Datasources\SalesInitials.txt (ansi, txt, delimiter is
'\t', embedded labels);
END IF /* Security Access */
///$tab Main
LET vCurrentFullYear = Year(today()) - 1;
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='$#,##0.00;($#,##0.00)';
SET TimeFormat='h:mm:ss TT';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
SET
MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
/* Quarters comments */
rem Quarters_Map:
Mapping Load * Inline [
Month, Quarter
1,Q1
2,Q1
3,Q1
4,Q2
5,Q2
6,Q2
7,Q3
8,Q3
9,Q3
10,Q4
11,Q4
12,Q4];
Quarters_Map:
Mapping Load
rowno() as Month,
'Q' & Ceil(rowno()/3) as Quarter
Autogenerate(12);
/* CONNECT to QWT database */
ODBC CONNECT TO [EnterpriseScript;DBQ=DATASOURCES\QWT.mdb];
/* Customers Table load using QVD buffer */
Customers:
buffer (stale after 7 days) SELECT
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
Fax,
Phone,

copyright 1996-2005 QlikTech International

Page 127

QlikView Enterprise Script

PostalCode,
StateProvince
FROM Customers;
rem store Customers into datasources/customers.qvd;
rem Customers:
Load
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
Fax,
Phone,
PostalCode,
StateProvince
FROM Datasources\customers.qvd (qvd);
/* Shippers Table comments */
Shippers:
SQL SELECT
ShipperID,
CompanyName as Shipper
FROM Shippers;
/* Products Table comments */
Products:
SQL SELECT
CategoryID,
ProductID,
ProductName,
QuantityPerUnit,
SupplierID,
UnitCost,
UnitsInStock,
UnitsOnOrder
FROM Products;
/* Categories Table comments */
Categories:
SQL SELECT
CategoryID,
CategoryName,
Description
FROM Categories;
/* Orders Table comments */
Orders:
buffer (stale after 1 days) Load
CustomerID,
EmployeeID,
EmployeeID as EmployeeSales,
Freight,
OrderDate,
OrderDate as CountOrderDate,

copyright 1996-2005 QlikTech International

Page 128

QlikView Enterprise Script

Year(OrderDate) as Year,
Month(OrderDate) as Month,
date(monthstart(OrderDate),'MMM-YYYY') as [Rolling
Month],
applymap('Quarters_Map',num(Month(OrderDate))) as
Quarter,
Day(OrderDate) as Day,
OrderID,
ShipperID;
SELECT * FROM Orders;
/* Order Details Table comments */
Order_Details:
buffer (stale after 1 days) SQL SELECT
OrderID,
ProductID,
ProductID as CountProductID,
Quantity,
UnitPrice,
UnitPrice*Quantity*(1-Discount) as NetSales
FROM `Order Details`;
Employee:
Load
EmpID as EmployeeID,
[First Name] & ' ' & [Last Name] as Name,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) as [Employee Hire Year],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\Emp*.xls (biff, embedded labels, table is
[Employee$]);
REM Employee:
concatenate (Employee) Load
EmpID as EmployeeID,
[First Name] & ' ' & [Last Name] as Name,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) as [Employee Hire Year],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\Employees_New.xls (biff, embedded labels,
table is [Employee$]);
Office:
Load
Office,
Address as OfficeAddress,
[Postal Code] as OfficePostalCode,

copyright 1996-2005 QlikTech International

Page 129

QlikView Enterprise Script

City as [Sales Office],


StateProvince as OfficeStateProvince,
Phone as OfficePhone,
Fax as OfficeFax,
Country as OfficeCountry
FROM Datasources\EmpOff.xls (biff, embedded labels, table is
[Office$]);
/* Suppliers Table comments */
Qualify *;
Unqualify SupplierID;
suppliers:
Load
SupplierID,
CompanyName,
ContactName,
Address,
City,
PostalCode,
Country,
Phone,
Fax
FROM Datasources\suppliers.dif (oem, dif, embedded labels);
Unqualify *;
/* Include external script file */
$(Include=datasources\email.txt)
///$tab Sales Person
/* Sales Person Table comments */
Sales_Person:
Load
EmployeeID,
EmployeeID as SalesPersonID,
Name as [SalesPerson],
Title as SalesTitle
Resident Employee
Where
Exists(EmployeeSales,EmployeeID);
///$tab Sales Change
/*
Load and Join Order data based on
vCurrentFullYear variable setting
*/
OrdersByYear_Source:
Load
CustomerID,
OrderID,
Year
RESIDENT
Orders
Where
Year = $(vCurrentFullYear) - 1 or Year =
$(vCurrentFullYear); /*only load 2 years*/
Left Join (OrdersByYear_Source) Load
OrderID,

copyright 1996-2005 QlikTech International

Page 130

QlikView Enterprise Script

NetSales
RESIDENT
Order_Details;
/* Aggregation by Customer comments */
OrdersByYear:
Load
CustomerID,
Year,
sum(NetSales) as NetSalesByYear
RESIDENT
OrdersByYear_Source
Group by
CustomerID,Year;
DROP TABLE OrdersByYear_Source;
/* Sales Change using Previous function */
SalesChange:
Load
CustomerID,
NetSalesByYear,
If(CustomerID = Previous(CustomerID),
If(NetSalesByYear > Previous(NetSalesByYear),
'UP','DOWN'),null()) as SalesChangeIndicator,
If(CustomerID = Previous(CustomerID),
NetSalesByYear - Previous(NetSalesByYear),
null()) as SalesChangeAmt
RESIDENT
OrdersByYear
Order by
CustomerID,Year;
DROP TABLE OrdersByYear;
DROP FIELD NetSalesByYear;
///$tab Budget/Result
Budget_Actual_S1:
CROSSTABLE(BudgetYear, Amount, 2)
Load
*
FROM
Datasources\Budget.xls (biff, header is line, embedded
labels, table is [Sheet2$], filters(
Replace(1, top, StrCnd(null))
));
Budget_Actual:
Generic Load
Office,
BudgetYear,
Metric,
Amount
Resident
Budget_Actual_S1;
DROP TABLE Budget_Actual_S1;

copyright 1996-2005 QlikTech International

Page 131

También podría gustarte