Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
chematos
Specialist II
Specialist II

Filtrar por valores distintos a un grupo de valores

Hola a todos,

Hay alguna forma fácil obtener un conjunto con los valores que sean distintos a ciertos valores de un campo??

Por ejemplo, en un campo tengo valores del 0 al 5 y quiero contar los distintos a 0 o 1.

Así obtengo el resultado que quiero, pero la única forma es hacer la resta del conjunto de los totales o hay una manera más sencilla??

sum({$<Campo=>}contador)-sum({$<Campo={'0','1'}>} contador)

Gracias, saludos.

1 Solution

Accepted Solutions
Miguel_Angel_Baeyens

Hola José María,

La forma más sencilla sería utilizando el operador de exclusión "-="

Sum({< Campo -= {0, 1} >} Contador)

Fíjate en el signo "-" delante del "=". Esa expresión devolverá la suma de los valores del campo Contador excluyendo aquellos que corresponden al valor 0 o 1. Por cierto, si 0 y 1 en tu ejemplo son valores numéricos, no utilices comillas simples, de manera que el análisis de conjuntos haga la comparación numérica y no convirtiendo a alfanumérica. Es bastante más rápido cuando tienes pocos millones de registros.

Espero que te ayude.

Miguel

View solution in original post

10 Replies
Miguel_Angel_Baeyens

Hola José María,

La forma más sencilla sería utilizando el operador de exclusión "-="

Sum({< Campo -= {0, 1} >} Contador)

Fíjate en el signo "-" delante del "=". Esa expresión devolverá la suma de los valores del campo Contador excluyendo aquellos que corresponden al valor 0 o 1. Por cierto, si 0 y 1 en tu ejemplo son valores numéricos, no utilices comillas simples, de manera que el análisis de conjuntos haga la comparación numérica y no convirtiendo a alfanumérica. Es bastante más rápido cuando tienes pocos millones de registros.

Espero que te ayude.

Miguel

chematos
Specialist II
Specialist II
Author

Muchas gracias Miguel, me imaginaba que tenía que haber algo así, siempre probaba con <> o != o similares.

Una duda, eso que has dicho que la comparación numérica es más rápida con pocos millones de registros, si tengo alrededor de 60 millones de registros también me compensa hacerla numérica?

A partir de cuántos millones es poco?

Saludos,

Chema

Miguel_Angel_Baeyens

Hola Chema,

Siempre que el valor del campo sea numérico, haz que la comparación sea numérica. Con 60 millones ya se puede notar si el gráfico se dibuja más rápido o más lento, en cualquier caso, y suponiendo que CampoValor sea un campo numérico,

{< CampoValor = {0, 1} >}

Obtiene el conjunto de valores donde CampoValor es 0 o 1, mientras que

{< CampoValor = {'0', '1'} >}

Primero convierte los valores de CampoValor a alfanuméricos (porque en QlikView los valores alfanuméricos van entrecomillados) y después realiza la selección. Con pocos miles de registros, puede que ese primer paso de conversión sea imperceptible. Con varios cientos de miles, se empieza a notar y con millones de registros se nota bastante. Lógicamente, todo influye: hardware, resto de expresiones, tipo de gráfico... En todo caso, la primera sintaxis será más rápida que la segunda, utilizada en la misma expresión.

Espero que tenga sentido.

Miguel

chematos
Specialist II
Specialist II
Author

Hola Miguel,

He probado cambiando las comparaciones y sí que parece que mejora un poco el tiempo o a lo mejor son solo mis ganas de que así sea ...

Y lo de usar el signo '-=' funciona, me dice Expression OK aunque me lo subraya como con faltas de sintaxis no sé por qué, pero el caso es que está OK.

Gracias por todo.

Chema

Miguel_Angel_Baeyens

Hola,

Sí, el editor de expresiones no reconoce ese operador, ni varios otros del análisis de conjuntos. Es un bug que espero que se corrija en futuras versiones, pero efectivamente, aunque no lo marque como sintaxis correcta, es correcto y debería devolver los resultados esperados.

Me alegro de ser de ayuda.

Miguel

Not applicable

Buenas Miguel Ángel,

Tengo la versión 9 de Qlikview y no me reconoce el operador "-=". Se genera error de sintaxis como es de esperar pero luego no me aparecen los valores. La expresión es correcta ya que si suprimo el símbolo "-" me aparecen los valores que son iguales. Por ejemplo:

campo = 100 Extrae todos los valores cuyo valor de campo son 100

campo -= 100 No aparece ningún valor.

¿No existe otro operador que sea distinto a?

Un saludo

Miguel_Angel_Baeyens

Hola,

Es posible que por la versión, esto sí lo reconozca:

Sum({< Campo = {*} - {0, 1} >} Contador)

Espero que te sirva.

Miguel

Not applicable

Hola de nuevo Miguel Ángel,

En primer lugar, gracias por tu rápida respuesta. En realidad no es una suma lo que quiero hacer con el operador "-=" Te pongo la expresión original que es correcta siempre que le quite el "-", a ver si se podría modificar:

if(Name -='Empresa1',(if(sum(ingresos)>100000, sum(ingresos))))

Quiero que sume pero a partir del filtro en Name, que no contabilice "Empresa1"

Gracias, un saludo

Miguel_Angel_Baeyens

Hola Walter,

La expresión debería ser como esta:

Sum({< Name = {*} - {'Empresa1'}, Ingresos = {'>100000'} >} ingresos)

Espero que te sirva.

Miguel