Skip to main content
Announcements
SYSTEM MAINTENANCE: Thurs., Sept. 19, 1 AM ET, Platform will be unavailable for approx. 60 minutes.
cancel
Showing results for 
Search instead for 
Did you mean: 
ivan_revuelta
Contributor
Contributor

Problema para filtrar dos intervalos de fechas distintos con el mismo filtro

Hola,

Soy novato en Qlik y necesito ayuda. Mirando en el foro he conseguido cargar un script que me permite ver los cursos que hay activos entre dos fechas mediante el filtro Year: (Esta parte la hace bien)

Example.PNG

El problema es que necesito que filtre también por el grupo en el que los profesores estaban en ese momento. Es decir que además de filtrar por la FechaInicio y FechaFin, lo haga también por los campos miembroDesde y miembroHasta. No sé como hacerlo. Digamos que en la foto solo tendrían que verse las lineas con cuadro rojo que son las que corresponden a 2013. 

 Este es mi script:

// Cargo los dataset

[cursos]:

LOAD

    codigoCurso,

    curso,

    Date(Date#([fechaInicio], 'DD/MM/YYYY') ) AS [fechaInicio],

Date(Date#([fechaFin], 'DD/MM/YYYY') ) AS [fechaFin],

    profesor

FROM [lib://AttachedFiles/Cursos.csv]

 

(txt, codepage is 28591, embedded labels, delimiter is ';', msq);

 

[profesores]:

LOAD

    profesor,

    Grupo,

    Date(Date#([miembroDesde], 'DD/MM/YYYY') ) AS [miembroDesde],

Date(Date#([miembroHasta], 'DD/MM/YYYY') ) AS [miembroHasta]

FROM [lib://AttachedFiles/profesores.csv]

(txt, codepage is 28591, embedded labels, delimiter is ';', msq);

 

// Creo el intervalo para las fechaInicio y fechaFin de la tabla cursos

MinMaxDate:

Load

  RangeMin(Min(fechaInicio),Min(fechaFin)) as MinDate,

  RangeMax(Max(fechaInicio),Max(fechaFin)) as MaxDate

Resident cursos;

 Let vMinDate = Num(Peek('MinDate',0,'MinMaxDate'));

Let vMaxDate = Num(Peek('MaxDate',0,'MinMaxDate'));

 Drop Table MinMaxDate;

 

Calendar:

Load

  Date(TempDate) as Date,

  Month(TempDate) as Month,

  Year(TempDate) as Year,

  Date(MonthStart(TempDate),'DD/MM/YYYY') as MonthYear;

Load

  $(vMinDate)+IterNo()-1 as TempDate

AutoGenerate 1

While $(vMinDate)+IterNo()-1 <= $(vMaxDate);

 

IntervalMatch(Date)

Load fechaInicio, fechaFin Resident cursos;

1 Solution

Accepted Solutions
rubenmarin

Cuando un campo tiene más de un valor la expresión devuelve null(), habría que aplicar una expresión que devuelva un único valor, por ejemplo:
Only({<miembroDesde={"<=$(=YearEnd(makedate(Min(Año))))"}, miembroHasta={">=$(=YearStart(makedate(Max(Año))))"}>} miembroHasta)

Saludos.

View solution in original post

6 Replies
rubenmarin

Hola Ivan, si lo he entendido bien no es un tema del script, por ejemplo si se seleccionase 2010 habría que mostrar la primera fila, y si se selecciona 2015 la 2ª y la 3ª, por lo que sí necesitas tener cargadas todas la filas.

En este caso se puede filtrar las filas usando set analysis, en cada medida (o usando una dimensión calculada que sea la clave) deberías añadir la condición para filtrar las fechas, por ejemplo:
Only({<miembroDesde={"<=$(=YearEnd(makedate(Año)))"}, miembroHasta={">=$(=YearStart(makedate(Año)))"}>} miembroHasta)
ivan_revuelta
Contributor
Contributor
Author

Hola,

Con esa expresión funciona pero me limita la selección a un único año. Si elijo dos años la tabla no muestra nada. Necesitaría que permitiese selección multiple. 

En cualquier caso, muchas gracias.  No conocía el concepto Set Analisys.

Un saludo. 

rubenmarin

Cuando un campo tiene más de un valor la expresión devuelve null(), habría que aplicar una expresión que devuelva un único valor, por ejemplo:
Only({<miembroDesde={"<=$(=YearEnd(makedate(Min(Año))))"}, miembroHasta={">=$(=YearStart(makedate(Max(Año))))"}>} miembroHasta)

Saludos.

ivan_revuelta
Contributor
Contributor
Author

Estupendo! con el intervalo ya funciona para más selecciones. ¿Hay forma de ocultar la columna? 

Muchas gracias por la rápida respuesta.

Un saludo, 

rubenmarin

No entiendo ¿qué columna hay que ocultar? El set analysis (desde '{<' hasta '>}') habría que aplicarlo a cada medida, si todas las medidas están filtradas no se dibujará la fila.

También se podría usar una dimensión calculada pero habría que identificar la dimensión a usar y como poder aplicar la expresión, si no son muchas medidas sería mejor aplicar el set analysis a cada una de las medidas.
ivan_revuelta
Contributor
Contributor
Author

No he dicho nada,  la cosa es que lo estaba aplicando a una tabla donde no tenía medidas. Yo he creado una medida con la expresión y entonces el campo miembroHasta me salia repetido en la tabla (como dimensión y como medida).
Simplemente he quitado la dimensión y dejado la medida que ya tiene esa condición incluida. 

Me he liado yo solo. Muchas gracias.

Saludos.