Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Procesar un campo en tabla

Buenos días,

Tengo un problema que me resulta complejo de saber como resolver. Intentaré explicarlo de la mejor manera posible. Yo tengo la siguiente estructura:

IDPrincipal, Campo1

       1          15-45-234-1

El problema es que el Campo1 tiene la siguiente estructura por ejmplo 15-45-234-1, pero el número de valores no es siempre el mismo, puede venir 3-45, 34, etc. Yo necesito procesar el campo1, de tal forma que me quede algo de la siguiente forma

IDPrincipal,nuevoCampo

      1                 15

      1                  45

      1                 234

      1                    1

Resumiendo, lo que quiero hacer es procesar el campo1, y que quede asociado tantos elementos como tenga al IDPrincipal . No tengo idea de como hacer algo así. Se que dificulta que no siempre sea el mismo número de elementos en Campo1. Programando con un lenguaje si seria facil de hacer, pero partiendo de bd y qlikview no es tan fácil.

¿Alguien se le ocurre alguna idea y me orienta un poco?

Un saludo

1 Solution

Accepted Solutions
aramirez
Contributor II
Contributor II

Hola Jonay,

Si te entiendo bien lo único que necesitas para conseguir esto es cagar crear "nuevoCampo" como:

    SubField(Campo1,'-') as nuevoCampo

Te adjunto un ejemplo de como puedes hacer esto.

Espero que sea esto lo que necesitas.

Un saludo

Alfredo

View solution in original post

10 Replies
aramirez
Contributor II
Contributor II

Hola Jonay,

Si te entiendo bien lo único que necesitas para conseguir esto es cagar crear "nuevoCampo" como:

    SubField(Campo1,'-') as nuevoCampo

Te adjunto un ejemplo de como puedes hacer esto.

Espero que sea esto lo que necesitas.

Un saludo

Alfredo

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Jonay:

Creo que con la funcion subfield(Campo1, '-'  ) obtienes lo que pides


Si necesitas saber el número de elementos que hay: con la funcion substringcount(Campo1 , '-')  obtienes el número de separadores del campo ahora sumas 1

Nunca lo he usado, solo he leído la ayuda

Saludos

Joaquín


agustinbobba
Partner - Creator
Partner - Creator

Hola Jonay,

Pordrias probar esto:

Aux:

LOAD * INLINE [

    IDPrincipal,      Campo1

        1,           15-45-234-1

        1,           5-35-74-1

        1,           2-65-634-1

];

Tabla:

Load

  IDPrincipal,

  subfield(Campo1,'-') AS Campo1

Resident Aux;

2016-04-05_9-06-25.png

En caso que no siempre sea un '-' el separador y siempre y cuando se pueda podes usar un Replace. Por ejemplo si ademas del separado '-' tiene un separado '/ ' podes hacer

subfield(Replace(Campo1,'/','-'),'-') as campo

Saludos,

Agustin

Anonymous
Not applicable
Author

     Muchas gracias a todos, la solución propuesta por Alfredo funciona perfectamente, y con la función que nombró Joaquin puedo saber cuantos elementos tiene la expresion.

     Ahora me surge otro problema, que es la operación inversa, concatenar para crear una cadena, una vez la haya procesado. Me explico, parto de aquí:

     IDPrincipal, Campo1

        1          15-45-234-1

Consigo lo siguiente:

IDPrincipal,nuevoCampo

      1                 15

      1                  45

      1                 234

      1                    1

Una vez obtengo eso, yo relaciono ese nuevo campo de tal forma que saco otra informacion

IDPrincipal,nuevoCampo, otrocampo

      1                 15             valor1

      1                  45            valor2

      1                 234           valor3

      1                    1            valor4

Ahora yo quiero concatenar el valor de ese otro campo para cada IDPrincipal, para esje ejemplo quedaria:

valor1-valor2,valor3-valor4

He intentado hacer

load IDPrincipal, concat(otrocampo,' ')

resident tabla

group by IDPrincipal;

Pero no me funciona, ¿alguien tiene alguna idea de como hacerlo?

Un saludo

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Jonay:

Prueba la función previous(expresión)


LOAD ID,

          previous(campo) & campo as otrocampo


Recuerda marcar las respuestas útiles/correctas, y cerrar los hilos


Saludos

Joaquín

agustinbobba
Partner - Creator
Partner - Creator

Jonay,

Así como hiciste debería andar. Proba ponerle un nombre al concat.

load IDPrincipal,

       concat(otrocampo,' ')      AS CampoConcatenado

resident tabla

group by IDPrincipal;

2016-04-05_11-51-54.png

Saludos,

Agustin.

Anonymous
Not applicable
Author

Buenas Joaquin,

Pero hecho de esta forma no me permite usar el group by para agrupar por ese IDPrincipal y claro lo que hace es agruparme parejas, nunca me conforma la secuancia completa.

Un saludo

JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Haz lo que propone Agustín ... cada solución resuelve una problemática diferente

Anonymous
Not applicable
Author

Buenos días,

Si funcionaba la forma del concat y el group by. El problema es que yo habia hecho la prueba con valores numericos y se ve que ahí lo del concat no funciona bien.

Gracias por la ayuda

Saludos