<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How do I make one Data Filter mirror another? in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809610#M99050</link>
    <description>&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Eval(): &lt;/FONT&gt;run the code&amp;nbsp; *)&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Eval Expr: &lt;/FONT&gt;pre-evaluate everything wrapped with&amp;nbsp;&lt;FONT face="courier new,courier"&gt;Expr() *)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Expr():&lt;/FONT&gt; marker for code which has to get pre-evaluated&amp;nbsp; *)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*) my brain : "the E word"&amp;nbsp;&lt;SPAN&gt;- 3 times.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;and the 4th one is &lt;FONT face="courier new,courier"&gt;Expr Name()&amp;nbsp; &amp;nbsp; ; -)&lt;/FONT&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 04 Nov 2024 20:11:47 GMT</pubDate>
    <dc:creator>hogi</dc:creator>
    <dc:date>2024-11-04T20:11:47Z</dc:date>
    <item>
      <title>How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809376#M98941</link>
      <description>&lt;P&gt;I have a window containing two graph builders, pulling from two different datasets, and I want to filter both graphs with a single Data Filter. I don't think this is possible. I've thought about instead using two "synced" data filters, but couldn't figure it out. Last week at JMP Discovery,&amp;nbsp;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/4587"&gt;@danschikore&lt;/a&gt;&amp;nbsp;pointed me toward event handlers as a possible solution for using two synced filters. I think I'm close to getting it to work, but I'm stuck.&lt;/P&gt;&lt;P&gt;The script below creates the two filters and two graphs. I want the selections made in the top filter to be automatically reflected in the bottom filter. Once that works, I will hide the bottom filter and the user will see one filter controlling both graphs.&lt;/P&gt;&lt;P&gt;As it is now, when the user makes a selection in the top filter, the script prints that Where clause to the log using "Get Where Clause", but I need to apply this where clause to the bottom filter. I want a command like "Set Where Clause" that would let me shove that where clause text into the bottom filter, but it doesn't seem to exist.&amp;nbsp; I'm really hoping to avoid the scenario where I have to "unpack" the text string (below) and turn it into a form I can pass to the lower filter.&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;Select Where( :name == \!"ALICE\!" | :name == \!"BARBARA\!" )&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;Just to convince myself I can get the first filter to control the second one in some fashion, I have the first filter &lt;EM&gt;clearing&lt;/EM&gt; the second filter's selection. That means I can talk to both filters; I can extract the where clause from the first; I just can't apply it to the second.&lt;/P&gt;&lt;P&gt;As a bonus question: Once this syncing works. I want to hide the second filter.&amp;nbsp; The last line of the script hides the first filter. Does anyone know how I could modify this to hide the second filter instead?&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TomF_0-1730390491239.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/69719iCF52C2116B928EE4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="TomF_0-1730390491239.png" alt="TomF_0-1730390491239.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 16:06:47 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809376#M98941</guid>
      <dc:creator>TomF</dc:creator>
      <dc:date>2024-10-31T16:06:47Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809377#M98942</link>
      <description>&lt;P&gt;Nice : )&lt;BR /&gt;When I created my first State Handler, I forgot to store the filter state handler in a variable - and it got destroyed immediately.&lt;BR /&gt;And then it didn't work because I used a function with 0 arguments. -&amp;gt; well done, you escaped both trapdoors&amp;nbsp; : )&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is no &lt;FONT face="courier new,courier"&gt;Set where clause&lt;/FONT&gt; - &amp;nbsp;the &lt;FONT face="courier new,courier"&gt;Where Clause&lt;/FONT&gt; is no message which a Data Filter will understand, you can send it to the &lt;STRONG&gt;table&lt;/STRONG&gt; to select the rows. Besides that&amp;nbsp;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;lt;&amp;lt; Get Where Clause ()&amp;nbsp;&lt;/FONT&gt;returns a string. You have to use&amp;nbsp; &lt;FONT face="courier new,courier"&gt;Parse&lt;/FONT&gt; to convert it to an expression.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Unpack is less effort than you might expect - just ask&amp;nbsp;the data filter for the script, extract the &lt;FONT face="courier new,courier"&gt;Add Filter()&lt;/FONT&gt; part via &lt;FONT face="courier new,courier"&gt;Extract Expr()&lt;/FONT&gt; and apply it to the second filter&amp;nbsp; - will work for &lt;U&gt;simple&lt;/U&gt; selections *)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;eh = df1_Wt &amp;lt;&amp;lt; MakeFilterChangeHandler(
	Function( {x},
		dfscript = df1_Wt &amp;lt;&amp;lt; get script(); 	// store the code to create DF1 - with all the settings
		filter = Extract Expr(
			dfscript,    					// take the code which is stored in dfscript and ...
			Add Filter( Wild List() )		// search for the part with Add Filter(something). Wild List() - like magic :)
		);         

		Eval(                  				// run the code
			Eval Expr(             			// search for any Expr() and execute it (*)
				df2_Ht &amp;lt;&amp;lt; delete all() 		// remove all previous settings
				&amp;lt;&amp;lt; Expr(             		// (*) find this Expr() and execute it
					Name Expr( filter )     // take the code which is stored in "filter" and replace filter with the actual code
				)
			)
		);
	)

);&lt;/CODE&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;BR /&gt;*) When you combine several filters via OR(), the script will contain multiple&lt;FONT face="comic sans ms,sans-serif"&gt; add Filter()&lt;/FONT&gt;&amp;nbsp;- and&amp;nbsp;&lt;FONT face="courier new,courier"&gt;Extract Expr()&lt;/FONT&gt; will just return the first one.&lt;BR /&gt;To get an ultimate &lt;EM&gt;clone&lt;/EM&gt; function, you can parse the DF script, collect all &lt;FONT face="courier new,courier"&gt;AddFilter()&lt;/FONT&gt; and apply them one after the other to the second Data Filter.&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 20:30:04 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809377#M98942</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-10-31T20:30:04Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809378#M98943</link>
      <description>&lt;P&gt;You can filter two (or more) graphs with single filter by using Data Filter Context/Source box BUT they have to have same source table&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("Selection Filter",
	Data Filter Context Box(
		H List Box(
			dfsb = Data Filter Source Box(
				dt &amp;lt;&amp;lt; Data Filter(
					Local,
					Add Filter(columns(:age), Display(:age, N Items(6)))
				),
			),
			Graph Builder(
				Size(208, 207),
				Show Control Panel(0),
				Show Legend(0),
				Variables(X(:age)),
				Elements(Bar(X, Legend(3)))
			),
			Bubble Plot(
				X(:weight),
				Y(:height),
				Sizes(:age),
				Title Position(0, 0)
			)
		)
	)
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now my questions is what you are trying to do? You wish to have &lt;STRONG&gt;one filter&lt;/STRONG&gt; which filters two reports FROM different tables? I would use one local data filter and then use that to hide/exclude rows from the second table (if you allow it to modify the table instead of being just local). If it has to be local there are still other options than going with two local data filters (which is also possible).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 16:43:50 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809378#M98943</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-10-31T16:43:50Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809380#M98944</link>
      <description>&lt;P&gt;Make sure that both tables contain the same values!&lt;BR /&gt;If the data filter doesn't find a matching row, it will reset and show all rows:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_0-1730394632957.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/69720iAB183BA4BE3D8C3C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="hogi_0-1730394632957.png" alt="hogi_0-1730394632957.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;This issue will be fixed in JMP19 via&amp;nbsp;&lt;LI-MESSAGE title="🙏 Column Property: Inclusive/forced Values" uid="730865" url="https://community.jmp.com/t5/JMP-Wish-List/Column-Property-Inclusive-forced-Values/m-p/730865#U730865" discussion_style_icon_css="lia-mention-container-editor-message lia-img-icon-idea-thread lia-fa-icon lia-fa-idea lia-fa-thread lia-fa"&gt;&lt;/LI-MESSAGE&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;As a workaround for &amp;lt;=JMP18, you can add dummy rows with missing data in the remaining columns&lt;BR /&gt;-&amp;gt; won't show up in the plot but will prevent the data filter from getting reset.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-SPOILER&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;//Data Filter Event Handler Test.jsl
//2024-10-31

dtHeight = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtHeight &amp;lt;&amp;lt; delete columns({"age", "sex", "weight"});
dtHeight &amp;lt;&amp;lt; Set Name ("Height");

dtWeight = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtWeight &amp;lt;&amp;lt; delete columns({"age", "sex", "height"});
dtWeight &amp;lt;&amp;lt; Set Name ("Weight");


dtHeight &amp;lt;&amp;lt; select where(:Name == "ALFRED") &amp;lt;&amp;lt; delete  rows(); // &amp;lt;- dangerous !!!!

Try(win &amp;lt;&amp;lt; Close Window);
win = New Window("Height and Weight",
	Data Filter Context Box(
		H List Box (
			V List Box(
				df1_Wt = dtWeight &amp;lt;&amp;lt; Data Filter( Local,
					Show Controls( 0 ),	Show Modes( 0 ), Mode( Include( 1 ) ),
					Add Filter(Columns(:name)),
					Display( :name, N Items( 4 ))
				),
				df2_Ht = dtHeight &amp;lt;&amp;lt; Data Filter( Local, 
					Show Controls( 0 ),	Show Modes( 0 ), Mode( Include( 1 ) ),
					Add Filter(Columns(:name)),
					Display( :name, N Items( 4 ))
				)
			),
			V List Box (
				gbWt = dtWeight &amp;lt;&amp;lt; Graph Builder(
					Size( 612, 250 ),
					Show Control Panel( 0 ), Show Legend (0), Show Title (0), 
					Show X Axis (0), Show X Axis Title (0), Show Footer( 0 ),
					Variables( X( :name ), Y( :weight ) ),
					Elements( Bar( X, Y, Legend( 6 ) ) ),
					//Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ),
					Dispatch({},"weight",ScaleBox,{ Max( 200 )})
				),
				H List Box(
					Spacer Box(Size(25,200)),				
					gbHt = dtHeight &amp;lt;&amp;lt; Graph Builder(
						Size( 600, 300 ),
						Show Control Panel( 0 ), Show Legend (0), Show Title (0),
						Variables( X( :name ), Y( :Height ) ),
						Elements( Bar( X, Y, Legend( 6 ) ) ),
						Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} )
					)
				)
			)
		)
	)
);

eh = df1_Wt &amp;lt;&amp;lt; MakeFilterChangeHandler(
	function({x},
dfscript = df1_Wt &amp;lt;&amp;lt; get script();
filter = Extract Expr(dfscript, Add Filter(Wild List()));
Eval(Eval Expr(df2_Ht &amp;lt;&amp;lt; delete all() &amp;lt;&amp;lt; Expr (Name Expr(filter)))))

);

&lt;/CODE&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;/LI-SPOILER&gt;</description>
      <pubDate>Thu, 31 Oct 2024 17:13:18 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809380#M98944</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-10-31T17:13:18Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809381#M98945</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366"&gt;@jthi&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;P&gt;If it has to be local there are still other options than going with two local data filters (which is also possible).&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;The filter state handler is not just triggered by changes of the data filter.&amp;nbsp;&lt;BR /&gt;Your bar graphs are save - but for point plots, the State Handler will be triggered whenever the mouse touches a data point!&lt;BR /&gt;&lt;BR /&gt;So, depending on the plot type, it might be a good idea to compare the current filter settings with the previous ones&amp;nbsp; - and just apply the settings to the second plot when you detect a change.&lt;BR /&gt;&lt;BR /&gt;maybe vote here:&lt;BR /&gt;&lt;LI-MESSAGE title="Improve JMP's state handlers (hover label, row state handler, filter state handler, scheduler, ...)" uid="527992" url="https://community.jmp.com/t5/JMP-Wish-List/Improve-JMP-s-state-handlers-hover-label-row-state-handler/m-p/527992#U527992" discussion_style_icon_css="lia-mention-container-editor-message lia-img-icon-idea-thread lia-fa-icon lia-fa-idea lia-fa-thread lia-fa"&gt;&lt;/LI-MESSAGE&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 17:25:57 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809381#M98945</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-10-31T17:25:57Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809395#M98947</link>
      <description>&lt;P&gt;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/26800"&gt;@hogi&lt;/a&gt;&amp;nbsp; I don't completely understand what your code does, but I put it in and it worked perfectly. Thank you!&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;To be honest, I did not really escape the trap door. I fell in and then pulled myself back out. I was following &lt;/SPAN&gt;&lt;A href="https://community.jmp.com/t5/Discussions/Unexpected-Events-from-Local-Data-Filter-Change-Handler/td-p/511169" target="_self"&gt;this&lt;/A&gt;&lt;SPAN&gt; community post, but I saw no reason to store the event handler as a variable, so I didn't. It didn't work, I followed the post more carefully, storing it as a variable, it started working, and I carried on without understanding what happened. I put comments in my code with your two trapdoors, hoping to save someone the bruises in the future.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;In this case, my filtering is simple -- always one column -- and both my tables contain the same x values, so no concerns there.&lt;/P&gt;&lt;P&gt;I've posted the updated code above.&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 19:55:32 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809395#M98947</guid>
      <dc:creator>TomF</dc:creator>
      <dc:date>2024-10-31T19:55:32Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809397#M98948</link>
      <description>&lt;P&gt;There are plenty of different options for something like this and all depends on what is really being done (how the data looks like, can row states be manipulated, what is being filtered (and why), ...). Here is one option which works (usually) quite well in many case but it has quite complicated function for the handler (adding fixed size (with the help of Spacer Box()) for something like this is generally a good idea to avoid annoying blinking of the window).&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

dt1 = Open("$SAMPLE_DATA/Probe.jmp");
dt2 = dt1 &amp;lt;&amp;lt; Subset(All Rows, Selected Columns(0));

dt2 &amp;lt;&amp;lt; Delete Rows(dt2 &amp;lt;&amp;lt; get rows where(:Process == "Old"));

nw = New Window("",
	Data Filter Context Box(
		H List Box(
			Data Filter Source Box(
				df1 = dt1 &amp;lt;&amp;lt; Data Filter(
					Local, 
					Show Controls(0), 
					Show Modes(0), 
					Mode(Include(1)), 
					Add Filter(Columns(:Site, :Process)), Display(:Site, N Items(5))
				),
			),
			V List Box(
				gb1 = dt1 &amp;lt;&amp;lt; Graph Builder(
					Size(525, 458),
					Show Control Panel(0),
					Variables(X(:Lot ID), Y(:DELL_RPNBR)),
					Elements(Bar(X, Y, Legend(4)))
				),
				gb2_collector = V List Box()
			)
		)
	)
);


create_gb2 = function({a},
	c = df1 &amp;lt;&amp;lt; Get where clause;
	If(Is Missing(c), // could also just use dt2 instead of dt2_private
		dt2_privatenew = dt2 &amp;lt;&amp;lt; Subset(All Rows, Selected columns only(0), Link to original data table(1), private);
	,
		where = Arg(Parse(df1 &amp;lt;&amp;lt; Get where clause));
		dt2_privatenew = Eval(EvalExpr(dt2 &amp;lt;&amp;lt; Subset(
			Filtered Rows(Expr(Name Expr(where))),
			Selected columns only(0),
			Link to original data table(1),
			private
		)));
		If(Is Empty(dt2_privatenew), // no rows left -&amp;gt; pick first row and remove it, no linking
			dt2_privatenew = dt2 &amp;lt;&amp;lt; Subset(Rows(1), Selected columns only(0), Link to original data table(0), private);
			dt2_privatenew &amp;lt;&amp;lt; Delete Rows(1);
		);
	);
	
	nw &amp;lt;&amp;lt; inval;
	Try(Close(dt2_private, no save)); // will also remove old graph builder
	dt2_private = dt2_privatenew;
	
	gb2_collector &amp;lt;&amp;lt; Append(
		gb2 = dt2_private &amp;lt;&amp;lt; Graph Builder(
			Size(528, 458),
			Show Control Panel(0),
			Variables(X(:Lot ID), Y(:DELL_RPNBR)),
			Elements(Bar(X, Y, Legend(20)))
		)
	);
	wait(0);
	nw &amp;lt;&amp;lt; Update Window;
);

create_gb2(.);

nw:handler = df1 &amp;lt;&amp;lt; Make Filter Change Handler(
	create_gb2();
);

Eval(EvalExpr(
	nw &amp;lt;&amp;lt; On Close(
		Try(Close(Expr(dt1), no save));
		Try(Close(Expr(dt2), no save));
		Try(Close(Expr(dt2_private), no save));
	);
));

Write();&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 31 Oct 2024 19:27:16 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809397#M98948</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-10-31T19:27:16Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809400#M98949</link>
      <description>&lt;P&gt;Yes, I want one filter that filters two reports from different tables.&amp;nbsp; I imagine that doesn't make sense with the simple Big Class example I shared above, but I'm attaching a more complicated example that closely mimics the structure of my actual data set.&lt;/P&gt;&lt;P&gt;Imagine you have one table with the current height of each student and another table with the weight of each student for the past three years.&amp;nbsp; This is how I want to view that data:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TomF_1-1730403007713.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/69731iA9E501FB6F599518/image-size/medium?v=v2&amp;amp;px=400" role="button" title="TomF_1-1730403007713.png" alt="TomF_1-1730403007713.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The height data set obviously has one row per student. The weight data starts with one row per student (three columns of weight), but there is no way I know of in Graph Builder to make that bottom graph without stacking the weights.&amp;nbsp; My weight table now has 3X as many rows as the height table.&lt;/P&gt;&lt;P&gt;Because a data filter can't filter two different tables, my solution so far was to concatenate the tables, just to be able to make this graph.&amp;nbsp; That isn't elegant, but it works fine.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Where I really got in to trouble was that when I hover over the height I want the pop-up to show if they were wearing shoes during the measurement, and when I hover over the weight I want to know the serial number of the scale that was used. When all the data is in one table, and I make Label(1) for both columns you end up with missing values when you hover (because there's no scale serial number on a weight measurement)...which can also be addressed, but it just started to get very messy.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think the solution of leaving the data in two tables with two synced filters (one hidden) is going to work much better.&amp;nbsp; But if there's a better way to create this graph I'm open to suggestions.&lt;BR /&gt;Just a general shout out to Graph Builder and the ability to control it with JSL.&amp;nbsp; This seamless melding of two different graphs is only possible because we have the ability to turn off everything on the bottom of the top graph and top of the bottom graph and bring them right up against each other. This has allowed us to create a very customized and very data-dense graphic in our specific situation.&amp;nbsp; And now we can filter it elegantly too:) Maybe others will find this useful down the road.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 19:41:35 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809400#M98949</guid>
      <dc:creator>TomF</dc:creator>
      <dc:date>2024-10-31T19:41:35Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809401#M98950</link>
      <description>&lt;P&gt;I'm afraid a lot of that code is beyond me, but I get the general idea. I will keep this in mind for more complicated situations. Thanks!&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 20:05:43 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809401#M98950</guid>
      <dc:creator>TomF</dc:creator>
      <dc:date>2024-10-31T20:05:43Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809406#M98951</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/24582"&gt;@TomF&lt;/a&gt;&amp;nbsp;, I added some comments to the code to explain the individual steps.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;One trick is the &lt;FONT face="courier new,courier"&gt;Extract Expr()&lt;/FONT&gt; - it scans the expression and searches for a specific pattern.&lt;/P&gt;&lt;P&gt;I just had a look at an old script where I used one data filter to control 4 additional data filters in the same Dashboard.&lt;BR /&gt;And it looked like&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;		For( i = 1, i &amp;lt;= N Arg( filterScript ), i++,
			If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
				filterExpression = Arg( filterScript, i )
			)
		);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The approach via &lt;FONT face="courier new,courier"&gt;Extract Expr()&lt;/FONT&gt; is much more elegant - I just learned it last year from&amp;nbsp;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366"&gt;@jthi&lt;/a&gt;&amp;nbsp;in this discussion:&lt;BR /&gt;&lt;LI-MESSAGE title="🙏 Expression Indexing: read and write access" uid="697359" url="https://community.jmp.com/t5/JMP-Wish-List/Expression-Indexing-read-and-write-access/m-p/697359#U697359" discussion_style_icon_css="lia-mention-container-editor-message lia-img-icon-idea-thread lia-fa-icon lia-fa-idea lia-fa-thread lia-fa"&gt;&lt;/LI-MESSAGE&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The other trick:&amp;nbsp; &lt;FONT face="courier new,courier"&gt;Eval (Eval Expr(&amp;nbsp; Expr())) -&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&lt;/FONT&gt;a Swiss army knife!&lt;BR /&gt;It will solve 95% of your issues in JSL :)&lt;/img&gt;&lt;BR /&gt;&lt;LI-MESSAGE title="Expression Handling in JMP: Tipps and Trapdoors" uid="747728" url="https://community.jmp.com/t5/Discussions/Expression-Handling-in-JMP-Tipps-and-Trapdoors/m-p/747728#U747728" discussion_style_icon_css="lia-mention-container-editor-message lia-img-icon-forum-thread lia-fa-icon lia-fa-forum lia-fa-thread lia-fa"&gt;&lt;/LI-MESSAGE&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 20:27:54 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809406#M98951</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-10-31T20:27:54Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809407#M98952</link>
      <description>&lt;P&gt;Knowing different filtering techniques make it possible to do all sorts of nice things in JMP (sometimes they are also necessary especially if you have lots of data).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I assume that by concatenate you might mean update/join and we could have single table like this (virtual join can be used for this if there is unique identifier)&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_3-1730406321218.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/69735i13AAD9D6B5311618/image-size/medium?v=v2&amp;amp;px=400" role="button" title="jthi_3-1730406321218.png" alt="jthi_3-1730406321218.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;From this it is possible to create a graph like this&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1730406290362.png" style="width: 999px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/69734iF7E82E9239CEA211/image-size/large?v=v2&amp;amp;px=999" role="button" title="jthi_2-1730406290362.png" alt="jthi_2-1730406290362.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;You can do it for example by utilizing Textlets (hover label)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Graph Builder(
	Size(1085, 688),
	Show Control Panel(0),
	Show Legend(0),
	Variables(X(:Name), X(:Year, Position(1)), Y(:Height), Y(:Weight), Overlay(:Name)),
	Elements(Position(1, 1), Bar(X(1), X(2), Y, Overlay(0), Legend(13))),
	Elements(Position(1, 2), Line(X(1), X(2), Y, Legend(15)), Points(X(1), X(2), Y, Legend(16))),
	Local Data Filter(
		Add Filter(
			columns(:Name),
			Where(
				:Name == {"AMY", "BARBARA", "CAROL", "CHRIS", "CLAY", "DANNY", "DAVID", "EDWARD", "ELIZABETH", "FREDERICK", "HENRY", "JACLYN"}
			),
			Display(:Name, N Items(15), Find(Set Text("")))
		)
	),
	SendToReport(
		Dispatch({}, "Name", ScaleBox, {Label Row(2, Show Major Grid(1))}),
		Dispatch({}, "Graph Builder", FrameBox, {Set Textlet(Markup("Serial Number: {:Serial No.[local:_firstRow]}"))}),
		Dispatch({}, "Graph Builder", FrameBox(2), {Set Textlet(Markup("Serial Number: {:Serial No.[local:_firstRow]}"))})
	)
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You can customize the text shown much more if necessary, &lt;A href="https://www.jmp.com/support/help/en/18.0/#page/jmp/add-text-to-hover-labels-in-jmp-graphs.shtml#" target="_blank" rel="noopener"&gt; Using JMP &amp;gt; JMP Reports &amp;gt; Customize Hover Labels in JMP Graphs &amp;gt; Add Text to Hover Labels in JMP Graphs&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 20:28:36 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809407#M98952</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2024-10-31T20:28:36Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809411#M98953</link>
      <description>&lt;P&gt;Thanks&amp;nbsp;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/24582"&gt;@TomF&lt;/a&gt;&amp;nbsp;- very cool trick to fight against the restriction of label settings: use 2 tables : )&lt;BR /&gt;I wonder why it's not possible to generate plots like this - neither in the separate graphs, nor combined in one graph.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_1-1730407658171.png" style="width: 400px;"&gt;&lt;img src="https://community.jmp.com/t5/image/serverpage/image-id/69738i5B561EB7E5FA0ABB/image-size/medium?v=v2&amp;amp;px=400" role="button" title="hogi_1-1730407658171.png" alt="hogi_1-1730407658171.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;setting the label for one graph automatically forces the other graphs to show the labels as well : (&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 20:49:08 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809411#M98953</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-10-31T20:49:08Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809607#M99047</link>
      <description>&lt;P&gt;I did mean concatenate. By doing update/join you are associating the height data, which has no year associated with it, with the weight data, which is yearly. The new graph makes it look like Barbara's height was measured to be 60 inches in 2022, 23, and 24, which it was not.&lt;BR /&gt;The trick here&amp;nbsp; is that the data in the bottom is associated with year, but the data in the top is not, and I want one centered bar for it.&amp;nbsp; Maybe instead of height I should have used "GDP per capita when and where the student was born" -- clearly not associated with 22/23/24.&lt;BR /&gt;Because the underlying data for the top and bottom graphs have a different structure, I think I need two separate graph builders to create the picture I want (above).&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2024 19:48:50 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809607#M99047</guid>
      <dc:creator>TomF</dc:creator>
      <dc:date>2024-11-04T19:48:50Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809608#M99048</link>
      <description>&lt;P&gt;&lt;a href="https://community.jmp.com/t5/user/viewprofilepage/user-id/26800"&gt;@hogi&lt;/a&gt;, thanks for these links. Eval/Eval Expr() has been the most frustrating part of JSL for me over the past few years. I've used it successfully a few times by copying and tweaking examples from the Community, but never felt like I actually grasped it well.&amp;nbsp; I look forward to going through the list of resources you've collected and maybe that will help it finally sink in. I know it's something I need to add to my toolkit.&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2024 19:56:41 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809608#M99048</guid>
      <dc:creator>TomF</dc:creator>
      <dc:date>2024-11-04T19:56:41Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809609#M99049</link>
      <description>&lt;P&gt;Agree : )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For Big Class there might be some easy solution, but this solution might not help with the actual issue.&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2024 20:01:29 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809609#M99049</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-11-04T20:01:29Z</dc:date>
    </item>
    <item>
      <title>Re: How do I make one Data Filter mirror another?</title>
      <link>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809610#M99050</link>
      <description>&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Eval(): &lt;/FONT&gt;run the code&amp;nbsp; *)&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Eval Expr: &lt;/FONT&gt;pre-evaluate everything wrapped with&amp;nbsp;&lt;FONT face="courier new,courier"&gt;Expr() *)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;Expr():&lt;/FONT&gt; marker for code which has to get pre-evaluated&amp;nbsp; *)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*) my brain : "the E word"&amp;nbsp;&lt;SPAN&gt;- 3 times.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;and the 4th one is &lt;FONT face="courier new,courier"&gt;Expr Name()&amp;nbsp; &amp;nbsp; ; -)&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 04 Nov 2024 20:11:47 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/How-do-I-make-one-Data-Filter-mirror-another/m-p/809610#M99050</guid>
      <dc:creator>hogi</dc:creator>
      <dc:date>2024-11-04T20:11:47Z</dc:date>
    </item>
  </channel>
</rss>

