Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?El enfoque que puede tomar es agregar al filtro de datos local, un controlador de cambios (hacer controlador de cambios de filtro), que cuando el filtro cambia, captura la cláusula Where (cláusula Obtener dónde) y luego toma ese resultado y lo aplica a la Título en el título del gráfico (texto establecido).
La documentación sobre cómo manipular la salida se puede encontrar en la sección Guía de secuencias de comandos en Árboles de visualización.Esta documentación está disponible en la Biblioteca de documentación de JMP, disponible en el menú desplegable Ayuda.
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?@hogi Gracias. Esto funcionará, pero tengo más de un panel de filtros de datos y quiero cambiar el título en función de solo uno de ellos (su secuencia de comandos parece capturar todos los cambios en cualquiera de los paneles de filtros de datos locales).
¿Cómo capturar cambios en un panel de filtro de datos local específico?
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Si hay varios filtros de datos en el mismo informe, para obtener el correcto, puede comenzar desde el objeto GaphBuilder respectivo, subir un paso y buscar el Filtro de datos:
ldf = (gb << parent)["Local Data Filter"] << get scriptable object;
código completo:
Ver más...
Alternativas que son menos robustas:
ldf = (current report() << XPath("(//OutlineBox[text()='Local Data Filter'])"))[2] << get scriptable object;
ldf = current report()[OutlineBox(3)]<< get scriptable object;
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?@hogi Gracias por tus sugerencias. Probé tu segunda opción menos robusta pero veo que no es muy robusta como dices y no pude hacer que funcionara correctamente.
En el siguiente script, si quiero mostrar solo la selección de "edad" en el mosaico del gráfico, ¿cómo escribirlo?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Perdón por el malentendido.
Si solo hay un único filtro de datos en el informe, no es necesario especificar la referencia con mayor precisión.
Por otro lado:
Si desea restringir el título a alguna parte del Dónde cláusula , necesita otra expresión Regex como la siguiente.
Busca cualquier :edad == entre paréntesis y devuelve la cadena completa entre paréntesis.
Entonces, para casos como
"Select Where( (:age == 14 | :age == 15) & :weight >= 113.5 )";
"Select Where( :age == 14 | :age == 16 | :age == 17 )"
simplemente devolverá la parte :age ... .
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?@hogi . Su secuencia de comandos a continuación no muestra ni cambia el título del gráfico para mí en JMP 16.2.0.
ames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);
¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Uso lo siguiente para mostrar "mi texto" en la parte superior de mis gráficos.
Dispatch( {}, "graph title", TextEditBox, {Set Text( "my text" )} )Sin embargo, me gustaría que los elementos seleccionados en el filtro de datos local se muestren en el título del gráfico a medida que los selecciono (¿tal vez varias secciones delimitadas por comas?).
¿Cómo lograr esto en JSL?
La personalización en masaRe: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?¡Buena expresión regular!
Los paréntesis se utilizan de dos maneras inteligentes:
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
Al principio y al final del patrón, el carácter de barra invertida escapa de un paréntesis, \(...\), por lo que coincide con un paréntesis literal en la cláusula where. El espacio seguido de un asterisco coincide con cero o más espacios.
El par interior de paréntesis mirar como si coincidieran con los paréntesis reales en la cláusula where, ¡pero no! Los paréntesis reales ya coincidían. Estos paréntesis internos son paréntesis de agrupación y forman el primer grupo de la coincidencia.
Dentro de los paréntesis de agrupación, los caracteres literales :edad == son coincidentes, entonces .*? hace coincidir los caracteres, uno a la vez, hasta que se pueda hacer coincidir el último paréntesis literal con escape. El . coincide con cualquier cosa, el * significa 0 o más, y el ? cambia el 0 o más de codicioso (carrera hasta el final) a reacio (uno a la vez). El comportamiento reacio se asegura de que se utilice el primer paréntesis.
Finalmente, el "\1" se usa para dar formato a un resultado: todo lo que coincidió con el primer conjunto de paréntesis de agrupación.
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?@hogi Su secuencia de comandos a continuación ahora funciona en JMP 16.2 pero con los siguientes problemas.
- El gráfico comienza sin seleccionar la edad y sin mostrar el título, pero el último permanece en el título del gráfico cuando todas las casillas de edad están desmarcadas.
- En el problema real, el título comienza a mostrarse solo cuando se marcan más de una casilla de verificación.
¿Cómo resolver estos dos problemas (a menos que esta sea específica de mi versión de JMP)?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Tienes razón.
Si Regex no encuentra la información de la edad, regresa faltante.
Así que después
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
por favor añadir
if(ismissing(ldfText),ldfText = "all ages");
para solucionar el problema.
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Si solo seleccionas uno entrada a la vez, puede usar el página dropzone para etiquetar automáticamente la trama:
[si se seleccionan varias entradas, los datos respectivos se dividen en varias páginas]

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Variables( X( :height ), Y( :weight ), Page( :age ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Add Filter(
columns( :sex, :age, :weight ),
Where( :age == 14 )
)
)
);Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Mi secuencia de comandos a continuación (para el caso real) parece activarse solo después de la segunda selección de casilla de verificación. Cualquier pista de por qué sería útil.
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[4] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Oh, lo siento, siempre comencé seleccionando la edad, y luego me perdí que el título no se actualizaba para el caso de una selección de edad + algo más.
Si solo hay una selección de edad única, no hay necesidad de corchetes adicionales.
Entonces, ¿qué tal si nos saltamos el primer paréntesis?
NB: por favor, no utilice la inversa con esta versión 

changeTitle = Function( {this},
print(this);
print(ldf << get where clause());
ldfText = Regex(ldf << get where clause(),"(:age == .*?)\)","\1");
if(ismissing(ldfText),ldfText = "any text you want");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?@hogi . No me funciona en JMP 16.2.0. He abierto un nuevo hilo sobre esto con un mejor ejemplo de lo que no funciona aquí ( enlace ).
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?En realidad, esta versión debería con Jmp 16.2.0:
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas las selecciones múltiples)?Ok, gracias, funciona correctamente, pero si alguna vez ¿cómo podemos poner solo el nombre, apellido que se encuentra en la base de datos?
En su ejemplo, esto mostraría solo el nombre "KATIE"
Re: ¿Es posible actualizar dinámicamente la selección de elementos basada en el "título del gráfico" en el filtro de datos local (incluidas selecciones múltiples)?Así funciona correctamente:
changeTitle = Function( {this},
Eval( Parse( "theRows = dt << get rows where" || Substr( ldf << get where clause(), 13 ) ) );
If( Length( theRows ) > 0,
theRow = theRows[1];
ldfText = :remarques[theRow],
ldfText = "All Names"
);
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);