Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
rulohx87
Contributor III
Contributor III

Extraño modelo asociativo.

Hola amigos,

Tengo un problema pequeño que tal vez me ayuden a resolver.

Tengo 6 tablas con campos clave (QNA_PROCESO Y RFC)

6 TABLAS
ID_QNA_PROC
ID_RFC

Tengo 2 TABLAS CON CAMPOS

MOVIMIENTOS_QUINCENALES
ID_QNA_PROC

EMPLEADOS
ID_RFC
NOMBRE_EMPLEADO

Y una tabla transaccional a la que todas las anteiores se unen.

TRANSACCIONES

ID_QNA_PROC

ID_RFC

  1. Si asocio las tablas por RFC se unen todas excepto la de "MOVIMIENTOS_QUINCENALES". que se une con "TRANSACCIONES". El problema es:
    • No puedo filtrar por ID_QNA_PROC (200517 - AñoQuincena').
  2. Si asocio las tablas por ID_QNA_PROC se unen todas excepto la de "EMPLEADOS" que se une con "TRANSACCIONES". El problema es:
    • No puedo filtrar por ID_RFC  que me sirve para obtener el NOMBRE_EMPLEADO por la quincena actual o historica.

Mi solución para buscar tanto por quincena (201515, 201516, 201517, etc)  com por RFC hasta el momento fue una tabla sintetica uniendo

$Syn
ID_QNA_PROC
$Syn
ID_RFC

Gracias amigos. Ojala me haya explicado bien, sino con gusto subo imagenes.

1 Solution

Accepted Solutions
JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Raúl:

Las 6 tablas las tienes que cargar con una clave compuesta y una link table

Tabla1:

LOAD (ID_QNA_PROC & '+' ID_RFC) as key1

Tabla2:

LOAD (ID_QNA_PROC & '+' ID_RFC) as key1

LinkTable:

LOAD DISTINCT key1, ID_QNA_PROC, ID_RFC

Resident Tabla1

Drop fields ID_QNA_PROC, ID_RFC from Tabla1

LinkTable:

LOAD DISTINCT key1, ID_QNA_PROC, ID_RFC

Resident Tabla2


Drop fields ID_QNA_PROC, ID_RFC from Tabla2


... hasta Tabla6


La tabla empleados intuyo que serán pocos registros, si solo quieres el nombre

Empleados:

MAPPING

LOAD ID_RFC, EMPLEADO

SQL SELECT * FROM EMPLEADOS

y luego usas

LOAD Applymap('Empleados', ID_RFC) as NombreEmpleado

en las tablas que lo necesites así trasladas el campo NombreEmpleado a cada tablas.

Si necesitas más campos de la tabla empleado tienes que cambiar el MAPPING por un LEFT JOIN y no necesitarás el applymap.

Por cierto, como dice Alex la imagen del modelo de datos nos permite ayudarte de forma más eficiente.

Saludos

Joaquín

View solution in original post

8 Replies
alex_millan
Creator III
Creator III

Hola Raul,

quizás sería más fácil hacerse una idea y ver las asociaciones si envías la estructura de tablas. ¿Podrías exportarla mediante el visor de tablas y adjuntarla?

Un saludo

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Raúl:

Las 6 tablas las tienes que cargar con una clave compuesta y una link table

Tabla1:

LOAD (ID_QNA_PROC & '+' ID_RFC) as key1

Tabla2:

LOAD (ID_QNA_PROC & '+' ID_RFC) as key1

LinkTable:

LOAD DISTINCT key1, ID_QNA_PROC, ID_RFC

Resident Tabla1

Drop fields ID_QNA_PROC, ID_RFC from Tabla1

LinkTable:

LOAD DISTINCT key1, ID_QNA_PROC, ID_RFC

Resident Tabla2


Drop fields ID_QNA_PROC, ID_RFC from Tabla2


... hasta Tabla6


La tabla empleados intuyo que serán pocos registros, si solo quieres el nombre

Empleados:

MAPPING

LOAD ID_RFC, EMPLEADO

SQL SELECT * FROM EMPLEADOS

y luego usas

LOAD Applymap('Empleados', ID_RFC) as NombreEmpleado

en las tablas que lo necesites así trasladas el campo NombreEmpleado a cada tablas.

Si necesitas más campos de la tabla empleado tienes que cambiar el MAPPING por un LEFT JOIN y no necesitarás el applymap.

Por cierto, como dice Alex la imagen del modelo de datos nos permite ayudarte de forma más eficiente.

Saludos

Joaquín

rulohx87
Contributor III
Contributor III
Author

Hola Alex y Joaquin

Si comparto la estructura. Y como comentaba esta es la unica forma para poder filtrar tanto por RFC como por la quincena de Proceso.

LA TABLA PLAZAS es la que concentra a todas, ya que es la transaccional. "Aunque" los RFC y QNA_PROC a veces no aparecen en esta tabla de plazas.

GRACIAS Y SALUDOS.

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Raúl:

Primero tienes que cargar la LinkTable y eliminar los campos ID_QNA_PROC, ID_RFC de las seis tablas como te expliqué en el otro mensaje.

La tabla Empleados y Movimientos_QNA enlazarán con la LinkTable por nombre de campo; no tienes que hacer ni el MAPPING-LOAD + ApplyMap ni el LEFT JOIN.

Saludos

Joaquín

alex_millan
Creator III
Creator III

Hola,

creo que la opción de JoaquinLR‌  es correcta. Yo iba a proponerte lo mismo.

Cargas esas seis tablas sólo con la clave compuesta (ID_QNA_PROC & '+' ID_RFC)  sin cargar por separado esos dos campos, y posteriormente cargas la link table con la clave compuesta y también con los campos ID_QNA_PROC y ID_RFC por separado. Esas seis tablas se vincularan a la link table sólo por esa clave compuesta.

La link table enlazará con la tabla Empleado por el campo ID_RFC,  y con la tabla MOVIMIENTOS_QNA por el campo ID_QNA_PROC.

Con eso debería bastar. Suerte.

Un saludo

rulohx87
Contributor III
Contributor III
Author

Gracias JoaquinLR‌ por la solución.  Efectue los cambios y ya me respeta las dos dimensiones. También te agradezco Alex.Millan‌.

Veo a simple vista que la LinkTable con (KEY, ID_QNA_PROC Y ID_RFC) vendría siendo igual a la Sintetica ($Syn1, ID_QNA_PROC Y ID_RFC). ¿Cuál vendría siendo la diferencia?

Saludos y un abrazo.

alex_millan
Creator III
Creator III

Hola Raul,

la diferencia es que la link table tiene tres campos por los que asocia de manera independiente por cada uno de los tres campos (la clave compuesta y los dos campos por separado). Sin embargo, en la estructura original solo enlazaba mediante la clave sintética.


Un saludo

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Buenos días:

La diferencia es el rendimiento, en todos los cursos dicen que hay que suprimir las claves sintéticas. En tu ejemplo, además, la forma de resolver una clave compuesta entre varias tablas es con una LinkTable.

Si consideras cerrado el tema, marca una respuesta como correcta y si lo consideras apropiado alguna como útil. De esta forma el hilo se cierra es más fácil de identificar para todos los usuarios.

Saludos

Joaquín