Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Der Ansatz, den Sie wählen können, besteht darin, dem lokalen Datenfilter einen Änderungshandler (Make Filter Change Handler) hinzuzufügen, der bei Änderungen des Filters die Where-Klausel (Get where-Klausel) erfasst und dann dieses Ergebnis auf den anwendet Titel im Titel des Diagramms (festgelegter Text).
Die Dokumentation zum Bearbeiten der Ausgabe finden Sie im Abschnitt „Skripting-Handbuch“ zum Thema „Anzeigebäume“.Diese Dokumentation ist in der JMP-Dokumentationsbibliothek im Pulldown-Menü „Hilfe“ verfügbar.
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?@hogi Danke. Dies wird funktionieren, aber ich habe mehr als ein Datenfilterfeld und möchte, dass der Titel nur basierend auf einem davon geändert wird (Ihr Skript scheint alle Änderungen in jedem der lokalen Datenfilterfelder zu erfassen).
Wie erfasst man Änderungen in einem bestimmten lokalen Datenfilterbereich?
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Wenn im selben Bericht mehrere Datenfilter vorhanden sind, können Sie, um den richtigen zu erhalten, beim entsprechenden GaphBuilder-Objekt beginnen, einen Schritt nach oben gehen und nach dem Datenfilter suchen:
ldf = (gb << parent)["Local Data Filter"] << get scriptable object;
Vollständiger Code:
Mehr sehen...
Weniger robuste Alternativen:
ldf = (current report() << XPath("(//OutlineBox[text()='Local Data Filter'])"))[2] << get scriptable object;
ldf = current report()[OutlineBox(3)]<< get scriptable object;
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?@hogi Vielen Dank für Ihre Vorschläge. Ich habe Ihre zweite, weniger robuste Option ausprobiert, aber ich sehe, dass sie nicht sehr robust ist, wie Sie sagen, und ich konnte sie nicht richtig zum Laufen bringen.
Wenn ich im folgenden Skript nur die Auswahl „Alter“ auf der Diagrammkachel anzeigen möchte, wie mache ich das per Skript?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Entschuldigen Sie das Missverständnis.
Wenn im Bericht nur ein einziger Datenfilter vorhanden ist, ist eine genauere Angabe der Referenz nicht erforderlich.
Andererseits:
Wenn Sie den Titel auf einen Teil des beschränken möchten Wo-Klausel benötigen Sie einen weiteren Regex-Ausdruck wie den folgenden.
Es sucht nach irgendwelchen :Alter == in runden Klammern und gibt die gesamte Zeichenfolge innerhalb der Klammern zurück.
Also, für Fälle wie
"Select Where( (:age == 14 | :age == 15) & :weight >= 113.5 )";
"Select Where( :age == 14 | :age == 16 | :age == 17 )"
es wird nur der Teil :age ... zurückgegeben.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?@hogi . Ihr Skript unten zeigt oder ändert den Diagrammtitel für mich in JMP 16.2.0 nicht.
ames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);
Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Ich verwende Folgendes, um „meinen Text“ oben in meinen Diagrammen anzuzeigen.
Dispatch( {}, "graph title", TextEditBox, {Set Text( "my text" )} )Ich möchte jedoch, dass die im lokalen Datenfilter ausgewählten Elemente im Diagrammtitel angezeigt werden, wenn ich sie auswähle (vielleicht mehrere Abschnitte durch Kommas getrennt?).
Wie erreicht man dies in JSL?
MassenanpassungBetreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Schöne Regex!
Die Klammern werden auf zwei clevere Arten verwendet:
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
Am Anfang und am Ende des Musters entgeht das Backslash-Zeichen einer Klammer \(...\), sodass es mit einer literalen Klammer in der where-Klausel übereinstimmt. Das Leerzeichen gefolgt von einem Sternchen entspricht null oder mehr Leerzeichen.
Das innere Klammerpaar sehen als würden sie mit den tatsächlichen Klammern in der where-Klausel übereinstimmen, aber nein! Die tatsächlichen Klammern wurden bereits abgeglichen. Diese inneren Klammern sind Gruppierungsklammern und bilden die erste Gruppe im Match.
Innerhalb der Gruppierungsklammern die Literalzeichen :Alter == sind dann übereinstimmend .*? Gleicht die Zeichen nacheinander ab, bis die letzte, mit Escapezeichen versehene Literalklammer gefunden werden kann. Der . passt zu irgendetwas, das * bedeutet 0 oder mehr und das ? ändert die 0 oder mehr von gierig (Rennen bis zum Ende) in widerstrebend (einzeln). Das widerstrebende Verhalten sorgt dafür, dass die erste Klammer verwendet wird.
Schließlich wird „\1“ verwendet, um ein Ergebnis zu formatieren: alles, was mit dem ersten Satz von Gruppierungsklammern übereinstimmt.
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?@hogi Ihr Skript unten funktioniert jetzt in JMP 16.2, allerdings mit den folgenden Problemen.
- Das Diagramm beginnt ohne ausgewähltes Alter und zeigt keinen Titel an. Der letzte wird jedoch weiterhin im Diagrammtitel angezeigt, wenn alle Kontrollkästchen für das Alter deaktiviert sind.
- Im eigentlichen Problem wird der Titel erst angezeigt, wenn mehr als ein Kontrollkästchen aktiviert ist.
Wie können diese beiden Probleme gelöst werden (es sei denn, dies ist spezifisch für meine JMP-Version)?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Du hast Recht.
Wenn Regex die Altersinformationen nicht findet, wird „fehlend“ zurückgegeben.
So danach
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
bitte hinzufügen
if(ismissing(ldfText),ldfText = "all ages");
um das Problem zu beheben.
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Wenn Sie nur auswählen eins Eintrag nach dem anderen können Sie den verwenden Buchseite Dropzone, um den Plot automatisch zu beschriften:
[bei Auswahl mehrerer Einträge werden die jeweiligen Daten auf mehrere Seiten aufgeteilt]

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Variables( X( :height ), Y( :weight ), Page( :age ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Add Filter(
columns( :sex, :age, :weight ),
Where( :age == 14 )
)
)
);Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Mein Skript unten (für den tatsächlichen Fall) scheint erst nach der zweiten Auswahl des Kontrollkästchens ausgelöst zu werden. Alle Hinweise darauf, warum, wären nützlich.
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[4] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Oh, tut mir leid, ich habe immer mit der Auswahl des Alters begonnen – und dann habe ich übersehen, dass der Titel nicht aktualisiert wird, wenn man nur ein Alter und etwas anderes ausgewählt hat.
Bei nur einer Altersauswahl sind keine zusätzlichen Klammern erforderlich.
Wie wäre es also, die erste Klammer zu überspringen?
NB: Bitte verwenden Sie bei dieser Version nicht die Umkehrung 

changeTitle = Function( {this},
print(this);
print(ldf << get where clause());
ldfText = Regex(ldf << get where clause(),"(:age == .*?)\)","\1");
if(ismissing(ldfText),ldfText = "any text you want");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?@hogi . Funktioniert bei mir in JMP 16.2.0 nicht. Ich habe dazu einen neuen Thread mit einem besseren Beispiel dafür eröffnet, was hier nicht funktioniert ( Verknüpfung ).
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Eigentlich sollte diese Version mit Jmp 16.2.0:
Betreff: Ist es möglich, die auf dem „Grafiktitel“ basierende Elementauswahl im lokalen Datenfilter (einschließlich Mehrfachauswahl) dynamisch zu aktualisieren?Ok, danke, es funktioniert korrekt, aber wenn überhaupt, wie können wir nur den gefundenen Vornamen und Nachnamen in die Datenbank aufnehmen?
In Ihrem Beispiel würde nur der Vorname „KATIE“ angezeigt.
Betreff: Ist es möglich, die auf dem „Diagrammtitel“ basierende Elementauswahl im lokalen Datenfilter dynamisch zu aktualisieren (einschließlich Mehrfachauswahl)?so funktioniert es einwandfrei:
changeTitle = Function( {this},
Eval( Parse( "theRows = dt << get rows where" || Substr( ldf << get where clause(), 13 ) ) );
If( Length( theRows ) > 0,
theRow = theRows[1];
ldfText = :remarques[theRow],
ldfText = "All Names"
);
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);