Developer II Course QV10 PRINT Esp
Transcript of Developer II Course QV10 PRINT Esp
-
7/21/2019 Developer II Course QV10 PRINT Esp
1/116
1
Developer II
QlikView Versin 10 Espaol
Original en ingls: Octubre 2010
-
7/21/2019 Developer II Course QV10 PRINT Esp
2/116
-
7/21/2019 Developer II Course QV10 PRINT Esp
3/116
3
NDICE
1 INTRODUCCIN .................................................................................... 5
Instalacin de los Materiales del Curso ......................................................................... 5
Versiones de Programa .................................................................................................. 5Formatos de Texto ......................................................................................................... 5
2 HERRAMIENTAS DEL DESARROLLADOR .................................... 7
Depuracin de Errores ................................................................................................... 7
El Depurador ................................................................................................................. 7
3 TABLAS DE CORRESPONDENCIA .............................................. 18
Correspondecia de la tabla Quarterscon la tabla Orders........................................... 18MonthYear .................................................................................................................. 22
Limpiar la estructura de tabla ...................................................................................... 24
4 CARGAR DATOS DE PRESUPUESTOS ........................................... 29
Leer Tablas Cruzadas .................................................................................................. 29
5 SCRIPT AVANZADO............................................................................ 35
Una condicin en un campo de una tabla .................................................................... 35Agregar datos .............................................................................................................. 35Unir Tablas .................................................................................................................. 35Concatenacin ............................................................................................................. 35
Carga precedente ......................................................................................................... 37
6 CLCULOS AVANZADOS EN OBJETOS DE HOJA ..................... 45
Anlisis de Conjuntos .................................................................................................. 45Expansiones de Signo-Dlar ....................................................................................... 49Funcin AGGR ........................................................................................................... 50
7 DESAFOS DE SCRIPT Y MODELADO DE DATOS...................... 58
Tablas de Enlace y Tablas Concatenadas .................................................................... 58Calcular el Cambio Neto en un Campo ....................................................................... 58Funciones InDate e Islas de Datos .............................................................................. 59Aggr() .......................................................................................................................... 59
Class() .......................................................................................................................... 60Agregacin dinmica ................................................................................................... 60IntervalMatch .............................................................................................................. 60
8 OPTIMIZACIN DEL MODELO DE DATOS ................................. 73
Ajustes de rendimiento ................................................................................................ 73
-
7/21/2019 Developer II Course QV10 PRINT Esp
4/116
Prcticas recomendadas para optimizacin de archivos QlikView ............................. 75Crear cargas incrementales .......................................................................................... 77
9 BALANCES Y TRANSACCIONES DIARIOS .................................. 86
Visin General de Conjunto ........................................................................................ 86
Ejemplo: Balances en Fechas Especficas ................................................................... 86
10 SEGURIDAD EN QLIKVIEW ........................................................... 91
Control de Acceso ....................................................................................................... 91
11 CONECTIVIDAD AVANZADA DE BASES DE DATOS ............. 104
Datos Personalizados ................................................................................................. 104
Conector SAP ............................................................................................................ 105
12 TALLER DE TRABAJO ................................................................... 108
Escenario propuesto .................................................................................................. 108
-
7/21/2019 Developer II Course QV10 PRINT Esp
5/116
QlikView DeveloperII| 1 INTRODUCCIN
5
1 INTRODUCCIN
Muchos alumnos vienen a este curso habiendo recibido ya alguna formacin previa enQlikView. Este primer captulo simplemente presenta unas convenciones generales acercade cuestiones de formato empleadas en este manual.
Instalacin de los Materiales del CursoLos materiales del curso se extraern automticamente desde su correspondiente archivoal directorio por defecto
C:\QlikViewTraining\Developer II\
Cree un acceso directo a esta carpeta desde Windows y colquelo en su escritorio.
Cree tambin un acceso directo a la carpeta de documentacin y ubquelo en su escritorio
C:\Archivos de Programa \QlikView\Documentacin
oC:\Archivos de Programa (x86) \QlikView\Documentacin
Versiones de ProgramaEl presente curso se ha realizado con la versin 10.00 de QlikView en ingls,ejecutndose sobre Windows 7. Por lo tanto, si est utilizando otro tipo de lenguaje osistema operativo, puede que encuentre pequeas diferencias en el aspecto grfico de lasventanas y los cuadros de dilogo.
Formatos de TextoLos ejercicios y acciones que se soliciten al alumno aparecern introducidos por un logo,como se observa a continuacin:
Ejercicio/Haga lo siguiente:Aqu tiene un ejemplo de instrucciones que deber seguir para realizar un ejercicioque contiene una secuencia de pasos:
1 Haga clic en el botn Inicio
2 Localice el icono QlikView
3 Pulse el icono QlikView para lanzar el programa
Todos los comandos, as como los nombres de dilogos, mens y botones, se encuentranexpresados en el siguiente tipo y estilo de letra: Archivo - Abrir
Todos los nombres de cuadros de lista, grficos y datos especficos de los cuadros de lista,etc. se hallan en el siguiente tipo y estilo de letra: Pas
-
7/21/2019 Developer II Course QV10 PRINT Esp
6/116
QlikView DeveloperII| 1 INTRODUCCIN
Todos los nombres de archivo se hallan expresados en el siguiente tipo y estilo de letra:QlikViewCourse.qvw
Los Consejos y Notas vienen destacados en un recuadro sombreado, como se muestra acontinuacin:
Esta frase de muestra se ha utilizado para ilustrar puntos importantes del texto, consejos ynotas que deber tener en cuenta segn avance en los contenidos del curso.
-
7/21/2019 Developer II Course QV10 PRINT Esp
7/116
QlikView DesignerI| 3 UTILIZACIN DE QLIKVIEW DESKTOP
7
2 HERRAMIENTAS DEL DESARROLLADOR
Depuracin de ErroresLa depuracin es un arte. Existen guas de prcticas recomendadas y directrices que leayudarn en el proceso de depuracin. Lo mejor en un proceso de depuracin es cambiaralgn elemento en un momento dado y luego examinar el impacto de dicho cambio. Si semodifica ms de un elemento sin analizar el efecto producido la depuracin se convierteen un proceso difcil. Esta parte del curso no le ensear cmo depurar una aplicacin
pero le pondr en la direccin adecuada si su aplicacin no funciona como es debido o notiene el aspecto que usted desea. Estos procesos y herramientas bsicos son el mejorpunto de partida para depurar una aplicacin QlikView.
Adems, durante la ejecucin de script en modo depuracin, el depurador permite unamonitorizacin de las variables. Esto es til para validar el estado de las variables en lasdiversas etapas de la ejecucin de script.
Recuerde siempre asegurarse de que el recuadro Generar Archivo log(archivo deregistro) est marcado en Configuracin|Propiedades de Documento|General. Recuerde asmismo que las comas y puntos y coma que falten o estn fuera de lugar son una fuente demensajes de error. Verifique estos problemas comunes lo primero.
El DepuradorDonde haya un Punto de Interrupcin, compruebe las Variables
Los puntos de interrupcin detienen la ejecucin de script para darle la oportunidad dedepurar. Se pueden colocar en un script con la opcin Depurar que hay en el editor descript de QlikView. Los puntos de interrupcin slo detienen el procesamiento del scriptsi se sitan en la lnea de la primera sentencia de un bloque de cdigo que termine enpunto y coma. Colocar un punto de interrupcin en cualquier otra lnea del bloque decdigo no tendr efecto alguno en cuanto a detener el script a medida que ste se ejecuta.
Objetivos Comprender la importancia de la depuracin de errores
Utilizar el depurador Introducir otras herramientas y mtodos adicionales
-
7/21/2019 Developer II Course QV10 PRINT Esp
8/116
QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP
Figura 1. Los puntos de Interrupcin
Como podr observar en la figura superior, hay tres puntos de interrupcin situados en laslneas 38, 39 y 44. Observe que el depurador no se detendr en la lnea 39, dado que no esla primera sentencia del bloque de cdigo.
Esto podra ser una sentencia LOAD, una SQL LOAD con un LOAD precedente, o una
sentencia LOAD agrupada. Si hace el seguimiento de cada sentencia hacia atrs desde elpunto y coma ver que mientras la palabra clave MAPPINGde la lnea 39 forma parte de unbloque de cdigo que termina en punto y coma, MAPPINGno es la primera lnea del bloquede cdigo, Shippers:s lo es.
Variables
Si ha creado variables en el script de carga, podr visualizar el valor de una variable amedida que se carga el script. Le sorprender ver que no contiene los valores esperados.Cree variables adicionales para investigar ms estados durante la carga de script.
-
7/21/2019 Developer II Course QV10 PRINT Esp
9/116
QlikView DesignerI| 3 UTILIZACIN DE QLIKVIEW DESKTOP
9
Ejercicio: Depuracin
Haga lo siguiente:1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
2 Cargue el archivo Debugging.qvw en QlikView y trate de cargar los datos enQlikView tras haber fijado mltiples puntos de interrupcin, avance por elcdigo y vea dnde se detiene el depurador. Compruebe tambin los valoresde las variables.
3 Abra el archivo \Debugging\Variable.qvw. Entre en el depurador desde eleditor de script y compruebe los puntos de interrupcin que se han fijado en elscript.
4 Utilice el botn Ejecutarpara ejecutar el script hasta el siguiente punto deinterrupcin.
5 Observe que la variable mySetVarno aparece listada en el panel inferior devariables, a la derecha.
6 Pulse Ejecutarde nuevo y observe que se ha fijado el valor de la variable mySetVar.
7 Pulse Ejecutarde nuevo y abandone el script.
8 Repita los pasos 3 a 6 y observe en el paso 4 que la variable mySetVaranconserva el valor de la ejecucin anterior.
9 Vaya a Configuracin | Panel de Variables y vea cmo la variable mySetVar(unavez creada) se almacena y queda accesible desde dentro de QlikViewDesktop.
Recuerde que los valores intermitentes de las variables de script se puedenmonitorizar a travs del depurador. El mbito de las variables de script no selimita nicamente a una nica ejecucin de script, esto es, las variablespersisten entre ejecuciones.
-
7/21/2019 Developer II Course QV10 PRINT Esp
10/116
QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP
Utilizar el Objeto de Hoja Cuadro de Tabla
El Cuadro de Tabla es el mejor amigo del desarrollador. Es estupendo para identificarcmo se relacionan los datos y dnde faltan datos.
El objeto de tabla resulta particularmente til para ver las relaciones de datos a nivel de
fila entre diversos campos. Para una mayor facilidad de uso, un cuadro de tabla puedetener activada la opcin de selectores desplegables desde la pestaa Presentacin,permitiendo al desarrollador navegar con rapidez por cualquier campo/columna y hacerselecciones de consultas de texto.
Crear un cuadro de tabla es muy sencillo y cualquiera puede aadir columnas desdemltiples tablas as como selectores desplegables a las columnas (campos) de la tabla.Vea el Selector Desplegable en la figura inferior; el selector desplegable le permiteseleccionar y buscar datos en el cuadro de tabla. Esto le ayudar a entender cmo serelacionan los datos de sus tablas.
Figura 2. Aadir Selectores Desplegables
Podr ver asimismo dnde hay valores NULOS entre las tablas y en los campos. Losvalores NULOS pueden afectar adversamente a una aplicacin y a la seleccin de datos.
-
7/21/2019 Developer II Course QV10 PRINT Esp
11/116
QlikView DesignerI| 3 UTILIZACIN DE QLIKVIEW DESKTOP
11
Ejercicio:
Haga lo siguiente:1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
2 Abra la aplicacin KeyFields.qvw y vaya a la pestaaPrincipal donde veruna tabla. Seleccione una celda que contiene datos y observe que cualquier filacon un valor de campo idntico se mostrar con las correspondientes columnasde datos con las que se asocia.
3 A continuacin, elimine las selecciones (botn Borrar) y seleccione una celdaque tenga un valor nulo (la representacin por defecto es un carcter de unguin -). Observe que no ocurre nada.
Nota: Est viendo informacin inconexa, lo cual puede ser problemtico;puede explorar las causas de esta situacin examinando los campos clave.
Recuerde, los cuadros de tabla son una herramienta excelente para entendery validar las relaciones entre los datos. Slo los valores posibles/incluidosse visualizan en un cuadro de tabla.
-
7/21/2019 Developer II Course QV10 PRINT Esp
12/116
QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP
Copiar Campos Clave
Cmo se puede haber creado esta situacin de inconexin?
Un LEFT JOIN Una operacin de tabla MAPPING Malos datos Malas correspondencias entre campos clave
Los campos clave conectan tablas en QlikView, pero examinarlos no siempre mostrar lainformacin que usted espera ver. Mostrar un campo clave en un objeto de hoja como unCuadro de Tabla, muestra todos los valores posibles del campo clave en todas y cada unade las tablas conectadas, cualquier tabla(s) podra contener valores distintos que no secorrespondan con otros valores en ninguna otra tabla(s).Para entender lo que est ocurriendo en cada tabla, o en cada parte de un campo clave,cargue una copia del campo clave en cada tabla y renombre de forma nica cada copia delcampo clave con una clusula AS.Re-ejecute su documento, cree cuadros de lista para todos los campos, a continuacinhaga un SELECT ALLe uno de los campos que es un alias del campo clave.Por ltimo, SELECCIONE LOS EXCLUIDOS en el campo clave haciendo clic con el botnderecho en el cuadro de lista. A travs de la seleccin y exclusin, podr ver quelementos se han unido mediante el campo clave y cules no.Este problema normalmente se da cuando faltan datos. Tambin puede devolverresultados negativos si se est buscando a niveles discretos diferentes de informacin enel modelo. Esta situacin se ver ms adelante en el curso.
-
7/21/2019 Developer II Course QV10 PRINT Esp
13/116
QlikView DesignerI| 3 UTILIZACIN DE QLIKVIEW DESKTOP
13
Ejercicio:
Haga lo siguiente:1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
2 Abra la aplicacin KeyFields.qvw
3 Comente el script en la pestaa Standard Joiny elimine el comentario al scripten la pestaa Copy of Keys.
4 Guarde y recargue.
5 Observe que el campo clave de cada tabla se ha renombrado de formanica/exclusiva, por ej.KeycomoAS Key1_Table1.
6 Cree cuadros de lista para todos los campos.
7 Seleccione Todoen uno de los campos clave copiados.
8 Seleccione Excluidos en el campoKey (haga clic con el botn derecho en elcuadro de lista del campoKeyy elija SELECCIONAR EXCLUIDOS).
9 Observe las correspondencias y no correspondencias entre las claves de cadatabla.
Depuracin: Ejemplos y Pasos
Cuando se crean y depuran ecuaciones complejas, escoja dos enfoques:
1 Tome una muestra de los datos y no cree un modelo de datos que supere a lasdos tablas, si fuera posible. No debera haber ms de tres columnas en cadatabla ni ms de quince filas. Utilice el asistente Inline o Excel para crear lastablas.
2 Cuando cree expresiones complejas, utilice un grfico de Tabla Simple yconstruya expresiones columna por columna.
Haga lo siguiente:1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
2 Abra el archivo ComplexEquations.QVW.
3 Cree un grfico de Tabla Simple con CompanyName(oNombreCompaa)como la dimensin, con las siguientes expresiones:
Nota: Mediante el uso de los modos Seleccionar Todo, SeleccionarPosibles en los campos clave, es posible investigar las asociaciones y no
asociaciones entre los datos de su estructura de datos .
-
7/21/2019 Developer II Course QV10 PRINT Esp
14/116
QlikView Designer I | 3 UTILIZACIN DE QLIKVIEW DESKTOP
Expresin Etiqueta
Sum(LineSalesAmount) Sales
Count(LineNo) Lines
Avg(LineSalesAmount) AvgSales
Sum(Quantity) Qty
4 Finalice con dos expresiones ms:
Expresin Etiqueta
Qty /Lines AvgQty
Sales/Qty UnitPrice
Como podr ver, se puede introducir una expresin directamente o utilizarse
una etiqueta de expresin como un alias de la expresin para obtener el mismoresultado.
Cree su expresin compleja, una columna por vez y, a continuacin, mueva laexpresin al contenedor de la Etiqueta al que se hace referencia en la expresin.Este es el mejor modo de crear expresiones complejas lentamente.
Fechas
En muchos casos, los campos de fecha son campos clave. Para unir tablas dediferentes sistemas, hay ocasiones en que las fechas deben ser convertidas a unformato comn antes de que las fechas de lugares dispares se correspondan
indebidamente. Siempre es una buena idea comprobar el campo clave empleandoun cuadro de tabla que verifique que el formato de fecha es constante a lo largo dela totalidad del campo clave.
Haga lo siguiente:1 Vaya a la carpeta C:\QlikViewTraining\DeveloperII\Chapter02.
Nota: Tambin puede referirse a una expresin por su nmero de Columnade Tabla (ndice de base cero) pero NO LO HAGA!
Nota: No puede hacer agregaciones anidadas (agregar agregaciones) amenos que utilice la funcin aggr() la cual se ver ms adelante en estecurso.
-
7/21/2019 Developer II Course QV10 PRINT Esp
15/116
QlikView DeveloperII| 2 HERRAMIENTAS DEL DESARROLLADOR
15
2 Abra una copia de trabajo del archivo Dates.qvw y cargue los datos delarchivo Dates.XLS en la carpeta Datasources. Cree dos tablas en el script. Suscript debera mostrar ms o menos el siguiente aspecto:
3 A continuacin, cree un cuadro de tabla que incluya todas las columnas,ordene por Fecha (Date) ascendente y explore los datos. Obtendraproximadamente una vista como la del cuadro de tabla inferior. Observe quelas fechas tienen el mismo aspecto, pero las fechas similares no se enlazan.
4 Para ver qu es lo que est ocasionando el problema, cree un Objeto de Textoque muestre la expresin
=num(Date, ###.######)
y alternativamente seleccione cada una de las dos fechas similares. Observe laparte fraccional de cada fecha mostrada en el objeto de texto. La fecha de unatabla es en realidad una marca de tiempo: fecha-hora, mientras que la otra notiene asociado un elemento de tiempo.
-
7/21/2019 Developer II Course QV10 PRINT Esp
16/116
-
7/21/2019 Developer II Course QV10 PRINT Esp
17/116
QlikView DeveloperII| 2 HERRAMIENTAS DEL DESARROLLADOR
17
-
7/21/2019 Developer II Course QV10 PRINT Esp
18/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
3 TABLAS DE CORRESPONDENCIA
A veces se necesita aadir un campo extra a una tabla para emplear una combinacin decampos de diferentes tablas, o se desea aadir un campo para limpiar la estructura dedatos. QlikView tiene una forma eficaz de aadir campos aislados a una tabla y sedenomina tablas de correspondencia. En este captulo analizaremos el funcionamiento delas tablas de correspondencia.
Correspondecia de la tabla Quarterscon la tabla OrdersLa tabla Quarterses til porque enlaza nuestros datosMonthen la tabla Orderscon elQuarter(trimestre)correcto. Sin embargo, el campoMonthes ahora un campo clave yesto probablemente traer problemas ms tarde. La siguiente ilustracin muestra demanera grfica este dilema:
Figura 1. La tabla Quarters con el enlace clave en Month
Objetivos Entender las tablas de correspondencia
Utilizar las tablas de correspondencia para aadir Quarters(Trimestres) a latabla Orders(Pedidos) Limpiar la estructura de tabla
-
7/21/2019 Developer II Course QV10 PRINT Esp
19/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
19
Figura 2. El campo Month con el indicador clave en el listado de Campos Disponibles
Cambiando nuestra tabla Quartersa una tabla MAPPING, podremos integrar el campoQuartersen la misma tabla queMonth(la tabla Orders).
El prefijo MAPPING se emplea en una sentencia LOADo SELECTpara crear una tabla decorrespondencia. Las tablas ledas mediante MAPPING LOADo MAPPING SELECTreciben untratamiento diferente de las otras tablas. Se almacenan en un rea aparte de la memoria yse usan nicamente como tablas de correspondencia durante la ejecucin de script. Tras laejecucin de script se descartan automticamente.
Una tabla de correspondencia debe tener dos campos: el primero contiene valores decomparacin y el segundo los valores deseados de correspondencia. Ambos campos hande ser nombrados, pero los nombres no tienen ninguna relevancia por s mismos. Losnombres de campo no tienen conexin alguna con los nombres de campo de las tablas deentrada normales y corrientes. Cuando las tablas de correspondencia se utilizan paraasociar un determinado valor de campo o expresin, dicho valor se comparar con losvalores del primer campo de la tabla de correspondencia. Si lo encuentra, el valor originalser reemplazado por el correspondiente valor del segundo campo de la tabla decorrespondencia. Si no lo encuentra, no se efecta reemplazo alguno.
La sintaxis es la siguiente:
mapping( load statement|select statement)
-
7/21/2019 Developer II Course QV10 PRINT Esp
20/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
Ejercicio
Haga lo siguiente:1 Inicie QlikView y guarde una copia de trabajo del archivo QlikView
MappingTables.qvw en el directorio de trabajo de este captulo(C:\QlikViewTraining\DeveloperII\Chapter03).
2 Abra el dilogo Editor de Script.
3 A continuacin vamos a transformar la carga de la tabla Quartersen una cargade correspondencia.
4 En la pestaaMainelimine el comentario de la sentencia load de la tablaQuartersque desea utilizar. Asegrese de que la otra tabla contine comentadapara que no lea de dos tablas Quarters.
5 Aada _Map al nombre de tabla.
6 En la lnea siguiente, introduzca MAPPINGfrente a la sentencia LOAD.
7 Cuando haya terminado, verifique que esta seccin de su script se parece a losiguiente:
Quarters_Map:MAPPING LOAD
rowno() as Month,'Q' & Ceil(rowno()/3) as Quarter
Autogenerate(12);
No guarde y cierre justo ahora. Si recarga los datos ahora perder la tabla y el
campo Quartersporque las tablas de correspondencia son temporales. Sinembargo, podemos usar la tabla Quarters_Mapen nuestro script (siempre ycuando la utilicemos despusde haberla definido en el script). Para ello,emplearemos la funcin applymap.
La sintaxis es la siguiente:
applymap( 'mapname', expr, [ , defaultexpr ] )
La funcin applymapasocia cualquier expresin de una tabla decorrespondencia previamente cargada.Mapnamees el nombre de una tabla decorrespondencia previamente cargada por una sentencia MAPPING LOADoMAPPING SELECT. El nombre debe ir entre comillas simples.Expres la
expresin cuyo resultado se har corresponder (se mapear).Defaultexpresuna expresin opcional que se utilizar como el valor de correspondencia pordefecto si la tabla de correspondencia no contiene ningn valor decorrespondencia para expr. Si no se suministra opcin alguna por defecto, elvalor de exprse devuelve sin modificar.
-
7/21/2019 Developer II Course QV10 PRINT Esp
21/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
21
8 Aada una funcin applymapa la tabla Ordersbasada en el valor numrico deMonth. Esta funcin debera hacer referencia a la tabla Quarters_Map.Observe el ejemplo de sintaxis que hay a continuacin:
applymap('Quarters_Map',num(month(OrderDate)),null()) AS Quarter,
9 Guardey Recargueel documento.10 Abra el VisordeTablaspara verificar que la tabla Quarters se ha ido y que
ahora hay un campo denominado Quarteren la tabla Orders.
Figura 3. Utilizar ApplyMap para incluir campos en otra tabla
-
7/21/2019 Developer II Course QV10 PRINT Esp
22/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
MonthYearCompletaremos nuestros campos de la dimensin de tiempo creando un nuevo campo queconvierte cada mes en nico. Hay, por supuesto, varias maneras de lograr esto. En estecurso, crearemos el campoMonthYearempleando las funciones de fecha de QlikViewbasadas en el campo OrderDate, junto con una funcin de formato de fechas paraproporcionar el formato de visualizacin correcto para nuestro nuevo campo de mes.
-
7/21/2019 Developer II Course QV10 PRINT Esp
23/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
23
Ejercicio
Haga lo siguiente:1 Vuelva al archivo MappingTables.qvw con el que ha estado trabajando en este
captulo.
2 Abra el dilogo Editor de Script desde el men o la barra de herramientas.
3 Localice la sentencia LOADen la tabla Orders.
4 Inmediatamente a continuacin de la lnea de campo: applymapasQuarter, cree un nuevo campo denominadoMonthYearen la sentencia LOADde la tabla Orders, como se ve a continuacin:
date(monthstart(OrderDate),'MMM-YYYY') AS MonthYear,
5 La funcin monthstartdevuelve el primer da del mes del valor OrderDate. Lafuncin datea continuacin da formato a este valor en un nombre de mes detres caracteres, seguido por un ao de cuatro dgitos. Como QlikView
almacena este campo como una cadena de texto (con el formato que acabamosde especificar) y tambin como numrico, puede ordenarse numricamentequ es lo que queremos.
La sentencia LOADcompleta de la tabla Ordersdebera presentar ahora ms omenos el siguiente aspecto. Asegrese de que su sintaxis de script coincida conesto. Observe que su lnea de campos Quarter yMonthYearencaje en unanica lnea en vez de varias, como se observa a continuacin:
//*************** Orders table ***************Orders:LOAD CustomerID,
EmployeeID,EmployeeID AS EmployeeSalesID,Freight,OrderDate,year(OrderDate) AS Year,
month(OrderDate) AS Month,day(OrderDate) AS Day,applymap('Quarters_Map',num(month(OrderDate)),null()) AS Quarter,date(monthstart(OrderDate), 'MMMYYYY')
ASMonthYear,OrderID,OrderID AS OrderIDCounter,ShipperID;
SQL SELECT *FROM Orders;
6 Guardey Recargueel script.
7 Aada un cuadro de lista para el nuevo campoNomthYearde su hoja.
-
7/21/2019 Developer II Course QV10 PRINT Esp
24/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
Limpiar la estructura de tablaProbablemente desee minimizar el nmero de tablas en QlikView (omitir las tablasinnecesarias). Se necesitan recursos informticos para realizar clculos entre las tablas. Sitiene tablas de slo dos campos, haga corresponder dichas tablas con otra tabla y aspodr minimizar el nmero de tablas. Observemos el Visor de Tablaspara ver si hayalguna(s) tabla(s) que pueda(n) hacerse corresponder (o mapearse) fcilmente con otratabla.
-
7/21/2019 Developer II Course QV10 PRINT Esp
25/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
25
Ejercicio
Haga lo siguiente:1 Vuelva al archivo con el que ha estado trabajando en este captulo.
2 Abra el Visor de Tablas.
Como podemos ver en el Visor de Tablas, algunas tablas slo tienen dos campos.Dichas tablas podran mapearse con las tablas que las conectan. Comencemoshaciendo corresponder la tabla Shipperscon la tabla Orders.
Figura 4. El Visor de Tablas
3 Abra el Editor de Scripty desplcese hacia abajo con el ratn.
4 Cambie la tabla que hace referencia al script por la tabla Shipperssegn se vea continuacin.
Shippers_Map:MAPPING LOAD
ShipperID,CompanyName AS Shipper;
SQL SELECT *FROM Shippers;
5 Aada la siguiente lnea al final de la tabla Orders.
applymap('Shippers_Map', ShipperID,'MISSING') AS Shipper
-
7/21/2019 Developer II Course QV10 PRINT Esp
26/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
La lnea de script anterior le dice a QlikView que utilice la palabra MISSINGenel campo Shipper donde no se encuentran valores ShipperID que coincidan.
6 Verifique que su script de la tabla Orderspresenta el siguiente aspecto://*************** Orders table***************
Orders:LOAD CustomerID,EmployeeID,EmployeeID AS EmployeeSalesID,Freight,OrderDate,year(OrderDate) AS Year,
month(OrderDate) AS Month,day(OrderDate) AS Day,applymap('Quarters_Map',
num(month(OrderDate)),null()) AS Quarter,date(monthstart(OrderDate), 'MMMYYYY')
AS MonthYear,OrderID,OrderID AS OrderIDCounter,ShipperID,applymap('Shippers_Map', ShipperID,'MISSING')
AS Shipper;SQL SELECT *FROM Orders;
7 Guardeel documento y recargue el script.8 Eche un vistazo al Visor de Tablaspara comprobar si de hecho el campo
Shippersforma parte ahora de la tabla
Orders.
Figura 5. El campo Shipperforma parte ahora de la tabla Orders
-
7/21/2019 Developer II Course QV10 PRINT Esp
27/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
27
Ejercicios extra
Haga lo siguiente:1 Inicie QlikView y guarde una copia de trabajo del archivo
AdditionalMappingExercises.qvw en el directorio de trabajo de este captulo(C:\QlikViewTraining\DeveloperII\Chapter03).
2 Abra el dilogo Editor de Script.
3 Cree una pestaa tras la pestaaMainy denomnelaMapping Loads.
4 Mueva el script de Shippers_Map y Quarters_Mapa la pestaaMappingLoads.
5 Haga corresponder la tablaDivisionscon la tabla CustomersAsegrese deeliminar (o eliminar el comentario de) la tablaDivisionsde la pestaaDimensionsycree una tabla de correspondencia en la pestaaMapping Loads.
Aunque hay algunos ejemplos de script al final de esta pgina, tan slo sonelementos de referencia y nicamente debiera emplearlos si necesita ayuda. Leanimamos a tratar de aadir el script de Mapping Loady ApplyMappor su cuenta.
6 Existe alguna otra tabla(s) que pueda(n) ser asociada(s) a otra tabla? Mire enel Visor de Tablas. Cercirese de que busca tablas con slo dos campos.Comntelo con el instructor del curso.
//*************** Divisions ***************Divisions_Map:
MAPPING LOADDivisionID,
DivisionName;SQL SELECT *FROM Divisions;//*************** Customers ***************Customers:LOAD Address,
City,CompanyName,ContactName,Country,CustomerID,DivisionID,applymap ('Divisions_Map', DivisionID)
asDivision,Fax,Phone,PostalCode,StateProvince;
SQL SELECT *FROM Customers;
-
7/21/2019 Developer II Course QV10 PRINT Esp
28/116
QlikView DeveloperII| 3 TABLAS DECORRESPONDENCIA
-
7/21/2019 Developer II Course QV10 PRINT Esp
29/116
QlikView Developer II| 4 CARGAR DATOS DE PRESUPUESTOS
29
4 CARGAR DATOS DE PRESUPUESTOS
En nuestros datos de ejemplo, hay una tablaBudget (Presupuesto)paraEmployeesyOffices. Vamos a cargar esto en nuestro documento QlikView. La tablaBudgetse hacreado como una tabla cruzada y necesitaremos convertirla cuando la leamos enQlikView. Aadiremos tambin un campo a la tablaBudgetque nos permita modificar losvalores del presupuesto para ayudarnos en la planificacin.
Leer Tablas CruzadasPrimero, abriremos la tablaBudgetque se encuentra en el archivo Excel. Esta tablaprecisa de algn trabajo previo para poder leerla en QlikView. Afortunadamente,QlikView cuenta con una excelente funcionalidad para la interpretacin y modificacinde tablas, as que no necesitaremos alterar el aspecto original del archivo Excel.Emplearemos el Asistente de Tabla Cruzada para cargar los datos inicialmente y despushacer ajustes en nuestro script. Tambin incluiremos un campo de entrada.
Objetivos Entender las tablas cruzadas Utilizar el Asistente de Archivos para transformar los datos y crear un script
de carga
-
7/21/2019 Developer II Course QV10 PRINT Esp
30/116
QlikView Developer II| 4 CARGAR DATOS DE PRESUPUESTOS
Ejercicio de carga de datos presupuestarios
Haga lo siguiente:1 Inicie QlikView y guarde una copia de trabajo del archivo
LoadingBudgetData.qvw en el directorio de trabajo de este captulo(C:\QlikViewTraining\DeveloperII\Chapter04).
2 Abra el dilogo Editor de Script.
3 Cree una nueva pestaa a continuacin de la pestaa Sales PersonydenomnelaBudget/Presupuesto.
4 Pulse el botn Archivos de Tablay abra el archivoBudget.xlsque se encuentraen la carpeta de datos de este captulo.
5 En el Asistente de Archivos, comience fijando el Tamao de Cabeceraen unalnea.
6 A continuacin, necesitamos asegurarnos de que no haya filas vacas en elcampo Office. Pulse el botn Siguientey a continuacin pulse Habilitar Paso deTransformacinpara transformar la tabla y luego haga clic en la pestaaRellenar.
7 Pulse el botn Rellenary a continuacin Condicin de Celda. Lo que queremoses que la celda se rellene si est vaca. Pulse Aceptar, Aceptarde nuevo ySiguientepara volver al Asistente de Archivos.
8 Haga clic en Tabla Cruzadapara modificar la tabla de una tabla cruzada a unatabla normal.
9 Haga clic en los Campos Qualifiery teclee 2 a fin de expandirlos para queincluyan ambos campos Office yEmployeeIDen color lila.
Un campo cualificador en una tabla cruzada es un campo que no deberaalterarse durante la carga de la tabla cruzada.
2005 no es un campo cualificador. Es el primero de los campos que queremostransformar para que los aos se siten en un campo y los valores delpresupuesto en otro.
10 Denomine el AtributoBudgetYear.
11 Denomine los datosBudgetAmount.
-
7/21/2019 Developer II Course QV10 PRINT Esp
31/116
QlikView Developer II| 4 CARGAR DATOS DE PRESUPUESTOS
31
12 Pulse Finalizar. Debera tener la siguiente tabla en el script.
CROSSTABLE(BudgetYear, BudgetAmount, 2)LOAD Office,
EmployeeID,[2006],[2007],[2008],[2009][2010],
FROM Datasources\Budget.xls(biff, header is line, embedded labels, table is[Sheet1$], filters(Replace(1, top, StrCnd(null))));
13 Denomine a esta tablaBudgetTemp.
14 Guardey Recargueel documento.
Abra el Visor de Tablas. Como podr observar, hay una clave sinttica entre latablaBudgetsy la tablaEmployees. Queremos eliminar esta clave sinttica.Realizaremos ajustes en nuestro script hasta conseguir los datos quenecesitamos de la tablaBudgetTempy luego la eliminaremos.
15 Vaya al Editor de Script.
16 Por simplicidad, cambie la tablaBudgetTempsegn el siguiente script,reemplazando los nombres de campo individuales por el asterisco. Esto harque su script se ejecute como es debido, incluso cuando las etiquetas de losdatos cambien.
BudgetTemp:CrossTable(BudgetYear, BudgetAmount, 2)
LOAD*FROM[Developer I & II\Datasources\Budget.xls]
-
7/21/2019 Developer II Course QV10 PRINT Esp
32/116
QlikView Developer II| 4 CARGAR DATOS DE PRESUPUESTOS
(biff, embedded labels, header is 1 lines, table isSheet1$, filters(Replace(1, top, StrCnd(null))));
17 Guardey Recargueel script.
Haga lo siguiente:1 Ahora nos ocuparemos del campo con la clave sinttica y aadiremos el
campo de entrada para hacer el pronstico de presupuestos. Vuelva al archivoQlikView con el que ha estado trabajando en este captulo.
2 Vaya el Editor de Scripty coloque el cursor justo despus de las sentencias SETen la pestaaMain.
3 Introduzca la siguiente sentencia.
INPUTFIELDBudgetPrognosis;
La sentencia INPUTFIELDle indica a QlikView que el campo ser un campo deentrada. Tiene que indicar esto en el script antes de pasar a leerse el campo enuna tabla.
4 Vaya a la pestaaBudgety cree una tablaBudgetcomo se observa acontinuacin:
Budget:LOAD
Office &'-'& EmployeeIDAS BudgetKey,BudgetYear,BudgetAmountAS BudgetPrognosis,BudgetAmount
RESIDENT BudgetTemp;
DROP TABLE BudgetTemp;
5 Guardey Recargueel script.
Ahora, podemos utilizar el campo de entradaBudgetPrognosispara establecerdiferentes valores de presupuesto si necesitamos alterar el presupuesto paraque se corresponda con los valores reales.
6 Cree un nuevo Cuadro de Tablatitulado Sales Budget (Presupuestode Ventas) quecontenga los siguientes campos: SalesPerson, BudgetYear, BudgetAmount yBudgetPrognosis.
7 Desplace el cursor del ratn a la columnaBudgetPrognosisdel cuadro de
tabla. Aparecer un icono de flecha de entrada.
-
7/21/2019 Developer II Course QV10 PRINT Esp
33/116
QlikView Developer II| 4 CARGAR DATOS DE PRESUPUESTOS
33
8 Pulse en el icono de entrada de cualquier fila e introduzca cualquier nmero.
9 Haga clic con el botn derecho en la columnaBudgetPrognosis. Observe lasopciones relacionadas de Restaurar Valor nico, Restaurar Valores PosiblesyRestaurar Todos los Valores.
Ahora podemos utiliza el campo de entradaBudgetPrognosispara fijar diferentesvalores de presupuesto si necesitamos alterar el presupuesto para hacerlocorresponder con los valores reales.
-
7/21/2019 Developer II Course QV10 PRINT Esp
34/116
QlikView Developer II| 4 CARGAR DATOS DE PRESUPUESTOS
-
7/21/2019 Developer II Course QV10 PRINT Esp
35/116
QlikView Developer II| 5 SCRIPT AVANZADO
35
5 SCRIPT AVANZADO
Hay varias mediciones clave que crear en este captulo. Necesitamos calcularlas en elscript. stas son OrderLineAmount, CostOfGoodsSold y Margin. Para hacer estos camposde clculo, necesitamos recurrir a script avanzado. Tambin tendremos que crear uncampo clave denominado CategoryType.
Una condicin en un campo de una tablaEl campo CategoryType se puede crear utilizando el campo CategoryID. Si el campoCategoryIDes 5 6, CategoryTypedebera serFootwear(calzado), si no el tipo deberaser Clothing(ropa). Vamos a crear este campo en el script.
Agregar datosUna de las mediciones clave en este captulo es OrderSalesAmount. Necesitamos calcularsta en el script. Por el momento ya tenemosLineSalesAmountpero queremos el total porcada pedido. Para ello, necesitamos agregarLineSalesAmount.
Para agrupar o agregar datos se emplea la clusula GROUP BYen la sentencia LOAD. En
este caso, necesitamos agregar los datos en la tabla OrderDetailspor OrderID.Unir Tablas
Queremos aadir el campo OrderSalesAmounta la tabla Orders. Para ello podemosaadir los valores de esta tabla a la tabla Orders. Para usar dos tablas juntas como en estecaso, hemos de comenzar por combinarlas en una sola. Aqu, el JOINentre tablas se puederealizar contra la base de datos fuente o podemos emplear un comando QlikView JOIN.Como ya tenemos los datos fuente que necesitamos cargados en la memoria, utilizaremosla sentencia JOIN LOADen la tabla que acabamos de crear.
Consejo: Las malas uniones pueden traer errores de penalizacin en cuanto al empleo de
memoria. Si le llega un error que anuncia Sin memoria, asegrese de comprobardoblemente su script y su modelo de datos.
ConcatenacinOtra forma de unir datos procedentes de mltiples tablas es mediante la concatenacin.Hay dos maneras de concatenar los datos. A continuacin analizaremos cada una de ellas.
ObjetivosAprender y utilizar Condiciones en tablas Agregacin Unin de tablas Carga Precedente
-
7/21/2019 Developer II Course QV10 PRINT Esp
36/116
QlikView Developer II| 5 SCRIPT AVANZADO
Concatenacin automtica
Si los nombres de campos y el nmero de campos de dos o ms tablas cargadas sonexactamente iguales, QlikView concatenar automticamente los resultados de lasdiferentes sentencias LOADo SELECTen una tabla
Ejemplo:LOAD a, b, c FROM Table1.csv;LOAD a, c, b FROM Table2.csv;
La tabla lgica resultante tiene los campos a, b y c. El nmero de registros es la suma delos nmeros de registros de la tabla 1 y la tabla 2.
Reglas:
- El nmero y los nombres de los campos deben ser idnticos.
- El orden de los campos listados en cada sentencia es arbitrario.
- El orden de las dos sentencias es arbitrario.
Concatenacin forzada
Si dos o ms tablas no tienen exactamente el mismo conjunto de campos, an es posibleobligar a QlikView a que concatene ambas tablas. Esto se hace mediante el prefijoConcatenateen el script, el cual concatena una tabla con otra o con la ltima tabla lgicacreada anteriormente.
Ejemplo:
LOAD a, b, c FROM Table1.csv;Concatenate LOAD a, c FROM Table2.csv;
La tabla lgica resultante tiene los campos a, b y c. El nmero de registros en la tablaresultante es la suma de los nmeros de registros de la tabla 1 y la tabla 2.
El valor del campo b en los registros que proceden de la tabla 2 es NULO.
Reglas:
- El nmero y los nombres de los campos deben ser idnticos.
- El orden de los campos listados en cada sentencia es arbitrario.
- A menos que se especifique un nombre de tabla de una tabla anteriormentecargada en la sentencia concatenate, el prefijo concatenate usa la tabla lgicaanteriormente creada. El orden de las dos sentencias por lo tanto no es arbitrario.
Evitar la concatenacin
Si dos tablas tienen el mismo conjunto de campos y por lo tanto se concatenarannormalmente de forma automtica, podr evitar la concatenacin con el prefijoNoConcatenate. Esta sentencia impide la concatenacin con cualquier tabla lgica existenteque tenga el mismo conjunto de campos.
La sintaxis es la siguiente:
-
7/21/2019 Developer II Course QV10 PRINT Esp
37/116
QlikView Developer II| 5 SCRIPT AVANZADO
37
NoConcatenate ( LoadStatement | SelectStatement )
Ejemplo:
LOAD a, b FROM Table1.csv;Noconcatenate LOAD a, b FROM Table2.csv;
En nuestros datos, nos han suministrado un conjunto adicional de nuevos empleados que
no estn contenidos an en el archivo EmpOff.xls. Para aadir estos datos, necesitamosmodificar nuestro script de carga.
Carga precedenteLa siguiente medida clave que vamos a incorporar es el CostOfGoodsSold(Coste de ventade productos) Para calcular este valor, necesitamos aadir el campo UnitCostdesde latablaProductsa la tabla OrderDetails. Haremos esto empleando una tabla decorrespondencia y aplicaremos esto a la tabla OrderDetails.
-
7/21/2019 Developer II Course QV10 PRINT Esp
38/116
QlikView Developer II| 5 SCRIPT AVANZADO
EjerciciosHaga lo siguiente: condicin en un campo de una tabla1. Inicie QlikView y guarde una copia del archivo AdvancedScripting.qvw en el
directorio de trabajo de este captulo(C:\QlikViewTraining\DeveloperII\Chapter05).
2. Abra el dilogo Editor de Scripty vaya a la pestaaDimensiones
3. Busque la tabla Categoriesy coloque el cursor tras el ltimo campo de estatabla.
4. Introduzca una coma y pulse INTROpara ir a una nueva fila. Introduzca losiguiente para crear el CategoryType.IF(CategoryID = 5 OR CategoryID = 6, 'Footwear','Clothing') AS CategoryType;
La sentencia IFde QlikView utiliza la siguiente sintaxis:if( condition , then , else )
La condicin debera evaluarse como verdadera o falsa. Si la condicin esverdadera, entonces la parte thenser procesada. Pero si la condicin es falsase procesar la parte elsede la sentencia.
5. Guarde y recargue el script.
6. Observe los campos. Ahora podr ver que tenemos un nuevo campodenominado CategoryType.
Haga lo siguiente: agregacin1. Abra el archivo QlikView con el que ha estado trabajando en este captulo.
2. Abra el Editor de Scripty coloque el cursor detrs de la tabla OrderDetailsen lapestaa Orders.
3. Aada la siguiente sentencia en su script:LOAD OrderID,
sum(LineSalesAmount) ASOrderSalesAmount
RESIDENT OrderDetailsGROUP BY OrderID;
4. Observe la funcin de agregacin sum(LinesSalesAmount) incluida en estasentencia. Esta funcin ser evaluada sobre todas las combinaciones posiblesde los otros campos en la sentencia LOAD(OrderID). La clusula GROUP BYsenecesita para agregar o agrupar campos distintos de los incluidos en laagregacin. En este caso, ser igual al total de SalesAmountpara cada
OrderID.Haga lo siguiente: unir tablas1. Vaya de nuevo al Scripty site el cursor justo enfrente de LOADen la tabla que
acaba de crear.
2. Introduzca LEFT JOIN(Orders) frente a la sentencia LOAD. El resultado deberaser el siguiente:LEFT JOIN (Orders)
-
7/21/2019 Developer II Course QV10 PRINT Esp
39/116
QlikView Developer II| 5 SCRIPT AVANZADO
39
LOAD
Aqu utilizamos una carga LEFT JOINporque queremos asegurarnos de que norecibimos ningn valor de Orders que no exista en la tabla Orders. EnQlikView el comportamiento de una unin join por defecto es una uninexterna completa. Por lo tanto, si no hubiera campos que correspondan entre
las dos tablas unidas, usted recibir un producto cartesiano de los registros.Como estamos especificando OrderIDen ambas tablas y estamosespecificando Izquierda (Left), slo se incluirn los registros que secorrespondan con OrderIDincluidos en la tabla Orders. Incluimos el campoOrderSalesAmountporque eso es lo que queremos aadir a la tabla Orders.
3. Guarde y recargue el script.
Haga lo siguiente: concatenacin1. Abra el dilogo Editor de Scripten el archivo con el que ha estado trabajando en
este captulo.
2. Site el cursor en la pestaaFile Datadirectamente tras haber cargado la tablaEmployees. Necesitamos duplicar los campos que tenemos actualmente paraEmployees, as que no utilizaremos el Asistente de Archivosen este caso. En sulugar, copie la sentencia LOADdeEmployeey pegue el texto copiado tras eltexto original.
3. Como el nuevo formato de los datos del archivo coincide con los de nuestroprimer archivo, slo necesitamos cambiar la fuente de los datos. Revise laclusula From en la nueva sentencia load de modo que ponga lo siguiente:FROM Datasources\Employees_New.xls (biff, embeddedlabels, table is [Employee$]);
4. Pulse Aceptary guarde el documento QlikView.
5. Ejecute el script.
Si observa algunas claves sintticas nuevas, o un nuevo valor $Table deEmployee-1, sabr que algo no funcion bien en la concatenacin automtica.
Podr evitar problemas en la concatenacin automtica empleando el prefijoconcatenate en las sentencias de carga LOADque usted sepa que deberanconcatenarse.
6. Aada el prefijo concatenate a la nueva sentencia LOADEmployeeyespecifique la tablaEmployees.
Esto siempre concatenar ambas tablas, incluso si se hicieran posteriormentecambios sin querer en el script de una de las dos cargas, pero no la otra. Lanueva sentencia LOADEmployeedebera comenzar de la siguiente forma:Concatenate (Employees) Load
7. Habr notado que hay muy pocas diferencias entre nuestras dos sentenciasLOADEmployee. De hecho, podemos usar otra caracterstica de QlikView paracargar los mismos datos en una nica sentencia de carga. Empleando unaespecificacin de carcter comodn en el nombre de archivo de FROM,QlikView cargar automticamente desde todos los archivos que se ajusten a
-
7/21/2019 Developer II Course QV10 PRINT Esp
40/116
QlikView Developer II| 5 SCRIPT AVANZADO
dicha especificacin y concatenar los datos en una nica tabla lgica. Comoambos nombres de archivo comienzan con Emp y tienen la extensin dearchivo .xls, podemos utilizar el comodn Emp*.xls en la clusula FROM.Si hacemos este cambio y comentamos la segunda sentencia LOADEmployee,el script tendr ahora el siguiente aspecto:
Employees:Load Office & - & EmpID as BudgetKey,EmpID AS EmployeeID,//[Last Name],//[First Name],[First Name] & ' ' & [Last Name] AS Name,Title,[Hire Date],Year([Hire Date]) AS [HireYear],Office,Extension,[Reports To],[Year Salary]
FROM Datasources\Emp*.xls (biff, embedded labels,table is [Employee$]);//Employees://Concatenate (Employee) Load
//Office & - & EmpID as BudgetKey,//EmpID AS EmployeeID,//[Last Name],//[First Name],//[First Name] & ' ' & [Last Name] AS
Name,//Title,//[Hire Date],
//Year([Hire Date]) AS [HireYear],//Office,//Extension,//[Reports To],//[Year Salary]
//FROM Datasources\Employees_New.xls (biff, embeddedlabels, table is [Employee$]);
8. Guarde el script revisado y el documento QlikView. A continuacin recarguey verifique que los datos deEmployeeno han cambiado.
9. Como ejercicio opcional, puede que desee tratar de determinar por qu a losempleados del archivo Employees_New.xls no se les han asignado direcciones
de correo electrnico (el campo e-mailes nulo para estos empleados). Quhay que hacer para corregir este problema?
Haga lo siguiente: carga precedente1. En el archivo QlikView con el que ha estado trabajando en este captulo, vaya
al Editor de Scripty site el cursor al final de la pestaaMapping Loads.
-
7/21/2019 Developer II Course QV10 PRINT Esp
41/116
QlikView Developer II| 5 SCRIPT AVANZADO
41
2. Cree la siguiente tabla, bien teclendola desde el principio o pulsando el botnSeleccionar.UnitCost_Map:
MAPPING LOADProductID,UnitCost;
SQL SELECT *FROM Products;
3. Vaya a la pestaa Orderse incluya la siguiente lnea de script al final de latabla OrderDetailsjusto encima de la lnea SQL SELECT *. Recuerdeeliminar el punto y coma de la lnea superior y reemplcelo por una coma.applymap('UnitCost_Map', ProductID, 0) * Quantity ASCostOfGoodsSold;
Combinamos la funcin applymapcon un clculo y creamos el campoCostOfGoodsSolddirectamente en la LOADprecedente de la tablaOrderDetails.
La ltima de las mediciones clave que tenemos que crear en el script es elMargen.Margin/Margense calcula comoLinesSalesAmountCostOfGoodsSold. La forma ms fcil de hacer esto es colocar una cargaprecedente sobre la carga precedente de la tabla OrderDetails. Puede aadirvarias cargas precedentes una encima de otra y se evaluarn de abajo a arriba.Esto significa que puede utilizar un campo creado en una carga precedente enuna nueva carga precedente sobre la primera.
4. Emplearemos esta funcionalidad para crear el campoMargin.
5. Site el cursor tras la etiqueta OrderDetails.
6. Cree una carga precedente aadiendo el script siguiente:LOAD
LineSalesAmount - CostOfGoodsSold ASMargin,*
;
7. El script completo de OrderDetailsdebera presentar el siguiente aspecto://*************** Order Details tableOrderDetails:LOAD
LineSalesAmount - CostOfGoodsSold AS Margin,*;
LOAD Discount,LineNo,OrderID,ProductID,Quantity,UnitPrice,UnitPrice * Quantity * (1 - Discount) ASLineSalesAmount,
-
7/21/2019 Developer II Course QV10 PRINT Esp
42/116
QlikView Developer II| 5 SCRIPT AVANZADO
applymap('UnitCost_Map', ProductID, 0) *Quantity ASCostOfGoodsSold;SQL SELECT * FROM `Order Details`;LEFT JOIN (Orders)
LOAD OrderID,
sum(LineSalesAmount) AS OrderSalesAmountRESIDENT OrderDetailsGROUP BY OrderID;
8. Guarde y recargue el script.
Los nuevos campos de medidas clave deberan estar listos para usar.
-
7/21/2019 Developer II Course QV10 PRINT Esp
43/116
QlikView Developer II| 5 SCRIPT AVANZADO
43
Ejercicio extraHaga lo siguiente:1. Inicie QlikView y guarde una copia de trabajo del archivo
AdditionalExercises.qvw en la carpeta de crdito extra de este captulo(C:\QlikViewTraining\DeveloperII\ExtraCredit_Chapter05).
2. Para limpiar el script un poco ms, una la tabla Categoriesmediante Joinconla tablaProducts. Asegrese de no recibir ninguna categora que no exista enla tablaProducts.//************** Categories table **************Categories:LEFT JOIN (Products)LOAD CategoryID,
CategoryName,Description AS CategoryDescription,IF(CategoryID = 5 OR CategoryID = 6,
'Footwear','Clothing') ASCategoryType;
SQL SELECT *FROM Categories;
3. Cree una tabla pivotante con las dimensiones CategoryTypey CategoryName.
4. Cree las siguientes cuatro expresiones:
Sales Sum(LineSalesAmount)
COGS Sum(CostOfGoodsSold)
Margin Sum(Margin)
Margin % Sum(Margin)/ Sum(LineSalesAmount)
5. D a la tabla el formato que desee.
Figura 1. La tabla pivotante resultante.
-
7/21/2019 Developer II Course QV10 PRINT Esp
44/116
QlikView Developer II| 5 SCRIPT AVANZADO
-
7/21/2019 Developer II Course QV10 PRINT Esp
45/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
45
6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
Anlisis de ConjuntosQlikView siempre ha sido potente en el clculo de agregados para la seleccin actual de
datos. No obstante, cuando se deseaba comparar resultados de las diferentes seleccionesen un mismo grfico haba que preparar los datos en el script o recurrir a expresionescomplicadas con clusulas if.
El anlisis de conjuntos cambia todo esto, haciendo posible modificar cualquier funcinde agregacin con cualquier conjunto de selecciones.
El conjunto puede definirse como un marcador, una seleccin sobre la marcha en uno oms campos, una funcin de selecciones actuales, la inversa de las selecciones actuales,las selecciones anteriores, la totalidad de los datos, etc.
Las posibilidades son infinitas y sin embargo la sintaxis es muy clara y sencilla.
Anlisis Indirecto de Conjuntos
Las selecciones en un campo se pueden expresar basndose en selecciones efectuadas enotro campo, como "Seleccionar todos los valores posibles en Clientesa partir de unasVentasdel ao pasado.
Visin general
Se pueden emplear conjuntos en las funciones de agregacin. La funcin de agregacinnormalmente agregar sobre el conjunto de todos los posibles registros definidos por laseleccin actual. Se puede definir un conjunto alternativo de registros mediante unaexpresin de conjunto. De ah que un conjunto sea conceptualmente similar a efectuar una
seleccin.
Una expresin de conjunto va siempre encerrada entre llaves, por ej. {BM01}.
Identificadores de conjunto
Objetivos
Introducir los clculos avanzados en grficos y tablas, incluyendo: Anlisis de conjuntos Expansin de signo dlar Funcin aggr
Completar los ejercicios con ejemplos de cada una de estas funciones
-
7/21/2019 Developer II Course QV10 PRINT Esp
46/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
Hay una constante que se puede utilizar para denotar un conjunto de registros. El 1.Representa el conjunto completo de todos los registros de una aplicacin.
El signo dlar $representa los registros de la seleccin actual. La expresin de conjunto{$}es por tanto equivalente a no declarar una expresin de conjunto. {1-$}es la msinteresante, puesto que define lo inverso de la seleccin actual, esto es, todo lo que la
seleccin actual excluye.Las selecciones de las pilas Atrs/Adelante pueden utilizarse como identificadores deconjuntos, por medio del signo dlar: $1representa la seleccin previa, esto es, laequivalente a pulsar el botn Atrs. De forma similar, $_1representa un paso haciadelante, esto es, equivale a pulsar el botn Adelante. Se puede utilizar cualquier nmeroentero sin signo en las notaciones Atrs y Adelante. $0representa a la seleccin actual.
Finalmente, se pueden utilizar marcadores como identificadores de conjuntos. Se puedeutilizar, o bien el ID de marcador, o el nombre del marcador, por ej. BM01o MiMarcador.
Operadores de conjunto
Hay diversos operadores de conjunto que se pueden utilizar en las expresiones deconjunto. Todos los operadores de conjunto emplean conjuntos como operandos, como yase ha descrito anteriormente, y devuelven un conjunto como resultado. Los operadoresson los siguientes:
+ Unin. Esta operacin binaria devuelve un conjunto
compuesto por los registros que pertenecen a cualquiera de los dos
operandos de conjunto.
Exclusin. Esta operacin binaria devuelve un conjunto
formado por los registros que pertenecen al primero, pero no al
segundo, de los dos operandos de conjunto. Adems, cuando se emplee
como operador unario, devuelve el otro conjunto complementario.
* Interseccin. Esta operacin binaria devuelve un conjunto
formado por los registros que pertenecen a ambos operandos de
conjunto.
/ Diferencia simtrica(XOR). Esta operacin binaria
devuelve un conjunto formado por los registros que pertenecen a
cualquiera, pero no ambos, de los operandos de conjunto.
El orden de prevalencia es
1) Unario menos (complementario),
2) Interseccin y Diferencia simtrica, y
3) Unin y Exclusin.
-
7/21/2019 Developer II Course QV10 PRINT Esp
47/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
47
Dentro de un grupo, la expresin se evala de izquierda a derecha. Se pueden definir otrosrdenes alternativos mediante la utilizacin de parntesis estndar, lo cual puede resultarnecesario pues los operadores de conjunto no son conmutables, esto es, por ejemplo,A+(B-C) es distinto de (A+B)-C lo cual a su vez, es distinto de (A-C)+B.
Ejemplos de operadores de conjuntos:
sum({1-$} Ventas )
devuelve las ventas de todo, excluida la seleccin actual.
sum({$*BM01} Ventas )
devuelve las ventas de la interseccin entre la seleccin actual y el marcadorBM01.
sum({-($+BM01)} Ventas )
devuelve las ventas excluidas por la seleccin actual y el marcador BM01.
Nota: La utilizacin de operadores de conjuntos junto con expresiones bsicas deagregacin que incluyan campos procedentes de mltiples tablas QlikView puedeacarrear resultados impredecibles y debera evitarse. Por ejemplo, si CantidadyPrecioson campos de tablas diferentes, la expresin sum({$*BM01}Cantidad*Precio) deberaevitarse.
Modificadores de conjunto
Un conjunto puede modificarse mediante una seleccin adicional o una modificada.
Dicha modificacin se puede escribir en la expresin de conjunto.
El modificador se compone de uno o varios nombres de campo, cada uno de ellos seguido
por una seleccin que debera realizarse en el campo y todo ello enmarcado por signos decomillas angulares < >. Por ej.
.
Los nombres de campo y valores de campo pueden registrarse de la forma habitual, porej.
.
Hay varias maneras de definir una seleccin:
Una forma simple sera realizar una seleccin basada en los valores de otro campo, por ej.. Este modificador tomar los valores seleccionados de
FechaEntrega y los aplicar como seleccin a FechaPedido.
Nota: Si hay muchos valores distintos, ms de 200, evite esta operacin porque consumemucha CPU.
-
7/21/2019 Developer II Course QV10 PRINT Esp
48/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
El caso ms habitual, no obstante, consiste en efectuar una seleccin basada en una listade valores de campo encerrada entre llaves y con los valores separados por comas, por ej.. Las llaves aqu definen un conjunto de elementos, donde stospueden referirse, o bien a valores de campo, o a bsquedas de valores de campo.
Una bsqueda siempre viene definida por el empleo de comillas dobles, por ej.
seleccionar todas las recetas que incluyan la cadena 'ajo'.
Nota: Las bsquedas no son sensibles a maysculas y tambin se realizan sobre losvalores excluidos.
Consejo: Los conjuntos vacos de elementos, bien de forma explcita, por ej., o de forma implcita, por ej. (una bsqueda sinresultados) implican cero productos, esto es, devolvern un conjunto de registros no
asociados a producto alguno.
Adems, la seleccin dentro de un campo puede definirse empleando operadores deconjuntos y diversos conjuntos de elementos, como por ejemplo, el modificador
lo cual seleccionar todos los aos que comiencen por 20 adems de 1997, excepto2000.
La notacin anterior define nuevas selecciones, descartando la seleccin actual en el
campo. Sin embargo, si quiere basar su seleccin en la seleccin actual del campo yaadir valores de campo, por ej. si quisiera un modificador . Una forma breve y equivalente de escribir esto es , estoes, el operador de la asignacin define implcitamente una unin.
Tambin se pueden definir las intersecciones, exclusiones y diferencias simtricasimplcitas mediante *=, -= y /=.
Finalmente, para campos en modo and, tambin existe la posibilidad de una exclusinforzada. Si desea forzar la exclusin de valores especficos de campo, necesitar emplear"~" frente al nombre de campo.
Nota: Un modificador de conjuntos puede emplearse solo o dentro de un identificador deconjuntos. No puede utilizarse en una expresin de conjuntos. Cuando se utiliza en unidentificador de conjuntos, el modificador ha de escribirse inmediatamente detrs delidentificador de conjuntos, por ej. {$}. Cuando se utiliza solo, seinterpreta como una modificacin de la seleccin actual.
-
7/21/2019 Developer II Course QV10 PRINT Esp
49/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
49
Expansiones de Signo-DlarLas expansiones de signo dlar son definiciones de reemplazos de texto empleados en elscript o en las expresiones. Este proceso es lo que se conoce con el nombre de expansin,
incluso si el nuevo texto es ms corto. El reemplazo se efecta justo antes de evaluar lasentencia de script o la expresin. Tcnicamente se trata de una expansin de macro.
Una expansin de macro siempre comienza por $( y termina con ) y el contexto entre losparntesis define cmo se realizar el reemplazo. Para evitar la posible confusin con lasmacros de script en adelante nos referiremos a las expansiones de macro comoexpansiones de signo dlar.
Nota: La expansin de macro no tiene nada que ver con las macros de script (VB o Javascript definidas en el mdulo de script).
V
Expansin de Signo Dlar empleando una variable
Cuando se utiliza una variable para reemplazo de textos en el script o en una expresin, seemplea la sintaxis:
$(nombrevariable)
$(nombrevariable)se ampla al valor contenido en nombrevariable. Si nombrevariablenoexiste, la expansin ser la cadena vaca.
Para expansiones numricas de variable, se emplea la sintaxis:
$(nombrevariable)
$(nombrevariable)siempre da un punto como signo decimal en el valor numrico denombrevariable, posiblemente con notacin exponencial (para nmeros muygrandes/pequeos). Si no existe nombrevariableo no contiene un valor numrico, seexpandir a 0.
Expansiones de signo dlar con Parmetros
Se pueden utilizar parmetros en las expansiones de signo dlar. La variable debercontener entonces parmetros formales, como $1, $2, $3etc. Al expandirse la variable,los parmetros deberan consignarse en una lista separada por comas.
Si el nmero de parmetros formales excede al de parmetros reales slo se expandirnlos parmetros formales que se correspondan con parmetros reales. Si el nmero deparmetros reales excede al de parmetros formales, se ignorarn los parmetros realessuperfluos.
El parmetro $0devuelve el nmero de parmetros invocados realmente por una llamada.
Expansin de signo dlar con una Expresin
Se pueden utilizar expresiones en las expansiones de signo dlar. El contenido entreparntesis deber comenzar entonces por un signo igual:
-
7/21/2019 Developer II Course QV10 PRINT Esp
50/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
$(=expresin)
La expresin ser evaluada y el valor se utilizar en la expansin.
Ejemplo:
$(=Year(Today())); // devuelve el ao natural basndose en la fecha del sistema,
con lo que, si su fecha del sistema es 28 de mayo de 2009, devuelve '2009'.$(=Only(Year)-1); // devuelve el ao anterior al seleccionado.
Funcin AGGRAGGRes una potente funcin de QlikView que devuelve un conjunto de valores deexpresin calculados sobre las dimensiones. El resultado puede compararse con lacolumna de expresiones de un grfico local, evaluado en el contexto en quereside lafuncin aggr. Cada dimensin debe ser un nico campo y no puede ser una expresin (porej. una dimensin calculada).
Si el argumento de la expresin va precedido por el cualificador nodistinct, cada
combinacin de valores de dimensin puede generar ms de un valor de retorno,dependiendo de la estructura de datos subyacente. Si el argumento de la expresin vaprecedido del cualificador distinct, o si no se utiliza cualificador alguno, cadacombinacin de valores de dimensin generar un nico valor de retorno.
Por defecto, la funcin aggragregar sobre el conjunto de posibles registros definidos porla seleccin. Se puede definir un conjunto alternativo de registros mediante una expresinde conjunto.
Empleando esta funcin en dimensiones calculadas es posible obtener agregacin degrficos anidada en mltiples niveles.
Cuando se emplea aggren expresiones de grficos, es posible obtener los totales de
sumas de filas en una tabla pivotante.Ejemplos:
aggr( sum(Ventas), Pas )
aggr( nodistinct sum(Ventas), Pas )
aggr( sum(Ventas), Pas, Regin )
count( aggr( sum(Ventas), Pas ))
-
7/21/2019 Developer II Course QV10 PRINT Esp
51/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
51
Ejercicios - Clculos Avanzados
Haga lo siguiente: Anlisis de ConjuntosCree una tabla simple que muestre una comparativa de ventas anuales por
CompanyNamebasado en el ao seleccionado por el usuario.
1. Navegue hasta el directorio c:\QlikViewTraining\DeveloperII\Chapter06 yabra el archivo Set_Analysis.qvw
2. Guarde una copie del archivo para preservar el original en caso de que deseeempezar desde el principio ms tarde. Haga esto mediante el comando Archivo|Guardar como. Tambin hay un archivo acabado en _Solution.qvw quecontiene el ejercicio completo para futura referencia.
3. Cree una copia de la hoja Sheetsy denomnelaEntorno de Trabajo-4oWorkspace-4. Dirjase a su nueva hoja.
4. Asegrese doblemente de que hay un cuadro de lista en la hoja para el Ao. Sino, aada uno.
5. Haga clic en una zona en blanco de la hoja y elija Nuevo Objeto de Hoja| Grficoen el men contextual.
6. Pulse el icono de Tabla Simple(la esquina inferior derecha de los Tipos deGrfico) e introduzca Comparativa Anual en el ttulo de la ventana. PulseSiguiente.
7. Introduzca Customer en las Dimensiones Utilizadasy pulse Siguiente.
8. Cree las tres expresiones siguientes utilizando las etiquetas que se suministran:
1
Etiqueta=Only(Year)
ExpresinSum({$}LineSalesAmount)
2 =Only(Year)-1 Sum({$} LineSalesAmount)
3 =Only(Year) & ' vs' &(Only(Year)-1)
Sum({$}Sales) -Sum({$} LineSalesAmount)
9. Pulse Finalizar.10.Guarde su archivo QlikView y contine editando la tabla simple de la
Comparativa Anual.
11.Establezca el criterio de ordenacin de modo que coincida con el que se ilustraen la imagen inferior; recuerde que Customer (Cl iente)deber configurarsecomo Texto.
-
7/21/2019 Developer II Course QV10 PRINT Esp
52/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
12.En la pestaa Efectos Visuales establezca los valores negativos de lacomparativa anual en rojo y los positivos en verde.
-
7/21/2019 Developer II Course QV10 PRINT Esp
53/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
53
13.Vuelva a la pestaa General y aada una Condicin de Clculopara garantizarque el usuario selecciona unAopara poder iniciar la comparacinintroduciendo lo siguiente en el recuadro de la Condicin de Clculo:
Count(distinct [Year])= 1
14.Pulse el botn MensajesdeErrorde la pestaa General y a continuacin en Lacondicin de clculo del objeto no se cumple, en la lista de Mensajes Estndar.
15.Introduzca la frase: Seleccione un Ao para compararlo con otro ao anterioren el recuadro de Mensaje Personalizadoy pulse Aceptar.
16.Pulse Aceptarde nuevo para cerrar el dilogo de Propiedades del Grfico.
17.Con 2009 seleccionado en el cuadro de lista Yearque aadi al principio delejercicio, su tabla simple presentar ms o menos el siguiente aspecto:
-
7/21/2019 Developer II Course QV10 PRINT Esp
54/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
18.Guarde su trabajo.
-
7/21/2019 Developer II Course QV10 PRINT Esp
55/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
55
Haga lo siguiente: Anlisis de Conjuntos Avanzado
1. Contine trabajando en el archivo que ha estado utilizando hasta ahora en estemismo apartado de ejercicios.
2. Cree un grfico que compare ventas de productos en la categora Babywear
(Ropa de beb) con la categora Childrens Wear(Ropa de nios)a lo largodel tiempo para la oficina de ventasNice.
3. Para ello necesitar crear una expresin que utilice anlisis de conjuntos yExpansin de Signo Dlaren lugar de las tradicionales sentencias if().
4. Fije el nombre de la categora a fin de hallarBabyweary la oficina en 4.
5. Preste atencin a los < > y{}.
Solucin:
sum({$} LineSalesAmount)
sum({$} LineSalesA-mount)
Haga lo siguiente: Ejercicio con la funcin AGGR6. Contine trabajando en el archivo que ha estado utilizando hasta ahora en este
mismo apartado de ejercicios.
7. Cree una tabla que muestre si hay algn enlace entre el nmero de pedidosencargados por los clientes y el valor medio del pedido. La tabla debera
-
7/21/2019 Developer II Course QV10 PRINT Esp
56/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
suministrar informacin sobre cuntos clientes han realizado un pedido, dospedidos, etc. as como tambin el valor medio del pedido.
8. Hay tres pasos en este proceso. Primero, cree una dimensin calculada para elnombre de pedidos (como cuntos clientes hicieron un pedido, dos pedidos,tres pedidos, etc.). Esto requiere emplear la funcin aggr. Primero, para contar
el nmero de pedidos utilice:Count(distinct OrderID)
Y luego, para agregarlos a la Dimensin Customerutilice:
aggr(, CustomerID)
Ponindolo todo junto, introduzca una dimensin calculada basada en elsiguiente clculo:
aggr(count(Distinct OrderID), CustomerID)
Esto crear los necesarios recipientes deordenacin para Customer.
9. A continuacin necesitamos hallar la cantidad media de pedidos. Salesvienede la tabla Sales Detaily es un elemento de lnea por cada producto vendido.As, un pedido puede tener varios productos y por tanto, varias lneas condatos de Ventas, por lo que necesitamos agregar por OrderID(IDPedido) paraobtener la cantidad total de ventas por pedido.
avg(aggr(sum(LineSalesAmount), OrderID)
-
7/21/2019 Developer II Course QV10 PRINT Esp
57/116
QlikView Developer II| 6 CLCULOS AVANZADOS EN OBJETOS DE HOJA
57
-
7/21/2019 Developer II Course QV10 PRINT Esp
58/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
Tablas de Enlace y Tablas ConcatenadasLas tablas de enlace combinan informacin que tiene diferentes niveles de detalle ofrecuencia. Por lo general, cuando ms conviene utilizarlas es cuando las mtricas que seestn midiendo no poseen la misma base de tiempo, porque quizs una sea una agregacinsobre un perodo de tiempo, por ej. por Mes. Las tablas de enlace tambin se emplean
cuando los datos no cumplen con los requisitos de negocio de un clculo. As que puedepensar en ellas como lo que su propio nombre indica: son tiles para enlazar informacinque de otro modo no se enlazara automticamente mediante la lgica asociativa deQlikView.
En otras palabras, cuando cargamos los datos se pueden dar ciertos casos en los quenecesitamos almacenar informacin de hechos en diferentes tablas, como por ejemplo, lastransacciones aisladas de los presupuestos. Cada tipo de tabla necesitar enlazarse conmltiples dimensiones comunes (como Tiempo y Producto) los cuales entonces causaranbucles en la estructura de datos. Para esquivar estas situaciones problemticas, creamoslas tablas de enlace que almacenan las formas individuales en que cada tabla de hechos se
asocia con las dimensiones comunes.Concatenacin
La concatenacin puede servir para reducir el nmero de tablas de hechos en unaestructura si hay suficientes elementos en comn entre las tablas de hechos como paravalidar dicha combinacin.
Cuando las tablas de hechos contienen la misma cohesin de informacin y se encuentrauna clave comn entre ambos hechos, una operacin de join externo es preferible a unaoperacin concatenate, pues los registros de salida se uniran registro por registro y eso esadecuado para una operacin a nivel de un nico registro. (Por ej. para un determinadoregistro de hechos SalesAndBudget, poder calcular la diferencia entre la cantidad de
ventas y la cantidad de presupuesto.)
Calcular el Cambio Neto en un CampoMientras se cargan los datos, podr ver lo que se est cargando mediante la funcin peek()y podr utilizarla en clculos que expresen las relaciones entre registros. Eso puederesultar til para comprender una hoja de contabilidad a lo largo del tiempo, por ejemplo.
Objetivos Entender el uso de las tablas de enlace Calcular el cambio neto dentro de un campo Emplear las funciones avanzadas para la gestin del tiempo Saber por qu son importantes la agregacin dinmica y la correspondencia
de intervalos.
-
7/21/2019 Developer II Course QV10 PRINT Esp
59/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
59
Tambin podemos ver lo que se ha cargado en el proceso de carga con la funcinprevious().La funcin previous()slo podr utilizarse para mirar un registro ms atrs en elproceso de carga. Si necesita mirar ms atrs de un registro en el proceso de carga, tendrque anidar la funcin previous()tal que:
Previous(previous(myRecord))
Esto puede ser problemtico y pesado cuando se desea ver el cambio neto total o elcambio porcentual.
Imaginemos que necesitamos contar el nmero de unidades que hay en un determinadositio en una semana y necesitamos encontrar el porcentaje de utilizacin de una unidad enun determinado sitio.
Si las unidades estn en mltiples sitios pero retornan al mismo sitio dentro de la mismasemana, peek() y previous() pueden funcionar, pero requieren una codificacin complejacon bucles FOR o cargas RESIDENT. No obstante, podemos evitarlo agrupando lainformacin desde una tabla de rastreo y uniendo por la izquierda el resultado en la tablade rastreo.
Los pasos del ejercicio muestran la diferencia.
Funciones InDate e Islas de DatosEsta seccin incluye diversos conceptos empleados para crear aplicaciones: las funcionesInDate, las Islas de Datos o Islas de Fechas.
Las Islas de Datos o Islas de Fechas son tablas que no van directamente enlazadas conotras tablas (tablas que son independientes de cualquier enlace explcito). Podemos pensaren ellas como en un conjunto de valores que pueden cambiar con una seleccin realizadapor el usuario y obligarn a que los nuevos resultados se muestren en el modelo de datosde QlikView por medio de una conexin de campo no clave.
Sin embargo, cuando utilice este modelo no cambiar el estado de las selecciones en elmodelo de datos QlikView subyacente. ste normalmente se emplea para KPIs de formaque, cuando se desplace una pestaa con ms detalle el usuario tenga una vista completa yuna seleccin de los datos para filtrado.
Si hay una seleccin en el modelo de datos de QlikView fuera de una Isla de Datos dichaseleccin eliminar los datos empleados en el clculo de un KPI y podra dar comoresultado una visualizacin de KPIs en blanco o errnea.
Las funciones InDate()se utilizan conjuntamente con las Islas de Datos/Fechas.
Aggr()Nota: si ya ha terminado el captulo 6, puede saltarse esta explicacin.
Aggr() es una funcin avanzada que permite calcular una agregacin de mltiplesdimensiones. Como regla general, no se puede agregar una expresin agregada(agregaciones anidadas). La excepcin a esta regla es utilizar aggr(); el formato es:
aggr([distinct | nodistinct] expression {,dimension})
-
7/21/2019 Developer II Course QV10 PRINT Esp
60/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
La mejor forma de entender la funcin aggr()es pensando que, empleando esta funcin,podr crear un minimodelo de datos QlikView sobre la marcha, sin necesitar editar losdatos de su script de carga o recargarlos desde los datos fuente de su archivo QlikView.Esto permite la agregacin anidada. Podr aadir ms dimensiones que vienenrepresentadas en grficos, como por ejemplo una tabla pivotante.
Aggr()se utiliza en la interfaz de usuario, ms que en el script de carga. Normalmente seutiliza en una expresin de un objeto grfico, como vimos en el captulo anterior.
Class()Class() es una funcin de agregacin que puede utilizarse para crear contenedores deinformacin similares a los que crearamos en una aplicacin de cuentas pendientes decobro que mostrase las cuentas vencidas. Otra forma de entender Class()es pensando quepermite agrupar sus valores de dimensin.
Agregacin dinmicaEn QlikView, puede asignar un valor de campo a una variable. En consecuencia, podrutilizar el valor que la variable tiene en una expresin. Esto es similar a un puntero en laprogramacin en C u otros lenguajes de programacin similares.
QlikView calcula la informacin sobre la marcha. Con este enfoque y utilizando una tablaque contenga las expresiones, podr crear una referencia a las frmulas ubicadas en latabla la cual, a su vez, crea una librera de expresiones eficaz que luego puede utilizarsepara cambiar de forma dinmica la presentacin de la informacin.
El usuario podr desplazarse por los KPIs seleccionando las elecciones en un cuadro delista.
IntervalMatch
La sentencia de script IntervalMatch facilita la correspondencia de fechas con perodos oregistros con dimensiones de cambio lento, til para crear un modelo de datos plenamentefuncional en las dimensiones de tiempo apropiadas conforme a sus requisitos de negocio.La implementacin de IntervalMatch requiere unos cuantos pasos adicionales en vez deaplicar simplemente la funcin, si es que queremos evitar que se creen claves sintticas ennuestra estructura de datos.
IntervalMatch()es una funcin que tiene la misma funcionalidad que un BETWEEN en unasentencia SQL. Hay un inconveniente en el uso de IntervalMatch(), y es que crea una tablasinttica (Tabla $Syn). Las tablas $Syn representan un coste alto en memoria y elrendimiento de la interfaz de usuario puede empeorar. Una solucin posible para esto
pasara por hacer un LEFT JOINa la tabla IntervalMatch() en una tabla padre.Aqu hay un pequeo ejemplo de IntervalMatch(). Mantenemos el enfoque de utilizarejemplos breves para que puedan verificarse con facilidad.
En este ejercicio utilizaremos IntervalMatch()para hallar las horas que un empleado esttrabajando in situ.
-
7/21/2019 Developer II Course QV10 PRINT Esp
61/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
61
Ejercicios: Diseo y Script avanzados
Haga lo siguiente: Enlazar tablas1. Inicie QlikView y guarde una copia de trabajo del archivo QlikView en el
directorio de trabajo de este captulo y seccin
(C:\QlikViewTraining\DeveloperII\Chapter07\LinkTables\Linktable.qvw).
2. Abra el archivo Excel LinkTable.xls y examine los campos SalesyBudgets.Ver que cuatro clientes tienen unBudget y cuatro clientes compran productoscada mes pero no exactamente los mismos clientes que tienen unBudget. Acontinuacin, recargue su copia de trabajo del archivo QlikViewLinkTable.qvw. Toda la informacin parece correcta. Vaya al Visor de Tablasyobserve la estructura del modelo de datos. Se ha creado una tabla sinttica yuna clave sinttica. Esto puede recargar la aplicacin en exceso y en algunoscasos raros podra dar problemas en cuanto a tener resultados inesperados.
3. Comente el script en la pestaa SynKey, elimine el comentario de script en lapestaa Using a Keyy recargue la aplicacin. Observe que estamos tratandode eliminar la clave sinttica concatenando los campos que estn ocasionandola tabla sinttica. Compruebe el resultado del archivo QlikView y compareambos con la hoja Excel. Podr observar que devuelve informacin incorrectapor las malas correspondencias entre campos clave; faltan clientes de cadatabla.
4. Comente el script en la pestaa Using a Keyy elimine el comentario del scriptde la pestaaLink Tabley recargue el documento.
Aqu estamos cargando la informacin de la tabla SalesyBudgetdos veces.
Esto genera una tabla intermedia que tiene informacin comn de ambastablas. El nivel de detalle se mantiene en tablas aparte tanto para SalescomoparaBudget. La tabla de enlace debe cargarse con Distinct(solamentecombinaciones de clave nicas) y as establecer relaciones correctas.
5. Cree un cuadro de tabla que incluya todas las columnas.
-
7/21/2019 Developer II Course QV10 PRINT Esp
62/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
6. Comente el script desde el paso 3 (en la pestaaLink Table) y elimine el
comentario del script en la pestaa Concatenate. Recargue la aplicacin.Utilice un campoRecSourcepara distinguir entre registros concatenados.Utilice tambin referencias explcitas para concatenar as la tabla en la queocurrir la concatenacin. Finalmente, observe el LEFT JOINque aade elcampo Customera la tabla y observe que trae como resultado un modelo dedatos con una nica tabla. Sugiera una forma alternativa de obtener el mismoresultado.
7. Observe el resultado. Ver que es el mismo que en los pasos 1 y 3. Observeque hay valores nulos. Ahora si suma Sales AmountyBudget Amount,cuadrarn.
Nota: Esto es similar a una unin en SQL. Los valores nulos no pesan tanto
en QlikView como en SQL.
Recuerde: Las tablasde enlace resuleven diferencias degranularidadentrelas tablas de hechos que estn unindose a las mismas dimensiones.
-
7/21/2019 Developer II Course QV10 PRINT Esp
63/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
63
Haga lo siguiente: ejercicio de concatenacin1. Abra el archivo LeftJoin.qvw ubicado en la carpeta LeftJoin, guarde una copia
de trabajo y ejecute el script en la pestaaPrevious. Cree dos cuadros de listay utilice los campos UnitsyDept.
2. Seleccione la unidad con el nmero 54543. Cree un cuadro de tabla que utilicetodos los campos y mire los contadores.
3. Aqu ver que todava no tenemos una cuenta total de las unidades en el DeptA2, tendramos que recargar la tabla de nuevo. Pero dnde paramos?
4. La solucin est en agregar los datos utilizando una clusula GROUP BYdesdelos datos de la tabla Tracking(de rastreo) y hacer un LEFT JOINdel resultadoen la tabla Tracking.
5. Comente la informacin en la pestaaPrevious, elimine el comentario descript de la pestaaLeft Joiny recargue la aplicacin. De este modo, ahorapodr hallar el nmero de veces que se utiliza una unidad en todos losDept.decualquier semanaWeek. Esto se hizo con una carga RESIDENTadicional.
6. Su resultado:
-
7/21/2019 Developer II Course QV10 PRINT Esp
64/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
Ahora podemos calcular el porcentaje de utilizacin de una unidad en unDept.enuna determinada semana.
Recuerde: las sentencias Group byen combinacin con las operaciones left joinpermiten la agregacin de valores que residen en tablas debajo de una jerarquapadre-hijo y adhirindose a las tablas superiores, como por ejemplo, sumando elvalor de elementos de lneas de pedido individuales a un nico valor por pedido.
Haga lo siguiente: ejercicio sobre Islas de Datos1. Abra el archivo DateIsland.qvw en la carpeta Date_Island, guarde una copia
de trabajo del archivo y aada el siguiente cdigo en la pestaa Calendarbajo
la lneaMasterCalendar: en el script.
2. Recargue el script.
3. Cree un Cuadro de Lista y una Tabla Pivotante. En la Tabla Pivotante useCountryy cualquier CategoryType. Para el cuadro de lista muestreDateMonthYear. Use dos de las tres expresiones que hay a continuacin (pista:una de ellas viola una prctica recomendada):
4. Seleccione un nicoDateMonthYear. El resultado debera ser el siguiente:
Nota: Aqu se requiere la clusula ORDER BY, pero slo funcionar para
una RESIDENTLOADo en una sentencia SQL SELECT. ORDER BYnofuncionar con una sentencia LOAD FROM.
-
7/21/2019 Developer II Course QV10 PRINT Esp
65/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
65
5. Por ltimo, necesita establecer una propiedad del Cuadro de Lista para quesiempre tenga un solo valor seleccionado. Observe que no puede hacer esto amenos que haya seleccionado un valor nico en el paso anterior.
6. Ahora seleccione diversos valoresDateMonthYeary ver cmo cambia Salesen una columna pero no en la otra.
Recuerde estos puntos clave:
Se puede filtrar sin afectar al resto de la estructura de datos.
Esto se logra mediante el uso de sentencias condicionales y presentando loscriterios de seleccin de dichos filtros en campos que no enlacen con la
estructura de datos.
Se pueden utilizar funciones Inter-registro para calcular medias mviles yrealizar comparativas entre perodos en tablas simples y pivotantes.
-
7/21/2019 Developer II Course QV10 PRINT Esp
66/116
QlikView Developer II| 7 DESAFOS DE SCRIPT Y MODELADO DE DATOS
Haga lo siguiente: Ejercicio Class()1. Abra el archivo Class.qvw en la carpeta Class y guarde una copia de trabajo
del archivo.2. Cree variables denominadas vDate(fije vDatecomo una fecha actual y dele un
formato de fecha, no numrico) y vWidth(utilizar un prefijo vo varparadenotar variables es una buena prctica recomendada) en la pestaa Variablesen el men Configuraciones| Propiedades de documento.
3. Cree un objeto calendario, pulse el botn de opcin Variable(s) y elija vDatecomo la variable asignada al objeto Calendario.
4. Cree un cuadro de entrada y elija vWidthcomo la nica Variable Mostrada.
Figura 1. Configuraciones de variable
Figura 2. Objetos Calendario y Cuadro de Entrada5. A continuacin cree una tabla pivotante con CompanyNamecomo la
dimensin ysum(LineSalesAmount)como la expresin.
6. Por ltimo crearemos una dimensin calculada en la tabla pivotante.
Aada la funcin class() empleando lo siguiente:=class(num(OrderDate - $(vDate)),$(vWidth),'Dt')
Aqu utilizamos dos variables para cambiar din