Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Modificadores de Conjuntos con filtro de otro campo

Buenos días.

Primero quiero pedir perdón por postearlo en castello esta incidencia, ya que me costaría mucho intentar explicarlo en inglés y no quedaría muy claro.

El problema que planteo me ocurre a partir de una idea que tengo de poder crear una tabla de filtros de unos epigrafes (como pueden ser de una Cuenta de resultados) para que se apliquen esos filtros automaticamente según se configuren en un Excel.

A partir de ahí, yo quiero crear una tabla pivotante que la dimensión sean esos epígrafes, pero que los datos se filtren cada epigrafe con el filtro que corresponda a cada fila en el Excel.

Una expresion con la que estoy probando esto es:

=Aggr(Sum ({<Cuenta ={$(=MaxString([Filtro]))} >} Valor), Filtro)

Como veis, quiero filtrar en el campo Cuenta por el valor del campo Filtro.

He probado tanto sin Aggr como sin el, así como haciendo el Aggr en vez de por Filtro, que sea por Epigrafe, pero con el mismo resultado.

El resultado es que siempre valida la expresion $(=MaxString([Filtro])) a nivel general y aplica el resultado a todos los valores de la dimension epigrafe. La idea es que se calculara dicha expresion por cada valor de Epigrafe (o de Filtro), por eso el Aggr, pero el resultado ha sido el mismo.

Si selecciono individualmente cada uno de los Epigrafes se calcula correctamente.

En el documento tengo varias expresiones de prueba con el mismo resultado, solo funcionan cuando se seleccionan individualmente los epigrafes.

Os adjunto el documento y también los dos ficheros Excel con los que estoy trabajando.

La idea, en el caso de que sea posible realizar esto, es crear tantas columnas como posibles filtros de campos haya (Cuenta, Proyecto, Cliente, ....) y rellenar ese Excel y que QV lo calcule automaticamente.

Muchas gracias por adelantado a los que me ofrezcan su ayuda y comentarios.

Un saludo.

5 Replies
Not applicable
Author

Lo subo por si alguien que lo vea me puede ayudar.

Muchas gracias.

Not applicable
Author

Lo vuelvo a subir por si alguien puede darme una idea.

Muchas gracias.

Un saludo.

Anonymous
Not applicable
Author

Hola Daniel,

una opción que se me ocurre por ahora es que los filtros no sea un rango si no que todos sean ingresados, es decir para el el caso del Epigrafe prueba3 el valor sea 602 y no un rango...

de tal forma que el script hagas lo siguiente

LOAD Cuenta,

     Fecha,

     Valor

FROM

PruebaDatosSetAnalisis.xlsx

(ooxml, embedded labels, table is Hoja1);

LOAD Epigrafe,

     Subfield(Filtro,',') as Cuenta

FROM

PruebaEpigrafesSetAnalysis.xlsx

(ooxml, embedded labels, table is Hoja1);

Not applicable
Author

Muchas gracias Diego.

Estoy probando tu solucion, y me gusta bastante, pero no utilizada directamente como dices.

La cuestión es que puede tener filtros complejos el campos, porque pueden ser lista de valores, rangos, mezcla de ambos e incluso filtro con comodines.

Lo que he hecho es lo siguiente para que me funcione al menos en los tres primeros casos, pero tengo que ver si puedo hacer que funcione en el caso que algún filtro sea con comodines.

Muchísimas gracias por tu respuesta, ya que esto me da un punto de partida para poder atacar el problema, aunque no sea la que buscaba (sigo pensando que se debería filtrar en los conjuntos de datos un campo por el valor de otro campo de manera dinámica).

Un saludo.

Aux_Datos:

LOAD Cuenta,

     Fecha,

     Valor

FROM

PruebaDatosSetAnalisis.xlsx

(ooxml, embedded labels, table is Hoja1);

Datos:

NoConcatenate

Load *

Resident Aux_Datos;

Epigrafes:

LOAD Epigrafe,

     Subfield(Filtro,'|') as FiltroCuenta

FROM

PruebaEpigrafesSetAnalysis.xlsx

(ooxml, embedded labels, table is Hoja1);

Join(Aux_Datos)

Load *

Resident Epigrafes;

Drop Table Epigrafes;

Epigrafes:

NoConcatenate

Load

          Cuenta,

          Epigrafe

Resident Aux_Datos

Where IsNull(FiltroCuenta) Or Cuenta = FiltroCuenta Or (Cuenta >= SubField(FiltroCuenta, '..', 1) And Cuenta <= SubField(FiltroCuenta, '..', 2));

Drop Table Aux_Datos;

Not applicable
Author

Hola Daniel,

     yo tenía y sigo teniendo, el mismo problema que tu y tu solución me parece muy buena partiendo de sugerencia de Diego. Digo que sigo teniendo pq al igual que tu pienso que con conjuntos se debe de poder hacer y he hecho bastantes pruebas al igual que tu y creo que debe ser una cuestión de sintaxis, pero con tu solución solo faltaría la cuestión que comentas de los comodines, el hecho de que puede filtrar por todas aquellas cuentas que comiencen por ej. 601* y que supongo que llegaste a solucionar.

Yo lo conseguí con variables:

Ej:

Set vGastosPersonal= (Cuenta like '640*' or like '641*' or like '642*' or like '649*')

y luego una operación de conjuntos de este tipo si funciona:

=sum({<Cuenta = { $(#vGastosPersonal) }>} Diario.Importe )

pero no hay forma metiendo en un campo de una tabla el valor de dicha variable y luego poder utilizarla. Si llegaste a alguna solución te lo agradecería, seguiré haciendo pruebas.

Muchas gracias y un saludo.