Donde la cláusula en el bucle del gráficoTengo un código que está diseñado para crear un informe basado en algunos filtros.Se alimentará con dos listas, la primera determinará qué materiales se extraerán (en este ejemplo, será Gender_List), y la segunda determinará qué propiedades se graficarán (en este ejemplo, Property_List).La idea es que habrá un bucle a través de cada género que creará una matriz de gráficos para todas las propiedades seleccionadas.También hay un gráfico general sin filtros en la parte superior del informe.
Hay dos maneras de hacer esto.
El primero con cláusulas where intrínsecas en los gráficos.En general, he logrado que esto funcione, excepto que la cláusula Where termina ocupando una posición en el cuadro de alineación. Además, por alguna razón, en la maqueta que tengo a continuación, tengo un error que no entiendo del todo (mi versión completa no tiene ese error, pero aún tendría curiosidad si alguien sabe cómo solucionarlo).Aquí está el código de la maqueta
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M","F"};
age_list = {12,13,14,15};
Property_List = {"Age", "Height", "Weight"};
w= new window("test",
VLB = V List Box ("A",
dt<<DISTRIBUTION></DISTRIBUTION>
El segundo es con cuadros de contexto de filtro de datos que envuelven cada iteración del ciclo de gráficos.Ese no he podido ponerme a trabajar.Si puedo hacer que funcione la versión anterior, no creo que deba preocuparme demasiado por el cuadro de contexto del filtro de datos.
De todos modos, ¿alguna idea sobre cómo limpiar el código anterior para eliminar esas cláusulas Where del cuadro de alineación?
ScriptingRe: Cláusula Where en bucle de gráficoModifiqué un poco tu guión.Tenía algunos anexos recursivos en su código que no funcionaban.Mira si esto te da lo que quieres
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);Re: Cláusula Where en bucle de gráficoDefinitivamente una mejora importante, pero parece que todavía tengo esa cláusula colgante "where (: Sex == Gender_List [j]" que aparece en el cuadro de alineación. ¿Alguna idea de cómo matar eso?Re: Cláusula Where en bucle de gráficoPuede eliminarlos, por ejemplo, con esto al final del script:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;Pero en este caso, supongo que no ayudará porque Lineup parece ser esos donde los cuadros de texto como elementos y la ventana se estropea antes de eliminarlos.
Re: Cláusula Where en bucle de gráficoQué tal esto:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
eval(substitute(
expr(dt << Distribution( Continuous Distribution( Column( _col_ ) ), where( :Sex == _select_) )),
expr(_col_),Property_List[i],
expr(_select_), Gender_List[j]
))
);
);
);
);Re: Cláusula Where en bucle de gráficoParece que todavía no puedo averiguar cómo deshacerse de esa cláusula "dónde" en el cuadro de alineación.Lo cambié a un objeto generador de gráficos para ver si las preferencias de encabezado / pie de página lo eliminarían, pero no pareció hacerlo.
Intenté volver a escribir esto, un filtro de datos que envuelve el LB.Eso tiene algunas ventajas de todos modos, ya que permite cierta personalización por parte del usuario.Esta parece Sin embargo, para que funcione, como puede ver, parece un poco inestable porque el Filtro de datos está increíblemente colapsado.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ),
dt << Graph Builder(Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Histogram( X, Legend( 6 ) ) )
)
)
);
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
data filter context box(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Graph Builder(
Size( 534, 450 ),
Show Control Panel(0 ),
Variables( X(Column( Property_List[i] ) )),
Elements( Histogram( X, Legend( 6 ) ) ),
/*Where( :Sex == Gender_List[j] ) ),*/
),
)
),
dt<<DATA filter=""></DATA>
Intenté cargar el filtro de datos en la parte superior del LB pero no pareció funcionar.
¿Alguna idea sobre cómo limpiar esto?Esto técnicamente funciona, pero parece un poco chatarra.
Re: Cláusula Where en bucle de gráficoSi agrega @jthi código al código que proporcioné, le dará lo que desea

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;