Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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!
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 ');
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.
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!!
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 ');
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!!