Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Modificar Estructura Cadena Texto

Estimados:

Soy nuevo en el mundo de Qlikview.

Estoy generando un modelo de Recursos Humanos donde tengo 2 bases de datos con distinta información. El campo que me une ambas bases es el campo Nombre (nombre del trabajador) donde aparece las mismas personas.

Sin embargo, en un documento el nombre está definido como PRIMER NOMBRE SEGUNDO NOMBRE PRIMER APELLIDO SEGUNDO APELLIDO mientras que en la otra base aparece como PRIMER APELLIDO SEGUNDO APELLIDO PRIMER NOMBRE SEGUNDO NOMBRE.

Existe alguna función en Qlik que permita dar vuelta el nombre para dejar ambos de la misma manera o tienen alguna manera de poder dejarlas en un formato equivalente?

Desde ya muchas gracias,

5 Replies
bertinabel
Creator
Creator

Buen Día,

     Felipe,

     De momento no recuerdo alguna función que permita hacer de forma directa lo que comentas, sin embargo se me ocurre jugar con los espacios y ordenar manualmente el nombre para que se acomode a como tu lo necesitas.

Te dejo el siguiente ejemplo:

Tabla_Nombres:

LOAD

NombreInvertido,

(Trim(Mid(NombreInvertido,FindOneOf(NombreInvertido,' ',2), FindOneOf(NombreInvertido,' ',3)-FindOneOf(NombreInvertido,' ',2))) & ' ' & //Primer NOmbre

Trim(Mid(NombreInvertido,FindOneOf(NombreInvertido,' ',3), Len(NombreInvertido)-FindOneOf(NombreInvertido,' ',3)+1)) & ' ' & // Segundo Nombre

Trim(Mid(NombreInvertido,1, FindOneOf(NombreInvertido,' '))) & ' ' & // Primer Apellido

Trim(Mid(NombreInvertido,FindOneOf(NombreInvertido,' '), FindOneOf(NombreInvertido,' ',2)-FindOneOf(NombreInvertido,' '))) // Segundo Apellido

) as NombreCorrecto

;

LOAD * Inline [

NombreInvertido

'Martinez Plata Bertin Abel'

'Lopez Perez Juan Pablo'

'Torres Sanchez Andres Manuel'

]

Nota: No es muy recomendable tener texto como campo llave entre 2 tablas, lo recomendable es que cada Tabla de cada base incluya un ID_Empleado y este sea el campo que te ayude a unir ambas bases.

Saludos.

ecolomer
Master II
Master II

Hola,

Además de lo que te ha aportado Bertín, se me ocurre que puedes utilizar la función Subfield, utilizando como separador el caracter blanco ' '.

Algo así:

Subfield(NombreOriginal, ' ',1) as PrimerNombre,

Subfield(NombreOriginal, ' ',2) as SegundoNombre,

Espero que te sirva.

Saludos,

Enrique Colomer

el_aprendiz111
Specialist
Specialist

Felipe buenas tardes

tambien te puedes crear una tabla de Mapeo:

NOM: MAPPING LOAD * Inline
[
NOMBRE,NOMBRE2
PETER PAN LOPEZ PEREZ,PETER PAN LOPEZ PEREZ
PEREZ LOPEZ PAN PETER,PETER PAN LOPEZ PEREZ
JUAN TEOFILO BLER ROS,JUAN TEOFILO BLER ROS
ROS BLER TEOFILO JUAN,JUAN TEOFILO BLER ROS
ANA SOFIA LEZ LIZ,ANA SOFIA LEZ LIZ
LIZ LEZ SOFIA ANA,ANA SOFIA LEZ LIZ
]
;


LOAD *, ApplyMap('NOM',NOMBRE,Null()) AS NUEVO_NOMBRE;
LOAD * Inline
[
NOMBRE
PETER PAN LOPEZ PEREZ
PEREZ LOPEZ PAN PETER
JUAN TEOFILO BLER ROS
ROS BLER TEOFILO JUAN
ANA SOFIA LEZ LIZ
LIZ LEZ SOFIA ANA
]
;
nom.png

Not applicable
Author

muchas gracias a todos por su ayuda.

bertinabel
Creator
Creator

Felipe,

     Si tu problema fue solucionado, recuerda cerrar el hilo marcando la respuesta que te haya ayudado con la solucion como correcta, en su defecto que lo hayas solucionado por tu cuenta, comparte tu solucion y marcala como respuesta correcta. Esto ayudara como referencia para alguien que se encuentre con un problema similar al tuyo.

Saludos.