¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Se adjunta una tabla de datos de ejemplo. El siguiente script intenta trazar cada parámetro seleccionado mediante el filtro de datos local en una nueva "página" en Graph Builder. Tal como está, el título del eje y se muestra como "Mediana" cada vez que se selecciona un nuevo "Parámetro" a través del Filtro de datos local.
Me gustaría que el nombre del parámetro fuera el título del eje y cuando se selecciona un nuevo parámetro y se traza en una nueva "Página".
Intenté usar el controlador de cambio de filtro para esto, pero mi script no funciona del todo. Creo que necesito que el índice i a continuación se actualice cada vez que se selecciona un nuevo parámetro o puede haber otra manera. Cualquier dirección será útil.
XPath( "//TextEditBox" ))[i]
aquí está mi guión
Names Default To Here (1);
Clear Log ();
gb = Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(changeTitle());Automatización y secuencias de comandosventanasRe: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias. Tras la verificación inicial, su primer script funciona como se esperaba (incluso con todos sin marcar). Da el título esperado del eje y en todos los casos. El segundo script no muestra el título correcto del eje y en ningún caso (siempre muestra Mediana como título del eje y).
Pasaré más tiempo con los dos guiones y volveré si tengo preguntas.
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?En mi experiencia, lo que se devuelve puede ser un poco complicado (especialmente cuando no se selecciona nada o todo). A continuación, tendría que descubrir qué hacer en esas situaciones y luego debería poder modificar mi script anterior.
A continuación se muestran algunas soluciones para todo este asunto que funcionan para mí, no estoy seguro si la "más simple" funciona en JMP16. No sugeriría investigarlos hasta que haya logrado descubrir qué podría hacer en la situación "Vacía" para comprender qué tipo de problemas podría haber.
Ver más...Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
, // else, this wasn't solved
visible_parameters = all_params;
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(visible_parameters),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, visible_parameters, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
gb << inval;
page_texts = Report(gb) << XPath("//GraphBuilderGroupBox/text()"); // Not sure if this can be used in JMP16
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
For Each({page_text, idx}, page_texts,
y_tebs[idx] << Set Text(Word(-1, page_text, "="));
);
gb << update window;
wait(0);
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias, pensé que había marcado desmarcando todo, aparentemente no. A mí me pasa lo mismo que a ti.
(Recién marcado, este problema parece estar presente también en su script anterior , es decir, desmarcar todo no produce el resultado esperado)

Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Si no hiciste ninguna modificación en mi script, todavía hay una situación que no se resuelve.

Si pasa de una única selección a ninguna/borrar selecciones. eso hay que solucionarlo primero
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Creo que me pasa lo mismo. Por favor ver más abajo.
¿La siguiente tarea es introducir la función para cambiar el título del eje y en cada página nueva?
(Parece que su forma anterior de hacer esto debería cambiar ahora)


Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Si funciona con datos de muestra de JMP, pase al ejemplo más simple posible con sus propios datos.
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_parameters = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(visible_parameters));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_parameters(1);
f = filter_ref << Make Filter Change Handler(get_selected_parameters);
Estos recuentos siempre deben coincidir

Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias. Su último script funciona cuando lo ejecuto y los resultados son los esperados con JMP Sample Data (verdadero para todos sus scripts hasta ahora). La razón por la que utilicé mi tabla de datos es porque pensé que el formulario de datos que tengo podría estar causando mi problema.
Me temo que ahora estoy un poco perdido con todos los diferentes guiones sobre la mesa.
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Continúe con los sencillos datos de muestra de JMP y resuelva sus problemas uno por uno. Primero tienes que definir tus problemas. Me salto algunos problemas que tienes que resolver (o que ya has resuelto) para que esto funcione y trato de concentrarme en el problema actual:
- En el nivel superior, desea poder descubrir cómo actualizar los títulos del eje Y según el nombre de la página.
- Tienes filtros que afectan qué páginas son visibles.
- Puede configurar el filtro en todos, uno, muchos y ninguno.
- Todos y ninguno son básicamente iguales (todas las páginas son visibles) pero deben administrarse de manera separada
- ¿Cómo puedes manejar estas diferentes situaciones? ¿Todos, Ninguno, Uno y Muchos?
- ¿Cómo se pueden manejar estas situaciones dentro de una función utilizada en el controlador de cambio de filtro?
Hasta que resuelva este problema, no tiene sentido pasar a la aplicación completa que tiene (si se queda atascado, podría resolver algún problema por separado primero si los tiene). A continuación se muestra un script de ejemplo, debería poder obtener la instrucción else para que siempre devuelva 41 (o más bien una lista completa de estados si elimina N elementos()).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
gb = dt << Graph Builder(
Size(630, 590),
Show Control Panel(0),
Include Missing Categories(1),
Variables(X(:State)),
Elements(Treemap(X, Legend(4))),
Local Data Filter(
Conditional,
Add Filter(columns(:Region, :POP), Display(:Region, N Items(6)))
)
);
Summarize(dt, all_states = By(:State));
show(N Items(all_states));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_states = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(visible_states));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_states(1);
f = filter_ref << Make Filter Change Handler(get_selected_states);Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi usando mi tabla de datos de ejemploSummaryTableNoLimsNew.jmp, lo siguiente parece funcionar como se esperaba (he verificado manualmente la tabla de datos y los resultados). ¿Cómo se pasa de esto a mi problema real donde el filtro de datos está dentro de Graph Builder? Las matrices asociativas me parecen muy confusas, por lo que solicito ayuda aquí.
Names Default To Here(1);
clear log ();
dt = Current Data Table();
obj = dt << Data Filter(Conditional,
Add Filter(columns(:TestDate, :Has Limits?, :TestStage, :Parameter) ),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_Parameters = By(:Parameter));
show(all_Parameters);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_Parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(all_Parameters), N Items(visible_Parameters));
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Usar subíndices en tablas de datos es una opción
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP)),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_states = By(:State));
show(all_states);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(all_states), N Items(visible_states));Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias, intenté ver qué filas se filtran y el script funciona parcialmente con la tabla de datos exampleSummaryTableNoLimsNew.jmp, pero no en todos los casos de filtrado.
Estoy intentando seleccionar las filas filtradas en la tabla de datos y verificar manualmente si son correctas. Actualmente estoy estancado.
Claramente es mi falta de comprensión del flujo de código lo que me impide seguir depurando, por lo que solicitaría más ayuda.
Script modificado a continuación (la línea 28 es donde verifico obtener filas filtradas ).
Names Default To Here(1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
ldf = gb<<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Podrías probar lo que hace cuando lo envías a un filtro de datos.
Aquí hay un ejemplo del índice de secuencias de comandos JMP17.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP), where(:Region == {"C", "N"})),
Mode(Select(0), Show(0), Include(1))
);
obj << Get Filtered Rows; // [1, 4, 5, 6, 7, 19, 20, 26, 36, 40, 42, 46]Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias, pero mi índice de secuencias de comandos (JMP 16.2) proporciona algún ejemplo sobre cómo usar << Obtener filas filtradas.
¿Podría recibir ayuda sobre cómo usarlo en mi caso?

Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Esta verificación está causando los problemas.

Hay más filtros que pueden provocar una situación en la que no todos los parámetros sean visibles. Una opción sería utilizar << Obtener filas filtradas y calcular qué parámetros son visibles en lugar de simplemente asumir que todos lo son.
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi En los casos de ejemplo hasta ahora, todo funciona como se esperaba y coincide con lo que ves.
Sin embargo, pude reproducir parte del problema que enfrento con mis datos reales creando otra tabla de datos que coincide más con mis datos reales. Se adjunta la tabla de datos y se utiliza el siguiente script
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter ),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Obtengo lo siguiente cuando no se seleccionan parámetros,

y este después de seleccionar todos los Parámetros y deseleccionarlos nuevamente. Aquí el gráfico superior solo obtiene la etiqueta correcta del eje y.

Con suerte, si se resuelven, mi caso de datos real también comenzará a funcionar como se esperaba. Cualquier dirección sería muy útil.
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Usando exampleSummarTable.jmp y el último script que proporcioné.
Después de que se haya filtrado un valor

Deseleccione ese valor único (para que no se filtre nada)

Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi No entiendo lo que quieres decir con "¿Funciona si seleccionas un valor y luego eliminas todas las selecciones de tu filtro?". ¿Podrías reformularlo? Además, estoy en JMP 16.2.
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?No estoy seguro de qué podría estar mal, ya que parece funcionar bien con los datos originales y con los datos2 después de eliminar la respuesta múltiple (usando JMP17.2). ¿Funciona si selecciona un valor y luego elimina todas las selecciones de su filtro?
Ver más...
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestStage, :Parameter),
Where(:TestStage == {"A", "B"})
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias. Esto se ejecuta sin errores en el caso de mi conjunto de datos real, pero los gráficos iniciales aún no tienen los nombres de parámetros correctos en el eje y. Los títulos correctos del eje y se activan solo cuando selecciono un segundo TestStage (inicialmente solo se selecciona uno a través del script).
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Como dije, lo más probable es que se deba a que se están filtrando parámetros.
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
If(Is Missing(param_where),
param_list = uniq_params;
,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list,
y_tebs[idx] << Set Text(param_val);
);
gb << update window;
return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi En el caso de datos reales, si comento
update_title(local_filter);
como en
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
//update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Todo funciona como se esperaba, excepto que los gráficos iniciales no tienen el título correcto del Eje Y. El título del eje Y se vuelve correcto solo después de seleccionar otro TestStage. ¿Es mi ubicación de
update_title(local_filter);
¿Correcto o debería colocarse en otro lugar?
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Esto no está devolviendo lo que se supone que debe
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
Una razón podría ser que no tiene valores seleccionados en el filtro de datos local. Puede agregar una verificación adicional de los valores faltantes y, si falta param_where, regresar temprano de la función sin hacer nada (o más bien, entonces tiene todos los valores como parámetros y debe obtener los valores de los parámetros de otra manera)
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Gracias, eliminar la respuesta múltiple de las propiedades de los parámetros hace que el script funcione para los datos de ejemplo (exampleSummaryTable2). Pero todavía tengo problemas con mi conjunto de datos real donde no hay columnas con el conjunto de Respuestas múltiples (desafortunadamente no puedo compartir datos reales). ¿Qué más podría ser?

También puedo reproducir este mismo error si uso un comentario en el script.
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"}como en
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; //show (y_tebs);
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());En mi caso de datos real, no tengo el lujo de preseleccionar uno o más parámetros a través del filtro de datos local. Quizás esto sea lo que está causando el problema en el caso de datos real. ¿Alguna forma de solucionar esto?
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Lo más probable es que el problema sea que tenga la columna Respuesta múltiple como parámetro


Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Está bien. Observó el desencadenante. El script no funciona si tengo un guión bajo en el nombre de mi parámetro (tengo algunos guiones bajos en los nombres de los parámetros en mis datos reales). Tabla de datos de ejemplo adjunta con guión bajo en el nombre del parámetro. El siguiente script genera un error en la función Words con la tabla de datos adjunta.
También tuve que comentar el Tamaño() sin el cual los gráficos iniciales parecían extraños.
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
//Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Active la función una vez antes de crear el controlador de cambio de filtro
update_title(local_filter);

Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Esto funciona excepto que el gráfico inicial (antes de que entre el controlador de cambio de filtro) todavía tiene la Mediana como título del eje y. Cualquier forma de arreglar esto?

Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Una opción sería analizar la cláusula getwhere.
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
en elementos separados y recorralos y establezca los títulos en el bucle.
Editar:
Esto requerirá una pequeña modificación también en la parte donde se obtienen referencias a los cuadros de edición de texto para el eje y. A continuación se muestra una opción que podría funcionar.
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return(); // some problem
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?@jthi Esto funciona en parte, pero todos los parámetros seleccionados aparecen como título del eje Y en todos los gráficos trazados uno debajo del otro.
Cambié
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
a
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);y obten

Sólo necesita el nombre del parámetro trazado como título del eje Y en cada gráfico.
Re: ¿Cómo utilizar el controlador de cambio de filtro para trabajar con la opción Página en Graph Builder?Podría intentar hacer que su consulta XPath sea más precisa (explore el XML y el árbol de propiedades). Algo como esto podría funcionar
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")