Para resolver el problema de los dos apellidos juntos en un solo campo, se dividen los datos a extraer desde la misma fuente, en uno se extraen los que tienen el campo nombre y apellidos juntos, haciendo uso de la consulta en SQL:
SELECT Empleados_Gral.* FROM Empleados_Gral WHERE (Apellido_2 = '')
Una vez extraídas las filas que contiene los apellidos juntos, se inserta una transformación de tipo Derive Column, la cual se encarga, haciendo uso de las funciones de cadena, de dividir la misma en sub-cadenas para separar ambos apellidos:
Para que solo quede el primer apellido en el Campo apellido_1, se debe aplicar la función:
SUBSTRING (Apellido_1, 1, FINDSTRING (Apellido_1," ",1))
Para que solo quede el segundo apellido en el Campo apellido_2, se debe aplicar la función:
SUBSTRING (Apellido_1, FINDSTRING (Apellido_1," ",1) + 1,(LEN(Apellido_1) - FINDSTRING (Apellido_1," ",1)) + 1)
Por otro lado, haciendo uso de otro origen de Access, se extraen las otras filas que tienen los apellidos separados en sus correspondientes columnas, para ello se le aplica la siguiente consulta:
SELECT Empleados_Gral.* FROM Empleados_Gral WHERE (NOT (Apellido_2 = ''))
Ambas fuentes de datos (la que extrae los apellidos separados y la que los extrae juntos) se conectan a la conexión fuente_en_Access para acceder a los datos fuentes de la base de datos correspondiente.
Luego tanto la fuente que contiene los datos de apellidos separados como la que lo tenía juntos se unen con una transformación de tipo Union All llamada Union 1, para unificar los datos. Estos datos unificados son enviados a una transformación de tipo Derive Column
para estandarizar los datos del campo Id_Categoria, donde los valores que toma no tiene sentido almacenarlos, ya que son de cero a nueve. Estos valores corresponden a diferentes categorías:
código tipo descripción sigla
1 D Profesor Titular PT 2 D Profesor Auxiliar PA 3 D Asistente AS 4 D Instructor INS 5 D Instructor Auxiliar INA 6 D Auxiliar Técnico
Docente
ATD 7 I Investigador Titular IT 8 I Investigador Auxiliar IA 9 I Investigador Agregado IAG 0 I Aspirante a Investigador ASPI
Solo de esta manera podrán coincidir con los almacenados en el archivo de Excel y poder hacer comparaciones póstumas y detectar que no existan duplicados en el destino de datos. Por tanto, esta columna llamada Id_Categoria reemplazará su propio valor con los valores correspondientes a las siglas presentadas en la anterior tabla dependiendo del número correspondiente a la misma, o se quedará almacenado el valor de “mal”, en caso de no tener ningún código coincidente.
Póstumamente, se envían los datos a una transformación de tipo Conditional Split, donde se establecen dos salidas:
una llamada “bien” donde se cumple la condición Id_Categoria != "mal" y otra llamada “mal”, donde se cumple la condición Id_Categoria = "mal"
Las filas de la salida “mal” son enviadas a una transformación de tipo Derive Column donde se agrega una columna llamada Error_descripcion con valor "La fila se insertó con el valor por defecto INS" que contiene la descripción del problema en cuestión y otra columna donde sustituye el valor de “mal” de la columna Id_Categoria por el valor INS que es la mínima categoría que se le puede asignar a un trabajador.
Estas filas se envían a la transformación de tipo Multicast donde se redireccionan las filas a dos salidas, una que será enviada a un destino que se conecta con la conexión Error y que guarda el error en un archivo para que pueda ser chequeado luego –usa la fila Error_descripcion- y otra salida que será enviada a una transformación de tipo Union All llamada Union 2, que une los datos de la salida múltiple con la que corresponden a “bien” de la salida del Conditional Split anterior.
Una vez que se tienen todas las filas que se intentarán insertar, serán enviadas para hacerles una conversión de datos usando la transformación de tipo Data Conversion y hacer conversiones de tipo fecha para que coincida con el tipo almacenado en la tabla de referencia y se pueda realizar correctamente la búsqueda exacta de coincidentes en la próxima transformación de tipo Lookup, la cual determina si el datos existe en la tabla de referencia. De no existir, se envían a un destino OLE DB que se conecta con la base de datos en SQL Server llamada RRHH usando la conexión localhost.RRHH para guardarlos en la tabla de dimensión Personas. Si existe la fila en la tabla, se envía a una transformación de tipo Slowly Changing Dimension.
Esta transformación determina si la fila que se va a insertar en la tabla Personas es nueva o de actualización, para ello chequea el valor de los campos Id_Categoria y date_finish y de cambiar solo estos, se pone el valor del campo isRowCurrent de esa columna en false
usando una transformación de tipo OLE DB Command que hace transformaciones sobre la base de datos de SQL usando el scripts en SQL:
UPDATE [dbo]. [Personas] SET [isRowCurrent] =?WHERE [Id_Empleado] =? AND [isRowCurrent] = '1'
La otra nueva se inserta con el valor de true, demostrando así que la nueva es la que contiene el valor actualizado y la otra servirá solo de modo historia.
Las filas que serán insertadas como nueva se envían a un destino OLE DB que de igual manera se conecta con la base de datos en SQL Server llamada RRHH usando la conexión localhost.RRHH para guardar las filas nuevas en una tabla llamada Personas.
3.3.2 Soluciones a los problemas del origen de datos en Excel: