Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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];
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!
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
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);
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
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]);
Excelente! Muchas Gracias por tu ayuda! Ahora me parece que funciona. Gracias Nuevamente Carlos!
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
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?
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];
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