Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Duda ocultar gráficos con condición

Buenas tardes,

estoy trabajando en un proyecto en el que en una hoja va a estar llena de botones que permiten mostrar/ocultar gráficas. Cada botón muestra/oculta 1 gráfica máximo.

Mi duda es si hay alguna forma de limitar el número máximo de gráficas abierto, es decir, que en el momento que haya 2 gráficas abiertas, en el caso de pulsar para abrir una 3º gráfica ocultase las anteriores (una o las dos que haya abiertas).

Gracias

1 Solution

Accepted Solutions
ssanchez
Partner - Contributor III
Partner - Contributor III

Hola Carlos:

Se me ocurre que sería posible controlar con una variable de cadena los objetos que se están visualizando al estilo "1;2;6;" y utilizar para la condición de visualización de todos los objetos, que su identificador esté incluido en esa cadena. Por ejemplo, si utilizamos la variable "Visible" para almacenar los objetos mostrados y el identificador de un objeto como un entero "6". La condición de visualización quedaría así:

=index(Visible,6)

Para poder manipular la variable de objetos visibles es necesario una macro que añada el nuevo objeto a la cadena y elimine alguno de ella si hay demasiados visualizados, por ejemplo el más antiguo, simulando una cola FIFO. Esta macro se llamaría desde cada botón que visualice un objeto utilizando la variable ObjetoActual a modo de parámetro ya que Qlik no permite llamadas a macros con parámetros desde las acciones de un botón.

sub VisualizaObjeto

strObjetoActual=ActiveDocument.Variables("ObjetoActual").GetContent.String
strVisible = ActiveDocument.Variables("Visible").GetContent.String

'Si el objeto actual ya es visible, no hacer nada
if instr(strVisible,strObjetoActual) then exit sub

'Contar los objetos visualizados en la cadena Visible
numeroObjetos = 0
for i=1 to len(strVisible)
  if mid(strVisible,i,1)=SEPARADOR then
   numeroObjetos = numeroObjetos +1
  end if
next
 
if numeroObjetos >= MAXVISUALIZABLES then
  'Quitar el primero, el más antiguo
  strVisible = mid(strVisible,instr(strVisible,SEPARADOR)+1)
end if
 
'Añadir el nuevo objeto
strVisible = strVisible & StrObjetoActual & SEPARADOR
ActiveDocument.Variables("Visible").setcontent strVisible, true

end sub

Te adjunto un documento de ejemplo.

Espero que te sea útil.

Un saludo

View solution in original post

3 Replies
JoaquinLazaro
Partner - Specialist II
Partner - Specialist II

Hola Carlos:

Dos opciones:

a) Contendor, es un objeto que agrupa varios objetos, puedes dejar activo uno o ponerlo en modo rejilla y los ves todos más pequeñitos

b) Minimizar de Forma automática, seleccionas esta opción en todos los objectos afectados y cuando selecciones uno miminizará el resto ... solo puedes tener uno activo

Saludos

Joaquín

Not applicable
Author

Hola Joaquín,

El caso del contenedor no me ayuda porque no me limita que haya más gráficas abiertas, es decir, yo lo que quiero es que no me permita tener más de 2 gráficas abiertas y en el caso que quisiera abrir una 3º gráfica, minimizara 1 o los 2 gráficos que ya hay abiertos.

Y en el caso de minimizar de forma automática es buen recurso pero no me sirve solo tener uno activo, ya que tengo que tener máximo dos y es arbitrario ya que no siempre son los mismos.

Gracias

ssanchez
Partner - Contributor III
Partner - Contributor III

Hola Carlos:

Se me ocurre que sería posible controlar con una variable de cadena los objetos que se están visualizando al estilo "1;2;6;" y utilizar para la condición de visualización de todos los objetos, que su identificador esté incluido en esa cadena. Por ejemplo, si utilizamos la variable "Visible" para almacenar los objetos mostrados y el identificador de un objeto como un entero "6". La condición de visualización quedaría así:

=index(Visible,6)

Para poder manipular la variable de objetos visibles es necesario una macro que añada el nuevo objeto a la cadena y elimine alguno de ella si hay demasiados visualizados, por ejemplo el más antiguo, simulando una cola FIFO. Esta macro se llamaría desde cada botón que visualice un objeto utilizando la variable ObjetoActual a modo de parámetro ya que Qlik no permite llamadas a macros con parámetros desde las acciones de un botón.

sub VisualizaObjeto

strObjetoActual=ActiveDocument.Variables("ObjetoActual").GetContent.String
strVisible = ActiveDocument.Variables("Visible").GetContent.String

'Si el objeto actual ya es visible, no hacer nada
if instr(strVisible,strObjetoActual) then exit sub

'Contar los objetos visualizados en la cadena Visible
numeroObjetos = 0
for i=1 to len(strVisible)
  if mid(strVisible,i,1)=SEPARADOR then
   numeroObjetos = numeroObjetos +1
  end if
next
 
if numeroObjetos >= MAXVISUALIZABLES then
  'Quitar el primero, el más antiguo
  strVisible = mid(strVisible,instr(strVisible,SEPARADOR)+1)
end if
 
'Añadir el nuevo objeto
strVisible = strVisible & StrObjetoActual & SEPARADOR
ActiveDocument.Variables("Visible").setcontent strVisible, true

end sub

Te adjunto un documento de ejemplo.

Espero que te sea útil.

Un saludo