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: 
Not applicable

COUNT con condicionales

Buenas tardes,

A ver si alguien puede echarme una mano con la siguiente duda:

Tengo un archivo con pedidos y en cada pedido aparecen detalladas las referencias que lo componen con su importe correspondiente (adjunto un archivo con una selección de algunos pedidos).

Necesito seleccionar aquellos pedidos que tengan las referencias GEWI63 y PERFO2 (ambas). Puede haber otras referencias más en el pedido.

Muchas gracias,

Manuel

1 Solution

Accepted Solutions
aramirez
Contributor II
Contributor II

Hola Manuel,

otra forma de poder realizar este calculo seria utilizar la expresión:

Count(if(Aggr(Count(DISTINCT {<Referencia={'GEWI63','PERFO2'}>}Referencia),[Nº pedido])=2,[Nº pedido]))

La ventaja de esta alternativa frente a la opción de Enrique es que no dependes de crear un flag durante la recarga por lo que cambiar las referencias del filtro seria mas sencillo, pero tienes la desventaja de que es menos optimo en cuanto a rendimiento ya que el uso de AGGR consume muchos recursos, por lo que dependiendo del volumen de datos que tengas que manejar esta opción puede penalizar bastante el rendimiento de la aplicación.

Te adjunto un archivo con un par de ejemplos contando pedidos con referencias distintas.

Espero te sirva de ayuda.

Un saludo

Alfredo

View solution in original post

13 Replies
ecolomer
Master II
Master II

Dependiendo del objetivo, la solución puede ser muy diversa.

Aquí te pongo un ejemplo simple.

p_pedido.png

ecolomer
Master II
Master II

Otra solución pasaría por marcar, en el proceso de carga, cada registro que tenga uno de los dos y finalmente seleccionar aquellos que tengan ambos

Not applicable
Author

Enrique,

Lo que necesito saber es qué pedidos tienen ambas referencias con independencia de que además puedan tener otras muchas.

Con la primera solución que me planteas, estas considerando los condicionales por separado y en consecuencia, el resultado es que 2 pedidos cumplen la condición. La realidad es que en la muestra que he enviado, tan solo hay un pedido que cumple la condición de tener ambas referencias a la vez.

ecolomer
Master II
Master II

No, quizás no lo he explicado bien. Si ves la fórmula está sumando 1 por cada uno de los valores encontrados, es decir que el 2 procede de las dos coincidencias. Es algo muy simple y probablemente por eso no sea muy aplicable a tu problema.

Si me explicas en detalle donde lo vas  a aplicar o lo que desea conseguir, busco una solución mas adecuada al problema.

Saludos,

Enrique Colomer

Not applicable
Author

Enrique,

Creo que no nos estamos entendiendo muy bien. Resumiendo lo que busco, sería algo así:

  1. Parto de un listado de pedidos (varios miles). Para el ejemplo, he extraído una pequeña muestra
  2. Cada pedido, esta compuesto por una o más líneas que corresponden a las referencias (partidas) que lo componen. En la solución que tú me dabas, estabas encotrando dos coincidencias pero corresponden a un solo pedido (si te fijas aunque están en líneas distintas, llevan el mismo nº de pedido).
  3. Lo que necesito es identificar qué pedidos llevan estas dos referencias, ambas a la vez, indenpendientemente de que puedan llevar otras más. En este ejemplo concreto, tendría que decirme que hay 1 pedido en el cual se está dando esta condición.

Espero que ahora esté un poco más claro.

Gracias en cualquier caso por el tiempo dedicado.

Manuel

ecolomer
Master II
Master II

OK, entendido, disculpa.

Una posible solución es hacerlo en el momento de la carga, mediante un "flag", siempre que las referencias sean fijas o susceptibles de estar en una variable.

Entonces en el momento de la carga:

1.- Haces una relectura (resident) quedándote solo con la identificación del pedido y el flag. Al empezar un pedido poner a cero el flag.

2.- Preguntas una de las referencias y si coincide sumas 1 al flag, y los mismo con la otra referencia

3. Los pedidos con valor del flag = 2 son los que tienen ambas referencias.

Si esto no se puede hacer en la carga, te explico otro método a continuación.

Not applicable
Author

Gracias Enrique.

¿cuál sería el otro método?

Not applicable
Author

Hola a todos,

¿Alguna sugerencia más de cómo poder resolverlo?

Muchas gracias,

Manuel

aramirez
Contributor II
Contributor II

Hola Manuel,

otra forma de poder realizar este calculo seria utilizar la expresión:

Count(if(Aggr(Count(DISTINCT {<Referencia={'GEWI63','PERFO2'}>}Referencia),[Nº pedido])=2,[Nº pedido]))

La ventaja de esta alternativa frente a la opción de Enrique es que no dependes de crear un flag durante la recarga por lo que cambiar las referencias del filtro seria mas sencillo, pero tienes la desventaja de que es menos optimo en cuanto a rendimiento ya que el uso de AGGR consume muchos recursos, por lo que dependiendo del volumen de datos que tengas que manejar esta opción puede penalizar bastante el rendimiento de la aplicación.

Te adjunto un archivo con un par de ejemplos contando pedidos con referencias distintas.

Espero te sirva de ayuda.

Un saludo

Alfredo