Skip to main content
Announcements
Global Transformation Awards submissions are open! SUBMIT YOUR STORY
cancel
Showing results for 
Search instead for 
Did you mean: 
DiegoR
Contributor II
Contributor II

Set analysis anidado

Hola a todos.

Tengo el siguiente set analysis en una medida por supuesto pero me genera un error de sintaxis. Agradezco sus ideas para solucionarlo:

SUM({<Count({<IDESTADO={'1'}>} IDINFRACCIONTEC)-=0>}META)

 

Saludos,

 

DiegoR

1 Solution

Accepted Solutions
rubenmarin

Por lo que veo en la imagen la columna META sí tiene valor, si una de las columnas tiene valor a mostrar te va a mostrar el resto.

Lo mejor creo que sería usar un If delante para calcular si la columna tiene que mostrar valor o no, no debería dar ningún problema de rendimiento.

Si estuviésemos hablando de bastantes millones de registros igual sería mejor usar un flag creado en el script pero no creo que sea necesario.

View solution in original post

8 Replies
rubenmarin

Hola, el Set analysis es como aplicar selecciones, se indica un campo y qué valores se van a filtrar en ese campo, la sintaxis básica es:

{<Campo={'ValoresCampo'}, OtroCampo={"ValoresBusquedaOtroCampo"}, ...>}

El resultado es como si seleccionases esos valores solo que se aplica únicamente a la expresión donde se incluye.

No sé si un equivalente a lo que buscas sería:

Sum({<IDESTADO={'1'}, IDINFRACCIONTEC={"*"}>} META)

Que traducido será algo como sumar los META para IDESTADO=1 y con algún valor en IDINFRACCIONTEC.

DiegoR
Contributor II
Contributor II
Author

Mucahs gracias Rubén por tu respuesta.

Lo que busco es sumar el campo meta, solo cuando el COUNT al que hago
referencia sea diferente de 0 y que corresponde en la imagen a "Capturas en
revisión de imágenes". Apliqué tu sugerencia pero me trae todo el campo
META en 0.

Lo más cercano que he llegado a lo que necesito es con la siguiente medida:
IF(Count({} IDINFRACCIONTEC)<>0,SUM(META))

Obviamente ese IF es muy ineficiente en una medida, por eso ando buscando
otra solución, además que al totalizar no me trae el valor correcto. Usando
esta medida, obtengo la siguiente tabla que en el total me debería mostrar
1100 en el campo META:

[image: image.png]

[image: image.png]
rubenmarin

Hola Diego, la imagen no se  ve.

Ese if no es tan ineficiente como si estuviese metido dentro del count, y dependiendo de las dimensiones de la tabla puede que sea una buena opción. 

Si pudieses subir un ejemplo aunque sea con datos de una inline para ver lo que tienes y lo que quieres obtener sería más fácil darte una solución.

Saludos.

DiegoR
Contributor II
Contributor II
Author

Hola Rubén, gracias por tu ayuda.

Mira, este es un ejemplo con INLINE de las dos tablas que necesito relacionar:

Capturas:
LOAD * Inline [
IDINFRACCIONTEC, IDUSUARIO, VELOCIDAD, CARRIL, IDESTADO, FECHAFIN
0237658,217,45,1,1,01/01/2020
0237659,217,45,1,1,01/01/2020
0237660,217,45,1,1,01/01/2020
2736590,219,63,2,1,01/01/2020
2736591,219,63,2,1,01/01/2020
9846100,230,67,3,2,01/01/2020
2536871,271,81,3,1,01/01/2020
2764891,201,62,2,1,01/01/2020
];

Proceso:
LOAD * Inline [
FECHAFIN, IDUSUARIO, META, IDESTADO
01/01/2020,217,10,1
01/01/2020,219,10,1
01/01/2020,230,10,1
01/01/2020,271,10,1
01/01/2020,256,10,1
01/01/2020,283,10,1
01/01/2020,294,10,1
01/01/2020,289,10,1
];

Ahora, el resultado que esperaría con estos datos de ejemplo es el siguiente:

IDUSUARIO     COUNT(IDINFRACCIONTEC)     META

Totales                              8                                            50

217                                       3                                             10

219                                       2                                              10

230                                       1                                              10

271                                        1                                             10

201                                        1                                              10

 

rubenmarin

Hola Diego, el 201 no tiene META en la 2ª tabla ¿Falta el dato en la tabla o realmente el 10 tiene que obtenerse de alguna forma con los datos que hay?

Aparte del If puedes usar esta expresión como set analysis para META:

Sum({<IDUSUARIO={"=COUNT(IDINFRACCIONTEC)<>0"}>} META)

DiegoR
Contributor II
Contributor II
Author

Rubén, tu solución me funciona muy bien cuando tengo seleccionada una fecha específica. Pero cuando quiero ver varias fechas o el gráfico agregado por mes, en el campo META me sigue sumando registros que tienen la medida IMAGENES= 0.

Estas son las dos medidas que estoy utilizando con base en la solución que me propusiste:

Medida META: COUNT({<IDUSUARIO={"=COUNT({<IDESTADO={'1'}>}IDINFRACCIONTEC)>0"}>} IDINFRACCIONTEC)

Medida IMAGENES: SUM({<IDUSUARIO={"=COUNT({<IDESTADO={'1'}>}IDINFRACCIONTEC)<>0"}>} META)

Adjunto imagen.

rubenmarin

Por lo que veo en la imagen la columna META sí tiene valor, si una de las columnas tiene valor a mostrar te va a mostrar el resto.

Lo mejor creo que sería usar un If delante para calcular si la columna tiene que mostrar valor o no, no debería dar ningún problema de rendimiento.

Si estuviésemos hablando de bastantes millones de registros igual sería mejor usar un flag creado en el script pero no creo que sea necesario.

DiegoR
Contributor II
Contributor II
Author

Funciona perfecto. Muchas gracias por tu ayuda.