Verbinden Sie lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen DatentabellenAngenommen, ich habe zwei Graph Builder-Fenster aus unterschiedlichen Datentabellen, jedes mit einem lokalen Datenfilter, der nach „Laufnummer“ und „Zeit“ filtert.
Ist es möglich, die beiden lokalen Datenfilter zu verbinden, damit sie synchron bleiben?
Oder vielleicht mit JSL, um die aktuellen Einstellungen aus dem lokalen Datenfilter Nr. 1 abzurufen und sie auf den lokalen Datenfilter Nr. 2 anzuwenden?
(Ich schätze, Schritt 1 besteht darin, einen Verweis auf die lokalen Datenfilter zu erhalten. Ich habe noch nicht einmal herausgefunden, wie das geht – hier ist, was ich bisher habe:
// get the last Graph Builder
win = Get Window List();
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
localDataFilter = last_gb << XPath("//OutlineBox[text()='Local Data Filter']");)
Automatisierung und SkripterstellungBetreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenKönnten Sie die Tabellen miteinander verketten und sie dann mithilfe einer Gruppierungsspalte in verschiedene Diagramme unterteilen? Es könnte einfacher sein, als sich mit Filterwechsel-Handlern herumzuschlagen.
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenNicht wirklich – eine Tabelle ist eine allgemeine Zusammenfassung der Laufergebnisse, und wir identifizieren Probleme anhand dieser Zusammenfassung, wechseln dann zum detaillierten Laufdiagramm und wählen den spezifischen Lauf im Datenfilter aus.Mir ist nicht klar, wie die Zusammenführung dieser beiden Tabellen dieses Verhalten ermöglichen würde.
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenWie wäre es mit virtuellen Beitritten?
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenähnlicher Beitrag:
https://community.jmp.com/t5/Discussions/Virtual-linking-two-tables-via-JSL-scripting/mp/657682/highlight/true#M84705
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenIch denke, man braucht nicht-lokale Datenfilter, damit die Versand-/Empfangsfunktionalität virtueller Links die Filtereinstellungen überträgt.
Für meinen Fall war das zu langsam.
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenUnd wenn Sie den gesamten Filter kopieren möchten, können Sie Kopieren/Einfügen verwenden:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :sex ), X( :age, Position( 1 ) ), Y( :weight ), Overlay( :sex ) ),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 3 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :age ),
Where( :age == 15 ),
Display( :age, N Items( 6 ) )
)
);
df1 << copy local data filter();
gb2 << paste local data filter();
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenDie Idee gefällt mir, aber offensichtlich verstehe ich etwas an Ihrer Lösung nicht, da sie abstürzt, wenn ich versuche, sie auszuführen.
Folgendes habe ich bisher:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
gb2 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "M" ),
Display( :sex, N Items( 2 ) )
)
);
df2 = gb2 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "F" ),
Display( :sex, N Items( 2 ) )
)
);
broadcastFilter = Function( {},
//get the script
filterScript = df1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval(
Substitute(
Expr(
df2 << Start Over << _filter_
),
Expr( _filter_ ), Name Expr( filterExpression )
)
);
);
// activate the Filter Change Handler
rs = df1 << Make Filter Change Handler( broadcastFilter );Hier ist der Fehler: „broadcastFilter hat 0 Parameter (), aber 1 Argumente (18) wurden bereitgestellt“.Irgendeine Idee, wovon die Rede ist?Ich glaube nicht, dass ich in dieser letzten Zeile irgendwelche Argumente liefere ...
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenOh. Verzeihung.
broadcastFilter = Function( {x}, Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenAm Ende wechselte ich zurück zu lokalen Datenfiltern und fügte dem ersten Datenfilter einen Filter Change Handler hinzu.
Es funktioniert ganz gut – wenn man das nicht vergisst
rs=
Filteränderungshandler
broadcastFilter=Function({x}, // Make Filter Change Handler need a function with 1 Argument
//get the script
filterScript = DataFilter1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval( Substitute( Expr( Datafilter2 << Start Over << _filter_ ), Expr( _filter_ ),
Name Expr( filterExpression ) ) );
// activate the Filter Change Handler
rs = DataFilter1 << Make Filter Change Handler( broadcastFilter); // will call broadcastFilter() with 1 Argument: # of selected rows
edit:argument x hinzugefügt und kommentiert. Eine Funktion
broadcastFilter=Function({},-ohne Argumente - funktioniert nicht.
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenWow, es funktioniert!Ich wünschte, ich hätte verstanden, was dieser Code bewirkt ...
Letzte Frage: Vorausgesetzt, ich habe bereits ein Graph Builder-Fenster mit einem lokalen Datenfilter geöffnet, weiß ich, wie ich die Objektvariable gb .jsl erhalten kann:
win = Get Window List();
graphs = Filter Each({w}, win, If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0) );
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;... aber wie kann ich die Objektvariable df1 aus der Objektvariablen gb erhalten?(Es fühlt sich an, als hätte ich 100 verschiedene Dinge ausprobiert ...)
Betreff: Lokale Datenfilter zwischen Graph Builder-Fenstern aus verschiedenen Datentabellen verbindenEine Möglichkeit besteht darin, eine ähnliche Idee wie beim Diagrammersteller zu verwenden
df = (gb << top parent)[Outline Box("Local Data Filter")] << Get Scriptable Object;
Der lokale Datenfilter befindet sich nicht im Graph Builder, daher müssen Sie zuerst zur höheren Ebene wechseln (in diesem Fall verwende ich << oberstes übergeordnetes Element). Die Verwendung von XPath mit dem Attribut „helpKey“ und dem Wert „Datenfilter“ könnte eine etwas robustere Lösung sein und etwa so aussehen
(gb << top parent) << XPath("//OutlineBox[@helpKey='Data Filter']")
Bearbeiten: Wenn Sie die Möglichkeit haben, mehrere Datenfilter im selben Fenster zu verwenden, müssen Sie die Definition des Startpunkts möglicherweise etwas spezifischer gestalten, als nur <