¿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?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']")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?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 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?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 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 arroja 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?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 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?

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 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?