Skip to main content
Announcements
Customer Spotlight: Discover what’s possible with embedded analytics Oct. 16 at 10:00 AM ET: REGISTER NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Relacionar un archivo qvd con multiples hojas de excel.

Hola ante todo soy nuevo en esto, queria saber si existe alguna manera de poder realizar lo siguiente.

Tengo un arhivo qvd con los siguientes campos:

     PTA,

     CLA_P,

     ORD,

     ITE,

     OPA,

     PAC,

     NOR,

     PFA,

     PRE,

     CFA,

     CRE,

     HON,

     GAS,

     FEC,

     PRF,

     SER,

     NRE,

     ORI,

     SUC,

     NFA,

     TOTAL,

     DES

Me gustaria agregarle a esa tabla un campo que se llamaria [CENTRO DE COSTO] a partir de ciertos criterios que tengo en diferentes hojas en un arhivo de excel (Criterios de Asignacion):

Hoja 1

DES, CENTRO DE COSTO

Hoja 2

DES, NOR, CENTRO DE COSTO

Hoja 3

DES, OPA, CENTRO DE COSTO

Hoja 4

DES, PRF, CENTRO DE COSTO

Hoja 5

DES, PTA, CENTRO DE COSTO.

Alguna idea? Realmente me encuentro trabado con este tema.

Desde ya muchas gracias

1 Solution

Accepted Solutions
Carlos_Reyes
Partner - Specialist
Partner - Specialist

Cierto... Se me olvidaba ese detalle.

Después del primer JOIN, el campo [CENTRO DE COSTOS] ya forma parte de la tabla [INGRESOS TOTALES], así que intentará hacer el JOIN también por ese campo y como no encuentra combinaciones válidas no pega los nuevos registros del segundo JOIN.

En ese caso tenemos utilizar varios campos para poder hacer el JOIN y después renombrar esos campos para convertirlos en uno solo que se llame [CENTRO DE COSTOS].

Prueba lo siguiente:

[INGRESOS TOTALES]:

LOAD *

FROM (qvd);

left join ([INGRESOS TOTALES])

LOAD

     DES,

     NOR,

     [CENTRO DE COSTO]   AS [CENTRO DE COSTO PAGE2]

FROM

(ooxml, embedded labels, table is [Page 2]);

left join ([INGRESOS TOTALES])

LOAD

     DES,

     [CENTRO DE COSTO]   AS [CENTRO DE COSTO PAGE1]

FROM

(ooxml, embedded labels, table is [Page 1]);

Y así sucesivamente con las hojas de excel restantes. Si te das cuenta el punto es que todos los campos [CENTROS DE COSTO] se llamen diferente para que no se utilicen en los JOINS subsecuentes. Una vez que hayas hecho todos los JOINS, deberás hacer lo siguiente para renombrar los campos en uno solo:

[INGRESOS TOTALES NEW]:

    LOAD

    PTA,

    CLA_P,

    ORD,

    ITE,

    OPA,

    PAC,

    NOR,

    PFA,

    PRE,

    CFA,

    CRE,

    HON,

    GAS,

    FEC,

    PRF,

    SER,

    NRE,

    ORI,

    SUC,

    NFA,

    TOTAL,

    DES,

    TRIM( [CENTRO DE COSTO PAGE1] & [CENTRO DE COSTO PAGE2] & [CENTRO DE COSTO PAGE3] & [CENTRO DE COSTO PAGE4] & [CENTRO DE COSTO PAGE5] ) AS [CENTRO DE COSTO]

RESIDENT [INGRESOS TOTALES];

DROP TABLE [INGRESOS TOTALES];

RENAME TABLE [INGRESOS TOTALES NEW] TO [INGRESOS TOTALES];

View solution in original post

9 Replies
Carlos_Reyes
Partner - Specialist
Partner - Specialist

Y a qué te refieres con los criterios? Porque ninguno parece ser un campo que se encuentre en el qvd original.. así que no entiendo cuál es el criterio para integrar el campo [CENTRO DE COSTO].

Si ejemplificas mejor podremos ayudarte. Es más, si puedes subir un archivo de ejemplo será mejor aun.

Saludos!

Not applicable
Author

Hola Carlos, ante todo gracias por responder. Disculpas si no me supe explicar, mi archivo original qvd tiene los siguiente campos (en negrita los campos importantes):

     PTA,

     CLA_P,

     ORD,

     ITE,

     OPA,

     PAC,

     NOR,

     PFA,

     PRE,

     CFA,

     CRE,

     HON,

     GAS,

     FEC,

     PRF,

     SER,

     NRE,

     ORI,

     SUC,

     NFA,

     TOTAL,

     DES


Quiero agregar a ese qvd un campo que se llame CENTRO DE COSTO.

Las Tablas con los criterios de asignacion son las siguientes:

Hoja 1

DES, CENTRO DE COSTO

Hoja 2

DES, NOR, CENTRO DE COSTO

Hoja 3

DES, OPA, CENTRO DE COSTO

Hoja 4

DES, PRF, CENTRO DE COSTO

Hoja 5

DES, PTA, CENTRO DE COSTO.

La hoja 1 por cada DES voy a tener un CENTRO DE COSTO , pero las demas hojas por cada des puede tener diferentes combinaciones de NOR (caso segunda hoja) y diferentes centros de costos. Por ejemplo

Des            NOR    CENTRO DE COSTO

JUAN            1                A

JUAN            2                B

JUAN            3                C

El mismo caso con opa, prf y pta (Hoja 3, Hoja 4 y Hoja 5)

Ninguna DES se repite en ninguna hoja, es decir si esta en la Hoja 1 no esta en la hoja 2.

Nuevamente agradezco mucho tu respuesta, y si pudieras ayudarme seria de mucha utilidad para mi.

Muchas Gracias

Carlos_Reyes
Partner - Specialist
Partner - Specialist

Hola,

Pues dado que ninguna DES se repite en ninguna hoja puedes utilizar un JOIN, Right JOIN o Left JOIN, dependiendo de qué registros quieras conservar (puedes leer las diferencias de los JOINS en la ayuda de QlikView). Sin embargo, sin importar cuál elijas, la sintáxis debe ser similar a esta:

QVD_NOMBRE:

LOAD

    PTA,

    CLA_P,

    ORD,

    ITE,

    OPA,

    PAC,

    NOR,

    PFA,

    PRE,

    CFA,

    CRE,

    HON,

    GAS,

    FEC,

    PRF,

    SER,

    NRE,

    ORI,

    SUC,

    NFA,

    TOTAL,

    DES

FROM QVD_NOMBRE.QVD (QVD);


JOIN (QVD_NOMBRE)

LOAD

    DES,

    [CENTRO DE COSTO]

FROM [NOMBRE_ARCHIVO.XLSX] (ooxml, table is Hoja1);


JOIN (QVD_NOMBRE)

LOAD

    DES,

    NOR,

    [CENTRO DE COSTO]

FROM [NOMBRE_ARCHIVO.XLSX] (ooxml, table is Hoja2);


JOIN (QVD_NOMBRE)

LOAD

    DES,

    OPA,

    [CENTRO DE COSTO]

FROM [NOMBRE_ARCHIVO.XLSX] (ooxml, table is Hoja3);


JOIN (QVD_NOMBRE)

LOAD

    DES,

    PRF,

    [CENTRO DE COSTO]

FROM [NOMBRE_ARCHIVO.XLSX] (ooxml, table is Hoja4);


JOIN (QVD_NOMBRE)

LOAD

    DES,

    PTA,

    [CENTRO DE COSTO]

FROM [NOMBRE_ARCHIVO.XLSX] (ooxml, table is Hoja5);


Not applicable
Author

Carlos algo asi era a lo que me referia, muchas gracias! Igualmente me sigue marcando como que algo esta mal en la sintaxis del script.

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='$ #.##0,00;$-#.##0,00';

SET TimeFormat='hh:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET MonthNames='Ene;Feb;Mar;Abr;May;Jun;Jul;Ago;Sep;Oct;Nov;Dic';

SET DayNames='Lun;Mar;Mié;Jue;Vie;Sáb;Dom';

(si pongo el nombre del qvd me marca error y me dice sintaxis desconocida)

     LOAD

     PTA,

     CLA_P,

     ORD,

     ITE,

     OPA,

     PAC,

     NOR,

     PFA,

     PRE,

     CFA,

     CRE,

     HON,

     GAS,

     FEC,

     PRF,

     SER,

     NRE,

     ORI,

     SUC,

     NFA,

     TOTAL,

     DES

FROM

(qvd);

left join (INGRESOS TOTALES) Tambien me marca error

LOAD COD,

     DES,

     [CENTRO DE COSTO],

   

FROM

(ooxml, embedded labels, table is [Page 1]);

Desde ya muchas gracias por tu esfuerzo, si me podrias ayudar en la sintaxis creo que lo resolveria.

Saludos

Carlos_Reyes
Partner - Specialist
Partner - Specialist

Hola,

Cuando existen campos o nombre de tablas que contienen espacios intermedios siempre debes utilizar los corchetes para encerrar el nombre completo. Esto debe ser cuando creas el campo o la tabla y cuando haces referencia a los mismos. Ese es tu error.

Prueba con lo siguiente:

[INGRESOS TOTALES]:

    LOAD

    PTA,

    CLA_P,

    ORD,

    ITE,

    OPA,

    PAC,

    NOR,

    PFA,

    PRE,

    CFA,

    CRE,

    HON,

    GAS,

    FEC,

    PRF,

    SER,

    NRE,

    ORI,

    SUC,

    NFA,

    TOTAL,

    DES

FROM (qvd);

left join ([INGRESOS TOTALES])

LOAD

     COD,

    DES,

    [CENTRO DE COSTO]

FROM (ooxml, embedded labels, table is [Page 1]);

Not applicable
Author

Excelente! Muchas Gracias por tu ayuda! Ahora me parece que funciona. Gracias Nuevamente Carlos!

Not applicable
Author

Carlos el primero funciona perfecto ahora cuando agrego el segundo criterio como que no me lo toma:

Quedaria asi

[INGRESOS TOTALES]: 

    LOAD 

    PTA, 

    CLA_P, 

    ORD, 

    ITE, 

    OPA, 

    PAC, 

    NOR, 

    PFA, 

    PRE, 

    CFA, 

    CRE, 

    HON, 

    GAS, 

    FEC, 

    PRF, 

    SER, 

    NRE, 

    ORI, 

    SUC, 

    NFA, 

    TOTAL, 

    DES 

FROM (qvd); 

 

left join ([INGRESOS TOTALES]) 

LOAD

     DES,

     NOR,

     [CENTRO DE COSTO]

FROM

(ooxml, embedded labels, table is [Page 2]);

left join ([INGRESOS TOTALES]) 

LOAD

     DES,

     [CENTRO DE COSTO]

   

FROM

(ooxml, embedded labels, table is [Page 1]);

Como que los criterios de la pagina 1 no me los reconoce, alguna sugerencia?

Carlos_Reyes
Partner - Specialist
Partner - Specialist

Cierto... Se me olvidaba ese detalle.

Después del primer JOIN, el campo [CENTRO DE COSTOS] ya forma parte de la tabla [INGRESOS TOTALES], así que intentará hacer el JOIN también por ese campo y como no encuentra combinaciones válidas no pega los nuevos registros del segundo JOIN.

En ese caso tenemos utilizar varios campos para poder hacer el JOIN y después renombrar esos campos para convertirlos en uno solo que se llame [CENTRO DE COSTOS].

Prueba lo siguiente:

[INGRESOS TOTALES]:

LOAD *

FROM (qvd);

left join ([INGRESOS TOTALES])

LOAD

     DES,

     NOR,

     [CENTRO DE COSTO]   AS [CENTRO DE COSTO PAGE2]

FROM

(ooxml, embedded labels, table is [Page 2]);

left join ([INGRESOS TOTALES])

LOAD

     DES,

     [CENTRO DE COSTO]   AS [CENTRO DE COSTO PAGE1]

FROM

(ooxml, embedded labels, table is [Page 1]);

Y así sucesivamente con las hojas de excel restantes. Si te das cuenta el punto es que todos los campos [CENTROS DE COSTO] se llamen diferente para que no se utilicen en los JOINS subsecuentes. Una vez que hayas hecho todos los JOINS, deberás hacer lo siguiente para renombrar los campos en uno solo:

[INGRESOS TOTALES NEW]:

    LOAD

    PTA,

    CLA_P,

    ORD,

    ITE,

    OPA,

    PAC,

    NOR,

    PFA,

    PRE,

    CFA,

    CRE,

    HON,

    GAS,

    FEC,

    PRF,

    SER,

    NRE,

    ORI,

    SUC,

    NFA,

    TOTAL,

    DES,

    TRIM( [CENTRO DE COSTO PAGE1] & [CENTRO DE COSTO PAGE2] & [CENTRO DE COSTO PAGE3] & [CENTRO DE COSTO PAGE4] & [CENTRO DE COSTO PAGE5] ) AS [CENTRO DE COSTO]

RESIDENT [INGRESOS TOTALES];

DROP TABLE [INGRESOS TOTALES];

RENAME TABLE [INGRESOS TOTALES NEW] TO [INGRESOS TOTALES];

Not applicable
Author

Claro tienes razon. Excelente! Carlos muchisimas gracias por tu tiempo, como no soy un usuario experto hacía dias que trataba de resolverlo y no podía.

Te agradezco muchisimo.

Saludos