Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Vous trouverez ci-joint un exemple de tableau de données. Le script ci-dessous tente de tracer chaque paramètre sélectionné via le filtre de données local dans une nouvelle « page » dans Graph Builder. Dans l'état actuel des choses, le titre de l'axe Y est affiché comme « Médiane » chaque fois qu'un nouveau « Paramètre » est sélectionné via le filtre de données local.
Je voudrais que le nom du paramètre soit le titre de l'axe Y lorsqu'un nouveau paramètre est sélectionné et tracé sur une nouvelle "Page".
J'ai essayé d'utiliser le gestionnaire de changement de filtre pour cela, mais mon script ne fonctionne pas vraiment. Je pense que j'ai besoin que l'index i ci-dessous soit mis à jour chaque fois qu'un nouveau paramètre est sélectionné ou il existe peut-être un autre moyen. Toute direction sera utile.
XPath( "//TextEditBox" ))[i]
voici mon script
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());Automatisation et scriptsles fenêtresRe : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Vous pouvez essayer de rendre votre requête XPath plus précise (explorer le XML et l'arborescence des propriétés). Quelque chose comme ça pourrait fonctionner
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Cela fonctionne en partie, mais tous les paramètres sélectionnés apparaissent sous forme de titre de l'axe Y dans tous les graphiques tracés les uns sous les autres.
j'ai changé
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
à
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);et obtenir

Vous n'avez besoin que du nom du paramètre tracé comme titre de l'axe Y sur chaque graphique.
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Une option serait d'analyser la clause getwhere
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
en éléments séparés, faites une boucle sur ceux-ci et définissez les titres dans la boucle.
Modifier:
Cela nécessitera également une légère modification de la partie où vous obtenez des références aux zones d'édition de texte pour l'axe y. Vous trouverez ci-dessous une option qui pourrait fonctionner
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Cela fonctionne sauf que le graphique initial (avant que les enfants du gestionnaire de changement de filtre n'entrent) a toujours la médiane comme titre de l'axe y. Aucun moyen de réparer cela?

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Déclenchez la fonction une fois avant de créer le gestionnaire de changement de filtre
update_title(local_filter);

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Ok. J'ai noté le déclencheur. Le script ne fonctionne pas si j'ai un trait de soulignement dans le nom de mon paramètre (j'ai quelques traits de soulignement dans les noms de paramètres dans mes données réelles). Exemple de tableau de données joint avec un trait de soulignement dans le nom du paramètre. Le script ci-dessous génère une erreur sur la fonction Words avec la table de données ci-jointe.
J'ai également dû commenter le Size() sans lequel les graphiques initiaux semblaient étranges.
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Le problème est très probablement dû au fait que vous avez une colonne de réponses multiples comme paramètre


Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Merci, la suppression des réponses multiples des propriétés du paramètre fait fonctionner le script pour les exemples de données (exampleSummaryTable2). Mais j'ai toujours des problèmes avec mon ensemble de données réel où il n'y a pas de colonnes avec un ensemble de réponses multiples (malheureusement, je ne peux pas partager les données réelles). Quoi d'autre cela pourrait-il être?

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Cela ne renvoie pas ce qu'il est censé faire
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
Une des raisons pourrait être qu'aucune valeur n'est sélectionnée dans le filtre de données local. Vous pouvez ajouter une vérification supplémentaire des valeurs manquantes et si param_where est manquant, revenez plus tôt de la fonction sans rien faire (ou plutôt, vous avez toutes les valeurs comme paramètres et vous devez obtenir les valeurs des paramètres d'une autre manière)
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Dans le cas réel des données, si je commente
update_title(local_filter);
un péché
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
//update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Tout fonctionne comme prévu, sauf que les graphiques initiaux n'ont pas le titre correct de l'axe Y. Le titre de l’axe Y ne devient correct qu’après la sélection d’un autre TestStage. Mon placement est-il de
update_title(local_filter);
est-ce correct ou faut-il le placer ailleurs ?