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 ?@jthi Merci. Lors de la vérification initiale, votre premier script fonctionne comme prévu (même si tous ne sont pas cochés). Il donne le titre attendu sur l'axe y dans tous les cas. Le deuxième script n'affiche en aucun cas le titre correct de l'axe y (affiche toujours la médiane comme titre de l'axe y).
Je vais passer encore un peu de temps avec les deux scripts et je reviendrai si j'ai des questions.
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Ce qui est renvoyé peut être un peu capricieux d'après mon expérience (surtout lorsque rien/tout n'est sélectionné). Ensuite, vous devrez déterminer quoi faire dans ces situations et vous devriez alors pouvoir modifier mon script précédent.
Vous trouverez ci-dessous quelques solutions à tout cela qui fonctionnent pour moi, je ne sais pas si la solution "plus simple" fonctionne dans JMP16. Je ne suggérerais pas de les examiner jusqu'à ce que vous ayez réussi à comprendre ce que vous pourriez faire dans la situation "Vide" afin de comprendre quel type de problèmes il pourrait y avoir.
Voir plus...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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Merci, je pensais avoir coché en décochant tout, apparemment non. J'ai la même chose que toi.
(Je viens de vérifier, ce problème semble également être présent dans votre script précédent , c'est-à-dire que tout décocher n'entraîne pas le résultat attendu)

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Si vous n'avez apporté aucune modification à mon script, il reste encore une situation qui n'est pas résolue

Si vous passez d’une seule sélection à aucune/effacez les sélections. Cela devrait être résolu en premier
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi je pense, j'obtiens la même chose. Veuillez voir ci-dessous.
La prochaine tâche consiste-t-elle à introduire la fonction permettant de modifier le titre de l'axe Y sur chaque nouvelle page ?
(Il semble que votre façon précédente de procéder devrait changer maintenant)


Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Si cela fonctionne avec JMP Sample Data, vous passez à l'exemple le plus simple possible avec vos propres données.
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);
Ces chiffres doivent toujours correspondre

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Merci. Votre dernier script fonctionne lorsque je l'exécute et les résultats sont comme prévu avec les exemples de données JMP (vrai pour tous vos scripts jusqu'à présent). La raison pour laquelle j'ai utilisé ma table de données est parce que je pensais que le formulaire de données dont je dispose pourrait être à l'origine de mon problème.
J'ai peur, je suis un peu perdu maintenant avec tous les différents scénarios sur la table.
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Conservez les exemples simples de données JMP et résolvez vos problèmes un par un. Vous devez d’abord définir vos problèmes. Je saute un certain nombre de problèmes que vous devez résoudre (ou avez déjà résolus) pour que cela fonctionne et j'essaie de me concentrer sur le problème actuel :
- Au niveau supérieur, vous voulez être capable de comprendre comment mettre à jour les titres de l'axe Y en fonction du nom de la page.
- Vous disposez de filtres qui affectent les pages visibles
- Vous pouvez définir le filtre sur tous, un, plusieurs et aucun.
- Tous et aucun sont fondamentalement identiques (toutes les pages sont visibles) mais elles doivent être gérées de manière séparée
- Comment gérer ces différentes situations ? Tous, aucun, un et plusieurs ?
- Comment pouvez-vous gérer ces situations dans une fonction utilisée dans le gestionnaire de changement de filtre ?
Jusqu'à ce que ce problème soit résolu, il ne sert à rien de passer à l'application complète dont vous disposez (si vous êtes bloqué, vous pouvez d'abord résoudre un problème distinct si vous en avez). Vous trouverez ci-dessous un exemple de script, vous devriez pouvoir obtenir que l'instruction else renvoie toujours 41 (ou plutôt une liste complète des états si vous supprimez N Items()).
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi en utilisant mon exemple de table de donnéesSummaryTableNoLimsNew.jmp, ce qui suit semble fonctionner comme prévu (j'ai vérifié manuellement la table de données et les sorties). Comment passer de cela à mon problème actuel où le filtre de données se trouve dans Graph Builder. Je trouve les tableaux associatifs très déroutants, je demande donc de l'aide ici.
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?L'utilisation de l'abonnement aux tables de données est une option
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Merci, j'ai essayé de voir quelles lignes sont filtrées et le script fonctionne partiellement avec l'exemple de table de donnéesSummaryTableNoLimsNew.jmp, mais pas dans tous les cas de filtrage.
J'essaie de sélectionner les lignes filtrées dans la table de données et de vérifier manuellement si elles sont correctes. Actuellement, je suis coincé.
De toute évidence, c'est mon manque de compréhension du flux de code qui m'empêche de déboguer davantage, je demanderais donc un peu plus d'aide.
Script modifié ci-dessous (la ligne 28 est l'endroit où je vérifie avec get filtered rows ).
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Vous pouvez simplement essayer ce qu'il fait lorsque vous l'envoyez à un filtre de données.
Voici un exemple de l'index de script 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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Merci, mais mon index de script (JMP 16.2) donne un exemple sur la façon d'utiliser << Obtenir les lignes filtrées.
Puis-je obtenir de l'aide sur la façon de l'utiliser dans mon cas ?

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Cette vérification est à l'origine des problèmes.

Il existe davantage de filtres qui peuvent provoquer une situation dans laquelle tous les paramètres ne sont pas visibles. Une option serait d'utiliser << Obtenir les lignes filtrées et de calculer quels paramètres sont visibles au lieu de simplement supposer qu'ils le sont tous.
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Dans les exemples de cas jusqu'à présent, tout fonctionne comme prévu et correspond à ce que vous voyez.
Cependant, j'ai pu reproduire une partie du problème auquel je suis confronté avec mes données réelles en créant un autre tableau de données qui correspond plus étroitement à mes données réelles. Le tableau de données est joint et utilise le script ci-dessous
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());J'obtiens ce qui suit lorsqu'aucun paramètre n'est sélectionné,

et celui-ci après avoir sélectionné tous les paramètres et les avoir à nouveau désélectionnés. Ici, le graphique du haut n'obtient que l'étiquette correcte de l'axe Y.

J'espère que si ces problèmes sont résolus, mon cas de données actuel commencera également à fonctionner comme prévu. N’importe quelle direction serait très utile.
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?En utilisant exampleSummarTable.jmp et le dernier script que j'ai fourni.
Après qu'une valeur ait été filtrée

Désélectionnez cette valeur unique (donc rien n'est filtré)

Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Je ne comprends pas ce que vous entendez par "Est-ce que ça marche si vous sélectionnez une valeur puis supprimez toutes les sélections de votre filtre ?". Pourriez-vous s'il vous plaît reformuler ? De plus, je suis sur JMP 16.2.
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Je ne sais pas ce qui pourrait ne pas fonctionner car cela semble fonctionner très bien avec les données d'origine et avec les données2 après avoir supprimé les réponses multiples (en utilisant JMP17.2). Cela fonctionne-t-il si vous sélectionnez une valeur, puis supprimez toutes les sélections de votre filtre ?
Voir plus...
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 : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?@jthi Merci. Cela fonctionne sans erreur dans le cas de mon ensemble de données réel, mais les tracés initiaux ne contiennent toujours pas les noms de paramètres corrects sur l'axe des y. Les titres corrects de l'axe Y ne sont déclenchés que lorsque je sélectionne un deuxième TestStage (au départ, un seul est sélectionné via le script).
Re : Comment utiliser le gestionnaire de changement de filtre pour travailler avec l'option Page dans Graph Builder ?Comme je l'ai dit, cela est probablement dû au filtrage des paramètres.
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 : 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 ?
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, revenir 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 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?

Je peux également reproduire cette même erreur si j'utilise un commentaire dans le script
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"}un péché
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());Dans mon cas actuel de données, je n'ai pas le luxe de présélectionner un ou plusieurs paramètres via le filtre de données local. C'est peut-être ce qui cause le problème dans le cas réel des données. Un moyen de contourner ce problème ?
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 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 ?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 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 ?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 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 ?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']")