Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Qlikview Proyecto
Qlikview Proyecto
QV Enterprise
Noviembre 2005
QV Versin 7.0 Espaol
PJB/2005-04-01
Page 2
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
Page 3
Page 4
Page 5
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:
Page 6
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.
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
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:
Page 16
Page 17
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
Page 18
Page 19
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.
Page 20
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];
Page 21
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;
Page 22
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);
Page 23
fieldname>,
Ejemplo de alias:
Alias ProdId as ProductID, Mon as Month, Cname as
Customer;
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.
Page 24
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;
Page 25
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.
Page 26
Page 27
Page 28
Page 29
Page 30
Page 31
Page 32
Page 33
Page 34
Page 35
Page 36
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`;
Page 37
Page 38
$Field
$Table
$Rows
$Fields
$FieldsNo
6. $Info
Page 39
Page 40
Page 41
Page 42
Page 43
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.
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.
Page 44
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
Page 45
Page 46
Page 47
Pedidos
Presupuesto
IDCliente
Pas
IDCliente
IDProducto
ValorPedido
Pas
IDProducto
Page 48
Page 49
Figura 21. Todos los valores posibles tienen una frecuencia mayor que 1
Page 50
Page 51
Page 52
Page 53
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.
Page 54
Page 55
Page 56
Figura 23. Las tablas de clave sinttica vistas desde el Visor de Tablas
Page 57
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';
Page 58
Page 59
Page 60
Page 61
Page 62
Page 63
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
Page 64
Num(Cantidad)
Sum(Cantidad)
4
900
Page 65
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.
Page 66
Page 67
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.
Page 68
Page 69
Page 70
Page 71
Page 72
Page 73
Page 74
Page 75
*
FROM
Datasources\Budget.xls (biff, header is line,
embedded labels, table is [Sheet2$], filters(
Replace(1, top, StrCnd(null))
));
Page 76
Page 77
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$]);
Page 78
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)
Page 79
Page 80
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.
Page 81
<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;
Page 82
Page 83
Page 84
Page 85
Page 86
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).
Page 87
Unir
Agregacin
Ordenar por
Previo (acceder a los datos desde el registro previamente
cargado)
Variables
Page 88
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
Page 89
Page 90
Page 91
Page 92
Page 93
Page 94
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'))
Page 95
Page 96
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;
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;
Page 97
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.
Page 98
Page 99
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$]);
Page 100
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.
Page 101
Page 102
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.
Page 103
Page 104
Page 105
Page 106
SERIAL
2300 2394 7111 8000
2300 2394 7111 8001
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.
Page 107
Page 108
dnde
condition es una expresin lgica que puede ser evaluada
comoverdadera o falsa.
Page 109
END IF
Page 110
Page 111
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.
Page 112
Page 113
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.
Page 114
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
Paso a
paso
Page 115
Page 116
Page 117
Page 118
Page 119
Page 120
2.
Page 121
Page 122
Page 123
1997-08-06
se almacena como
35648
Page 124
09:00
se almacena como
0.375
1997-08-06 09:00
se almacena como
35648.375
o vice versa
35648
6/8/97
0.375
09.00
Page 125
REM Access02:
Load
COMPUTER,
SERIAL
FROM Datasources\Access02.txt (ansi, txt, delimiter is '\t',
embedded labels);
Section Application;
ELSE
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
Page 126
Page 127
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,
Page 128
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,
Page 129
Page 130
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;
Page 131