developer ii course qv10 print esp

Upload: luciano

Post on 04-Feb-2018

265 views

Category:

Documents


2 download

TRANSCRIPT

  • 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