Ejemplos de Estados Alternos en Expresiones de Gráfico

Estos ejemplos tratan de mostrar las mejores prácticas recomendadas en el uso de los Estados Alternos por parte de desarrolladores QlikView y/o usuarios extremadamente avanzados de QlikView. Los ejemplos están en el archivo: ‘Alternate States Functionality.qvw’

Sincronizar las Selecciones entre Estados

Se pueden emplear las siguientes expresiones en un único gráfico:

count({$} DISTINCT [Invoice Number])

count({$} DISTINCT [Invoice Number])

count({$} DISTINCT [Invoice Number])

Hay un problema con este método y es que el desarrollador de QlikView debe duplicar las selecciones (cuadros de lista y cuadros de selección múltiple) en cada uno de los tres estados, para que el usuario final pueda hacer las adecuadas selecciones en los diversos estados. En muchas ocasiones el desarrollador de QlikView deseará tener un conjunto común de selecciones, disponibles para los tres estados. Esto permitirá al usuario final establecer el contexto para los diversos gráficos y después hacer uso de determinadas selecciones específicas para mostrar claramente las diferencias entre los estados. Se puede emplear Análisis de Conjuntos con los estados para mantener la consistencia de determinadas selecciones en los diferentes estados.

count({Estado1<Year = $::Year, Month = $::Month>} DISTINCT [Número Factura])

count({Estado2<Year = $::Year, Month = $::Month>} DISTINCT [Número Factura])

El desarrollador de QlikView mantendrá las selecciones Year y Month en el Estado1 y Estado2 sincronizadas con las selecciones de Year y Month en el estado predefinido. El desarrollador de QlikView puede añadir elementos a los modificadores de conjuntos según sea necesario para poder mantener la consistencia de más archivos entre los estados.

Operadores de conjunto

Se puede hacer uso de los operadores de conjunto (+, *, -, /) con los estados. Las expresiones siguientes son válidas y contarán los números de factura distintos que están o bien en el estado predefinido o en el Estado1.

Ejemplos:  

count({$ + State1} DISTINCT [Número de Factura])
cuenta los números de factura distintos en la unión del estado <predefinido> y el Estado1.

count({1 - State1} DISTINCT [Número de Factura])
cuenta los números de factura distintos que no estén en el Estado1.

count({State1 * State2} DISTINCT [Número de Factura])
cuenta los números de factura distintos que estén en ambos estados, el estado <predefinido> y el Estado1.

Nota: Tenga cuidado cuando utilice los operadores de conjunto de esta manera. En algunas situaciones el resultado no será el esperado. Esto es porque las selecciones de un determinado estado generan un conjunto de datos que puede no ser totalmente compatible con el/los conjuntos con los que se combina. Esto se hace particularmente cierto a medida que aumenta la complejidad del modelo de datos.

Definiciones implícitas de valores de campos

Otra forma de utilizar los operadores de conjuntos es con las funciones de elementos P() y E(). Estas funciones sólo están disponibles dentro de expresiones de conjuntos.

Ejemplos:  

count({$<[Número de Factura] = p({State1} [Número de Factura])>} DISTINCT [Número de Factura])
Esta expresión cuenta los números de factura distintos que estén en el estado <predefinido> basándose en los posibles números de factura distintos que estén en el Estado1.

Es prácticamente equivalente a esta expresión:

count({$<[Número Factura] = Estado::[Número Factura]>} DISTINCT [Número Factura])

La diferencia entre ambas expresiones es que en la primera, los valores posibles de números de factura del Estado1 pasan al estado predefinido. En la segunda expresión, los valores seleccionados del Estado1 pasan al estado predefinido. Si el usuario no ha efectuado ninguna selección de números de factura en el Estado1, ningún valor de números de factura pasará al estado predefinido.

Los operadores de conjuntos con lo que mejor se combinan y utilizan es con modificadores de conjuntos. La siguiente expresión halla la intersección de los posibles números de factura del Estado1 y el Estado2 y pasa dichos valores a los números de factura del estado predefinido.

Ejemplos:  

count({$<[Número de Factura] = p({State1} [Número de Factura]) * p({State2} [Número de Factura])>} DISTINCT [Número de Factura])
La expresión para hallar la intersección de números de factura en el estado <predefinido> y Estado1 es:

count({$<[Número de Factura] = p({$} [Número de Factura]) * p({State1} [Número de Factura])>} DISTINCT [Número de Factura])

Esta expresión puede resultar confusa porque utiliza un estado (<predefinido> en este caso) tanto en la función de elementos como en un identificador de conjunto. Tenga en cuenta que la función de elementos p($) devuelve los valores posibles del estado predefinido. El identificador de conjunto {$} es modificado por el resultado de las funciones de elementos. Cualquier selección(es) de facturas actualmente presente(s) en el estado predefinido son ignoradas por los valores de la intersección de las funciones de elementos.

Debería tenerse en cuenta que la expresión anterior todavía no es del todo correcta, puesto que no logra sincronizar las selecciones comunes entre ambos estados, el estado predefinido y el Estado1. A continuación una expresión que sí hará eso:

Ejemplos:  

count({$<[Número Factura] = p({$} [Número Factura]) * p({Estado1<Year = $::Year, Month = $::Month>} [Número Factura])>} DISTINCT [Número Factura])

Igual que antes, el desarrollador de QlikView puede añadir campos en el modificador para mantener la consistencia en las selecciones de los diversos estados.