Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 |
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.
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
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
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
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.
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
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
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.
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
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