Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?Im Anhang finden Sie eine Beispieldatentabelle. Das folgende Skript versucht, jeden über den lokalen Datenfilter ausgewählten Parameter auf einer neuen „Seite“ im Graph Builder darzustellen. Derzeit wird der Titel der Y-Achse jedes Mal als „Median“ angezeigt, wenn ein neuer „Parameter“ über den lokalen Datenfilter ausgewählt wird.
Ich möchte, dass der Parametername der Titel der Y-Achse ist, wenn ein neuer Parameter ausgewählt und auf einer neuen „Seite“ dargestellt wird.
Ich habe versucht, dafür den Filterwechsel-Handler zu verwenden, aber mein Skript funktioniert nicht ganz. Ich denke, ich muss den Index i unten jedes Mal aktualisieren, wenn ein neuer Parameter ausgewählt wird, oder vielleicht gibt es eine andere Möglichkeit. Jede Richtung wird nützlich sein.
XPath( "//TextEditBox" ))[i]
Hier ist mein Skript
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());Automatisierung und SkripterstellungWindowsBetreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?Sie könnten versuchen, Ihre XPath-Abfrage genauer zu machen (erkunden Sie XML und den Eigenschaftenbaum). So etwas könnte funktionieren
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?@jthi Dies funktioniert teilweise, aber alle ausgewählten Parameter werden in allen gezeichneten Diagrammen untereinander als Y-Achsentitel angezeigt.
ich habe mich verändert
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
Zu
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);und bekomme

Es wird nur der Name des dargestellten Parameters als Y-Achsentitel in jedem Diagramm benötigt.
Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?Eine Möglichkeit wäre, die get where-Klausel zu analysieren
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
in separate Elemente aufteilen und diese durchlaufen und die Titel in der Schleife festlegen.
Bearbeiten:
Dies erfordert auch eine kleine Änderung an dem Teil, in dem Sie Verweise auf Textbearbeitungsfelder für die Y-Achse erhalten. Nachfolgend finden Sie eine Option, die funktionieren könnte
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());
Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?@jthi Dies funktioniert, außer dass das ursprüngliche Diagramm (vor den Filterwechsel-Handler-Kindern) immer noch den Median als Y-Achsentitel hat. Gibt es eine Möglichkeit, das zu beheben?

Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?Lösen Sie die Funktion einmal aus, bevor Sie den Filteränderungshandler erstellen
update_title(local_filter);

Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?@jthi Ok. Habe den Auslöser bemerkt. Das Skript funktioniert nicht, wenn mein Parametername einen Unterstrich enthält (ich habe in den Parameternamen meiner tatsächlichen Daten nur wenige Unterstriche). Beispieldatentabelle mit Unterstrich im Parameternamen angehängt. Das folgende Skript löst einen Fehler in der Words- Funktion mit der angehängten Datentabelle aus.
Musste auch die Size() kommentieren, ohne die die ursprünglichen Diagramme seltsam aussahen.
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());Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?Das Problem liegt höchstwahrscheinlich daran, dass Sie als Parameter die Spalte „Mehrfachantwort“ haben


Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?@jthi Danke, durch das Entfernen von Mehrfachantworten aus Parametereigenschaften funktioniert das Skript für die Beispieldaten (exampleSummaryTable2). Aber ich habe immer noch Probleme mit meinem tatsächlichen Datensatz, da es keine Spalten mit dem Satz „Mehrfachantworten“ gibt (tatsächliche Daten können leider nicht geteilt werden). Was könnte es sonst sein?

Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?Dies gibt nicht das zurück, was es soll
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
Ein Grund könnte sein, dass Sie im lokalen Datenfilter keine Werte ausgewählt haben. Sie könnten eine zusätzliche Prüfung auf fehlende Werte hinzufügen und, wenn param_where fehlt, vorzeitig von der Funktion zurückkehren, ohne etwas zu tun (oder besser gesagt, Sie haben alle Werte als Parameter und müssen die Parameterwerte auf andere Weise abrufen).
Betreff: Wie verwende ich den Filter Change Handler, um mit der Seitenoption im Graph Builder zu arbeiten?@jthi Im tatsächlichen Datenfall, wenn ich auskommentiere
update_title(local_filter);
wie in
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
//update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Alles funktioniert wie erwartet, außer dass die ursprünglichen Diagramme nicht den richtigen Y-Achsentitel haben. Der Titel der Y-Achse wird erst korrekt, nachdem eine andere Testphase ausgewählt wurde. Ist meine Platzierung von
update_title(local_filter);
richtig oder sollte es woanders platziert werden?