Qlik Community

Ask a Question

QlikView App Dev

Discussion Board for collaboration related to QlikView App Development.

Announcements
Join this live chat April 6, 10AM EST - QlikView to Qlik Sense REGISTER
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Mostrar valores de campo compuesto

Hola, tengo una duda respecto a cuando creo un campo compuesto.

Les explico, tengo dos campos, "Recruit Type" y "TermReason", ambos campos contienen tipos de recrutamiento y de despido, como dice su nombre, por ejemplo: "Recruit1, Recruit2, etc". Cuando creo una tabla pivotante, con un campo fecha (en este caso mes o año), y genero un contador de empleados con esa condicion, no tengo ningun problema y muestra dichos campos, y lo mismo ocurre con TermReason.

Lo que necesito es unir esas tablas, no sabia como hacerlo, lo que hice fue en el grafico crear una dimension nueva de esta forma "=RecruitType + TermReason", y le puse una etiqueta para que mostrara el nombre "Suma", por ejemplo.

Con esto obtengo la suma de todos los tipos de recrutamiento y despido por mes o año con el nombre de campo "-", y lo que necesito es que nuestre cada tipo de cada campo, como lo hacen las tablas por separado, pero en una sola tabla.

Como puedo solucionar este problema?, tengo que hacer algo más o crear el campo de otra forma?, y otra cosa, quiero habilitar una condición en el campo, en este caso depende de otro campo de mi modelo Qlikview, que se llama "EmplStateOrigCode", el cual posee unos valores simples que son 3 letras, 'A', 'S' y 'T'. Lo  que necesito en este caso es que ese campo compuesto, muestre sólo los empleados que tienen este campo con el valor 'A', y lo que escribo en Habilitar Condicional es esto: 'if(EmplStateOrigCode = 'A',TextCount(EmplId))' , pero tampoco me resulta y em muestra a todos los empleados.

Como puedo solucionar ambos problemas?, gracias de antemano por las respuestas.

11 Replies
edg_baltazar
Creator
Creator

Podrías subir un qvw de ejemplo para ayudarte a modificarlo?, Saludos!

Not applicable
Author

Podría, pero no tengo aún la licencia de Qlikview para ver archivos de otras personas , lo siento, de momento uso la edición personal.

edg_baltazar
Creator
Creator

Ok no hay problema , por lo menos podrías subir una impresión de pantalla de la tabla para ver como lo estas haciendo? , o en una excel poner un ejemplo de mas o menos que es lo que esperas obtener? , de antemano te puedo decir que busques lo que es 'Set Analysis' creo que eso te va a poder ayudar con tu segundo problema

Not applicable
Author

Hola Edgar, mira, aca muestro las dos tablas de Recruit y Termination que muestras sus datos sin problemas "Recruits, Transfer Inter Unit, etc, etc", y en la ultima junto ambos campos, pero no me muestra los valores, solo las sumas.

Ejemplo1.jpg

Y en esta segunda foto, es lo que hice para agruparlas en el gráfico, y le puse esa condición con otro campo, pero no funciona.

Ejemplo2.jpg

Eso es a grandes razgos, espero puedas ayudarme, saludos.

edg_baltazar
Creator
Creator

Si lo que te gustaría obtener es una columna que muestre tanto los recruit y termination type creo que lo que tienes que hacer es unir esos campos desde el script en uno solo, me imagino que tienes una tabla para recruit y otra para termination, lo que puedes hacer es concatenarlas pero debes cuidar que tus campos se llamen iguales, puedes renombrar tanto el de recruit como el de termination como campo 'type'  o lo que tu quieras y en este campo vas a tener tanto los tipos de recruit como las causas de termino y este nuevo campo va a ser el que vas a utilizar como dimension en tu tabla pivote..

Puedes subir una imagen del Table View? , o estaba pensando que no importa que tengas licencia personal lo puedes subir yo lo modifico y te digo como le hice para que modifiques tu el tuyo.

Not applicable
Author

Gracias, te adjunto el archivo para que me puedas ayudar por favor. Habia intentado lo que dices, de concatenar, pero el problema es que no supe como separar esos campos y que no estuvieran relacionados con las tablas residentes, por lo que me dejo referencias circulares que no pude solucionar, gracias por tu ayuda.

edg_baltazar
Creator
Creator

Hola taker, una disculpa apenas me pude conectar hasta este momento... viendo tu modelo lo que yo intentaría sería lo siguiente:

Como puedes observar en la siguiente imagen tanto tu tabla de Recruit como la de Termimation tienes los mismos tipos de datos por llamarlo de alguna manera, lo que te da la posibilidad de concatenar las tablas para formar una sola...

alksnjlasd.png

Con un codigo mas o menos como este...

RecruitmentTermination_T:

//DimRecruitmentType:

LOAD           RecruitmentTypeId,

              OriginalCode,

              Description,

     'Recruitment' as TYPE

FROM DimRecruitmentType.qvd (QVD);

CONCATENATE

//DimTerminationReason:

LOAD           TerminationReasonId,

                        OriginalCode,

              Description,

     'Termination' as TYPE,

              ShortDesc

FROM DimTerminationReason.qvd (QVD);

Ya que son una sola tabla debemos crear un campo llave para unirla con la tabla de FactEmployeeState, enseguida puedes poner este codigo...

RecruitmentTermination:

NoConcatenate

LOAD *,

           RecruitmentTypeId&'-'&TerminationReasonId as %KeyRT

Resident RecruitmentTermination_T;

DROP Table RecruitmentTermination_T;

Drop Fields  RecruitmentTypeId, TerminationReasonId from RecruitmentTermination;

Despues Debes crear el mismo campo llave %KeyRT en la tabla de FactEmployeeState para unirla con nuestra tabla resultante (a esta tabla de FactEmployeeState si le dejas los campos de RecruitmentTypeId, TerminationReasonId por si necesitas poner selectores)

Ahora... para la parte donde agregas el RecruitmentType y el TerminationReason yo te recomiendo que en lugar de esa serie de if anidados que tienes hagas solo una tabla en excel o inline donde pongas el OriginalCode y Reason, y le hagas un left Join a nuestra tabla resultante con esta que vas a crear en excel o inline..

Una vez hecho todo esto ya tendras una sola tabla y el campo reason que es el que nos interesa desplegar... en la tabla pivote deberas de tomar como dimension en campo reason que es donde estan contenidas las razones tanto de recruitment como de termination... asi los podras desplegar en una sola columna

Adicionalmente si te fijas al principio creamos el campo llamado TYPE el cual puedes agregar en la pivote tambien como primer dimension para que te agrupe las razones que son de recruitment y las que son de Termination por si lo necesitaras....

Espero que esto funcione y que no se me haya escapado ningun detalle de cualquier forma mas o menos esa es la idea, no puedo comprobarla ya que me es imposible correr el script al no tener tus qvds pero si te parece logica puedes probarla y ya me dices como te fue... Saludos!

PD: Espero que no sea demasiado tarde. ja!

Not applicable
Author

Hola Edgar, tu solución suena bastante bien, la intenté, pero no me funcionó, creo yo, que por los Id de RecruitType y de TerminationReason al concatenar.

Los Id, siempre son número correlativos, en el que mande eran 201, 202, 203, etc, en el archivo que trabajo actualmente parten desde el número 1, y al ser tablas distintas, cada Original Code tiene su Id numérico, que en este caso, coinciden. Entonces, como la primera tabla que se carga es la de Recruit, al cargar la segunda no carga sus Id numéricos, y como ves en el ejemplo que te adjunto ahora, esta la lista con los campos fusionados, pero en el reporte, sólo muestra los campos sacados desde Recruit Type, por ello creo que esos Id numéricos estan creando conflicto.

Eso, espero que me puedas seguir ayudando, gracias

Not applicable
Author

Escribo para comentartr que hice lo que recomiendas, lo de escribir inline esos datos Reason y luego hacer un left join a la tabla resultante, funciona, pero el cálculo lo hace mal, hace las sumatorias de cada tabla por separado y las muestra, y no los valores reales.

La verdad no se cómo solucionar esto, será mejor hacerlo desde sql y traer una tabla hecha a base de join o en qlikview se puede lograr lo que yo quiero.

Saludos y gracias por toda tu ayuda.