Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
kstronemesis
Contributor II
Contributor II

OPTIMIZACIÓN CONTEO IF

Buenos Días,

Por favor me pueden ayudar a optimizar el siguiente script ya que al momento de mostrar información en los tableros me da TimeOut pero cuando filtro por unos pocos datos me despliega información

El script que tengo es el siguiente

MES DESTINATARIO

=if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=1,'MES 1',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=2,'MES 2',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=3,'MES 3',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=4,'MES 4',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=5,'MES 5',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=6,'MES 6',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=7,'MES 7',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=8,'MES 8',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=9,'MES 9',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=10,'MES 10',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=11,'MES 11',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=12,'MES 12',

))))))))))))

TOTAL MESES

count(distinct TRA_DESTINATARIO)

PORCENTAJE

count(distinct TRA_DESTINATARIO)/sum(total(Aggr(count(distinct TRA_DESTINATARIO),TRA_DESTINATARIO)))

Filtro con pocos datos maestra información

Pero cuando quiero que me despliegue la información de todo un año o mas me da TimeOut como puedo optimizar los cálculos o que puedo hacer?

1 Solution

Accepted Solutions
hector_munoz
Specialist
Specialist

Hola Miguel,

En script no puedes usar Aggr(), ya que es una función de gráfico, sino que tienes que hacer GROUP BY.

Algo así como:

LOAD     TRA_DESTINATARIO             AS TRA_DESTINATARIO

          Count(DISTINCT Mes_Registro) AS NUM_MESES

RESDENT   XXXXXXXXX

GROUP BY  TRA_DESTINATARIO;


Y luego ya en los objetos usas una expresión similar a:


Pick(NUM_MESES, 'MES 1', 'MES2', ...)


Espero que te sirva,

H

View solution in original post

7 Replies
hector_munoz
Specialist
Specialist

Hola Miguel,

Al menos la expresión:

=if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=1,'MES 1',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=2,'MES 2',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=3,'MES 3',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=4,'MES 4',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=5,'MES 5',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=6,'MES 6',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=7,'MES 7',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=8,'MES 8',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=9,'MES 9',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=10,'MES 10',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=11,'MES 11',

if (Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)=12,'MES 12',

))))))))))))

, la podrías simplificar de la siguiente forma:

=Pick(Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO),

          'MES 1',

          'MES 2',

          'MES 3',

          'MES 4',

          'MES 5',

          'MES 6',

          'MES 7',

          'MES 8',

          'MES 9',

          'MES 10',

          'MES 11',

          'MES 12')


, así solo se evaluaría "Aggr(count(distinct Mes_Registro),TRA_DESTINATARIO)" una sola vez. Si además esta expresión Aggr() la usas en más sitios, podrías crearte una variable.


Espero que te ayude... La función Pick() es muy útil para estos casos (mira también la función Match() porque ambas combinadas te pueden ayudar en casos similares).


Saludos,

H

kstronemesis
Contributor II
Contributor II
Author

Hola Héctor,

Le cambie por la función Pick, y filtro por año me sigue dando TimeOut , filtro por algunos destinatarios me funciona y me despliega información hay alguna forma mas de optimizar porque la información que tengo es mucha

hector_munoz
Specialist
Specialist

¿Puedes adjuntar la app para que te ayudemos?

kstronemesis
Contributor II
Contributor II
Author

Gracias Héctor

El QVF pesa 1.50 GB no le puedo adjuntar

Se puede realizar el Pick en un script para que me guarde en un QDV para así no realizar el calculo en el QVF ¿como podría cambiarle a script o se mantiene el mismo formato?

hector_munoz
Specialist
Specialist

Hola Miguel,

Si el cálculo que necesitas no es susceptible de verse modificado por las selecciones que haga el usuario entonces sí que lo podrías hacer en el script, sin duda.

Saludos,

H

kstronemesis
Contributor II
Contributor II
Author

Gracias por tu ayuda Héctor y el formato se mantiene el mismo?

hector_munoz
Specialist
Specialist

Hola Miguel,

En script no puedes usar Aggr(), ya que es una función de gráfico, sino que tienes que hacer GROUP BY.

Algo así como:

LOAD     TRA_DESTINATARIO             AS TRA_DESTINATARIO

          Count(DISTINCT Mes_Registro) AS NUM_MESES

RESDENT   XXXXXXXXX

GROUP BY  TRA_DESTINATARIO;


Y luego ya en los objetos usas una expresión similar a:


Pick(NUM_MESES, 'MES 1', 'MES2', ...)


Espero que te sirva,

H