Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

No filtrar los nulos cuando se selecciona

Hola,


Tengo una duda en cuanto al filtrado automático que hace QV cuando seleccionas un campo. Os pongo en situación:

Tenemos por un lado una tabla que habla de los objetivos anuales de ingresos de una empresa por sectores empresarial:

IDObjetivos

Sector_Objetivo

Objetivos

1

A

1000

2

A

3000

Por otro lado tenemos una tabla con la información de los ingresos reales producidos, y un identificador que los relaciona en caso de que exista objetivo al que se le quiere asignar:

IDObjetivos

Sector_Ingresos

Ingresos

2

A

4000

NULL

B

8000

NULL

C

6000

En QlikView se muestra la siguiente tabla de tres columnas (en gris lo que el usuario no ve pero QV tiene y necesita por detrás):

IDObjetivos

Sector_Unión

Sector_Objetivo

Sector_Ingresos

Objetivos

Ingresos

1

A

A

NULL

1000

NULL

2

A

A

A

3000

4000

NULL

B

NULL

B

NULL

8000

NULL

C

NULL

C

NULL

6000

Cuando el usuario selecciona en QV los sectores “A” y “C”, QV filtra por los sectores que además no tienen nulo en ninguna columna que utiliza por detrás:

Sector_Unión

Sector_Objetivo

Sector_Ingresos

Objetivos

Ingresos

A

A

A

3000

4000

Y lo que queremos cuando el usuario seleccione en “A” y “C” es que QV filtre por la condición que ve el usuario, es decir:

Sector_Unión

Sector_Objetivo

Sector_Ingresos

Objetivos

Ingresos

A

A

NULL

1000

NULL

A

A

A

3000

4000

C

NULL

C

NULL

6000

Gracias!

1 Solution

Accepted Solutions
rubenmarin

Igual lo más sencillo sería crear el campo Sector_Unión en cada una de las tablas, y que la relación entre ellas sea por lo 2 campos: Sector_Unión y IDObjetivos.

Te creará una tabla sintética al tener más de 1 campo relacionado, en este caso sería una clave sintética correcta, pero si quieres evitarla puedes crear una clave concatenada con ambos campos (no es realmente necesario):

IDObjetivos &'_'& Sector_Objetivo as IdObjetivoSector // en la tabla de objetivos

IDObjetivos &'_'& Sector_Ingresos as IdObjetivoSector // en la tabla de datos reales


Y crear una tala intermedia usando el campo IdObjetivoSector, que tendrá los campos IdObjetivos y Sector_Unión:

LOAD

  FieldValue('IdObjetivoSector', RecNo()) as IdObjetivoSector,

  Subfield(FieldValue('IdObjetivoSector', RecNo()),'_',1) as IDObjetivos ,

  Subfield(FieldValue('IdObjetivoSector', RecNo()),'_',2) as Sector_Unión,

Autogenerate FieldValueCount('IdObjetivoSector ');

View solution in original post

4 Replies
rubenmarin

Hola Miguel,

¿Como se está creando Sector_Unión y como se seleccionan los sectores? ¿Puedes subir un ejemplo?

Por como se comporta podría ser que el sector se aplique de forma global, y esté asociado a los 3 sectores(Objetivo, unión e ingresos), por lo que al seleccionar solo se queda con los que tienen el valor seleccionado en los 3 campos.

Anonymous
Not applicable
Author

Gracias por tu respuesta!

Buena pregunta, me faltó decirlo, el campo Sector_Unión se obtiene de la siguiente manera:

Sector_Unión = if(isnull(Sector_Objetivo),Sector_Ingresos,Sector_Objetivo)

Una posible manera que he visto, lo que hace QV cuando el usuario selecciona los sectores "A" y "C" es seleccionar los registos que cumplen Sector_Objetivo=(A or C) and Sector_Ingresos=(A or C), y lo que necesitaría es que filtrara por Sector_Objetivo=(A or C or null) and Sector_Ingresos=(A or C or null). Si se le puede decir a QV que haga el filtro de esta manera estaría solucionado, pero esto es sólo un punto de vista para una posible solución.

Muchas gracias de nuevo!!

rubenmarin

Igual lo más sencillo sería crear el campo Sector_Unión en cada una de las tablas, y que la relación entre ellas sea por lo 2 campos: Sector_Unión y IDObjetivos.

Te creará una tabla sintética al tener más de 1 campo relacionado, en este caso sería una clave sintética correcta, pero si quieres evitarla puedes crear una clave concatenada con ambos campos (no es realmente necesario):

IDObjetivos &'_'& Sector_Objetivo as IdObjetivoSector // en la tabla de objetivos

IDObjetivos &'_'& Sector_Ingresos as IdObjetivoSector // en la tabla de datos reales


Y crear una tala intermedia usando el campo IdObjetivoSector, que tendrá los campos IdObjetivos y Sector_Unión:

LOAD

  FieldValue('IdObjetivoSector', RecNo()) as IdObjetivoSector,

  Subfield(FieldValue('IdObjetivoSector', RecNo()),'_',1) as IDObjetivos ,

  Subfield(FieldValue('IdObjetivoSector', RecNo()),'_',2) as Sector_Unión,

Autogenerate FieldValueCount('IdObjetivoSector ');

Anonymous
Not applicable
Author

Muy bueno!

Creo que hacer una tabla intermedia y sacar de ella el campo Sector_Unión es una solución válida, no pensé en cambiar la estructura de datos así.

Grande!!