Skip to main content
Announcements
Qlik Connect 2025: 3 days of full immersion in data, analytics, and AI. May 13-15 | Orlando, FL: Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Campos con distintos joins

Hola como va? soy nuevo en estos andares y tenìa una duda, que tal vez me podìan ayudar a contestarla.

Basicamente lo que quiero es tener una tabla en qlikview, con varios campos, pero algunos de ellos dependen de distintos joins en sql.

Es decir, no se como "escribir" de manera que un campo me lo cree cruzando 2 tablas de sql, el otro campo me lo cree usando esas (u otras) 2 tablas de sql, y asì sucesivamente, pero siempre para los mismos articulos (es decir, no puedo hacer inner join una cosa AND otra cosa, porque ahi se me reduce la consulta al and y devolveria 0 o menos resultados)

Yendo a un ejemplo, si tengo articulos (codArt, idTablaCont1, idTablaCont2, idTablaCont3), y la tablaCont (idTablaCont, descripcion)

Donde descripcion es "AZUL" o "SMALL" (nada que ver uno con otro) y idTablaCont es cada uno de los valores de la tabla anterior.

Como puedo traer a todos los articulos de manera tal que en qlikview tenga:

ARTICULO

CodArt

Color (me devuelva el color de ese articulo, cruzando esas 2 tablas)

Talle (me devuelva el talle de ese articulo, cruzando esas 2 tablas)

Como decìa, no puedo hacer un join que sea articulos.idTablaCont1=tablacont.idTablaCont AND articulos.idTablaCont2=tablacont.idTablaCont porque puede hasta NO traer ningun resultado.

Saludos y gracias!

1 Solution

Accepted Solutions
spividori
Specialist
Specialist

Licha.

La verdad que me estás haciendo pensar de lo lindo!.

Ahí te dejo el ejemplo de cómo lo haría.

Con respecto a leer las tablas directamente de sql, lo que podés hacer es reemplazar de donde lees en excel, leerlas directamente del sql, la verdad que con la sintaxis no te puedo ayudar mucho porque no trabajo en sql.

Saludos.

View solution in original post

10 Replies
spividori
Specialist
Specialist

Hola Licha.

Por lo que entiendo, cargaría primero la tabla artículos y después la tablaCont con los coincidencias con articulos.idTablaCont1 y después otra carga concatenada con la anterior con las coincidencias en articulos.idTablaCont2.

Si puedes sube un excel con algunos datos para poder ayudarte mejor.

Saludos.

Not applicable
Author

Sandro gracias x contestar! Dale ahí va con datos reales. X ejemplo:

Tabla Articulo

CodArt

Id1=1 --- siempre id1 indica talle

Id2=4 --- siempre id4 indica color

Id3=6 --- siempre id6 indica medida

Precio

Puede tener muchos id cada registro

Tabla Contenido

Id=1

Descripcion: XS

..

Otro registro seria

Id=4

Descripcion: AZUL

Entonces yo en qlikview quiero que mi tabla sera

ARTICULO

CodArt

Art-Color: azul

Art-Talle: xs

Y ya que estoy te dejo otra pregunta

Que pasa si tambien quiero un campo descuento?

Teniendo otra tabla llamada descuentos que tiene el CodArt?

(Seria un join con otra tabla pero siempre queriendo ese campo en la misma de qlikview: articulo)

(El tema es basicamente como mezclar joins para nuevos campos en la misma tabla pero sin que esos joins afecten a otros datos que ya traje a esa misma tabla, como seria este caso lo del talle, color, etc)

Muchas gracias si me podes ayudar con la sintaxis lo agradeceria. Los datos

Los traigo de tablas en SQL

Te agradezco!

Licha

spividori
Specialist
Specialist

Licha.

Armate un archivo excel con datos reales y subilo así es más fácil poder ubicarme en el contexto en el que querés desarrollar la carga de datos y para tener la estructura de las tablas. Gracias.

Saludos.

Not applicable
Author

Ahi te adjunto el excel para descargarlo

http://www.filedropper.com/libro1_2

O ver las tablas aca: http://img541.imageshack.us/img541/5247/tablasexcel.png

Como veras, cada articulo tiene 4 ContID (donde el primero indica tamaño siempre, el segundo indica color siempre, el 4to indica tamaño de pie, y el 5to indica soltura, quedando el 3 vacio)

Luego en la tabla cont, estan esos ids, y que significa cada cosa (descripcion, como veras, todos los colores, etc)

Por ultimo, en la tabla descuento, una tabla en la que si el año del descuento para tal articulo coincide con el año en que fue creado (cruzar articulo con descuento), entonces en el campo descuento de mi tabla de cliqview, agrego ese valor. En caso de que no coincidan los años, pongo 0.

En qlikview entonces quiero lo siguiente: (ME FALTO DESCRIPCION DEL ARTICULO EN LA IMG)

http://img692.imageshack.us/img692/6734/articulosq.png

Basicamente el tema es saber como hago para ir cargando los datos con "varios joins" (ya que para obtener descuento voy a tener que ir a la tabla descuento con articulo, mientras que para obtener color, talle, voy a tener que cruzar articulo con contenido). Siempre quedando todos los articulos obvio.. si no estan en descuento le quedara 0, pero el codarticulo va a tener que estar en qikview, no quiero perder ningun articulo (seria un left)

¿Como seria la sintaxis? Con los LOAD, selects, joins. Varios load? No logro hacerlo y entenderlo. Primero cargar articulos = que como esta en SQL (o excel?)? En fin

Saludos y gracias! En qlikview solo me tiene que quedar en el visor de tablas la de ARticulo... no las otras...

spividori
Specialist
Specialist

Hola Licha.

Acá te dejo un archivo qlikview que armé con lo que me dejaste. Espero te sirva.

Saludos.

Not applicable
Author

Esta genial! Solo 1 duda, si no quiero que aparezca el campo en Articulo de IdCont1, Idcont2,...etc, solamente las descripciones (Color, talle, etc), como tendria que cambiar? Llamar El Idcont1  color en la tabla articulo y despues..? O se pueden borrar "filas" de 1 tabla? asi borro los IDcont?

Saludos y gracias! Re entendible

spividori
Specialist
Specialist

Hola.

Lo puedes hacer de la siguiente manera:

1. Puedes borrar de a 1:

                                       DROP Field IdCont1 from Articulos;

2. O varias:

                 DROP Fields IdCont1,IdCont2,IdCont3 from Articulos;

Saludos.

Not applicable
Author

Buenisimo, eso me quedo perfecto. Te hago la última consulta (doble) y prometo no molestar más jaja, creo que ya sabiendo todo esto me las voy a poder arreglar solo.

1) Tengo ahora que relacionar 3 tablas en vez de 2 como era antes y "agregar" 2 campos a Artículos

Te dejo como intenté hacerlo a tu manera (sin consultas sql) pero en algo estoy pifiando porque me devuelve 0 y 1 las tablas.

Primero te dejo como serían las nuevas tablas que tengo:

http://www.filedropper.com/libro1_3

Y acá lo que quiero:

Fijate que tengo característicasXarticulos, maximo 3 por articulo. (En la tabla Mcaracteristica se ve que es cada ID, no hace falta usarla, porque pregunto en Caractersiticas el ID si es tanto se que es coleccion, etc). La tabla Caracteristicas tiene la descripcion que quiero. Quiero crear en mi tabla articulo de qlikview, 3 campos mas, uno que se llame "Coleccion", otro "Material" y otro "Temporada", dejando ahí la descripción que aparece en la tabla características (linkeando las 2 tablas estas..y la de artículos). ¿Cómo sería?

Así lo estoy haciendo.. pero los 3 campos me devuelven 0 nomás.

//Ya cargue las 3 tablas (aunque una ni se usa, es solo para dtalle Mcaracteristia)

//Traigo todos los articulos en nueva tabla temporal

DIRECTORY;

ArtExtra:

LOAD

Articulo_ID

Resident Articulos;

//Los joineo con CaracXArtic

left join (ArtExtra)

LOAD

KCaract,

Articulo_ID, //Esta bien llamarlo asi? Para que joinee..

Resident CaracXArtic;

//Joineo con caractersiticas, obtengo descripcion

Left join (ArtExtra)

LOAD

KCaractM,

Descripcion,

if(KCaractM=1,Descripcion,0) as Articulo_Temp,

if(KCaractM=2,Descripcion,0) as Articulo_Colec,

if(KCaractM=3,Descripcion,0) as Articulo_Mater

Resident Caracteristicas;

//Adhiero a la tabla de artículos

Left Join(Articulos)

LOAD Articulo_ID,

Articulo_Colec as Articulo_Coleccion,

Articulo_Temp as Articulo_Temporada,

Articulo_MAter as Articulo_Material,

Resident ArtExtra;

//Borro Tablas

DROP Table ArtExtra;

DROP Table Caracteristicas;

DROP Table MCaracteristicas;

Con consulta SQL sería esto: (aunque la pregunta viene en 2 por eso la dejo)

Select C.Descripcion from

Articulos A right join CaracXArtic CxA on

A.id=CxA.KArticulo inner join Caractersiticas C on C.id= CxA.KCaract

where (C.KCaract =  1)... Eso para la coleccion.. con 2, y 3, los otros 2.

En que me estoy equivocando? Como lo corrijo.. Intenté ser lo mas claro posible dejandote las tablas. Mil gracias si me podés ayudar.

2) En caso de querer usar consultas SQL? Es decir, ponele que en vez de cargar los datos desde el excel, los cargabas de SQL. Si después querías (solo veámoslo con las tablas Artículo y Contenido) directamente poner la consulta SQL para el campo "Art-Color:Azul .. y esos", como llamarías a las tablas y a los campos para hacer el join? Por como los renombraste en Qlikview o por como están en SQL?  No sería más fácil hacer todo esto, si ya tengo la consulta en SQL que me devuelve lo que quiero antes que andar haciendo joins de residents tables?

Te dejo la consulta de ejemplo, para lo del color azul en sql sería:

select C.Descripcion from Contenido C inner join Articulos A on A.idTablaCont2=C.idTablaCont

¿Como se aplicaria en el ejemplo esa consulta y que lo aplique a todos los articulos digamos en el campo de color?

Bueno muchas gracias.. si entiendo esto ya puedo andar solo.. espero no abusar de tu tiempo y sabiduría jaja

Muchas gracias

Licha!

spividori
Specialist
Specialist

Licha.

La verdad que me estás haciendo pensar de lo lindo!.

Ahí te dejo el ejemplo de cómo lo haría.

Con respecto a leer las tablas directamente de sql, lo que podés hacer es reemplazar de donde lees en excel, leerlas directamente del sql, la verdad que con la sintaxis no te puedo ayudar mucho porque no trabajo en sql.

Saludos.