cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
OddsDeer284888
Level II

Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

Hi all,

I’m working with the Data Filter in JMP where I often have more than 10 filters. Right now, all of them are displayed vertically in one long list, and I have to scroll down a lot just to apply filters, which feels super weird.

Is it possible to customize the Data Filter UI so that some filters can be displayed horizontally in rows (instead of one long vertical stack of dropdowns)?

Thanks in advance for any guidance!

8 REPLIES 8
jthi
Super User

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

I think you can at least replicate that by using multiple data filters Can I arrange data filters in two columns? . You also might be able to do it with a lot of display box manipulation but I haven't tried that (I use custom data filter in cases like this).

-Jarmo
OddsDeer284888
Level II

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

Thank you for your response. Ideally, this should be achievable using a single data filter rather than multiple filters, since the main advantage of a data filter is its ability to apply conditional filtering. While using multiple filters might be a possible solution, I am not sure if it would be straightforward to pass context to the inner filters in order to achieve conditional filtering. Plus the UI would look absolute terrible.

I also noticed some limitations with custom data filters (tested on a ComboBox):

  • UI issues: When the values of the columns are too large, the dropdown becomes excessively long and difficult to use. Even if you have 1 long value. (More work to truncate or filter data before displaying it as a dropdown. (More work and more slower than data filter))
  • Performance problems: Displaying thousands of records is extremely slow. I tried different approaches (such as summarizing to get unique values, and using hashing to identify unique column values), but none were successful.
  • Complexity of conditional filtering: If you have many dropdowns, implementing conditional filtering requires writing a significant amount of code, which quickly becomes cumbersome.

 

jthi
Super User

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

I pretty sure none of those are issues if you just build your custom filter properly with the knowledge of what it is supposed to do in the end.

Also like I said in my earlier response, you can tinker around with the display boxes to possibly get some sort of horizontal filter

Names Default To Here(1);
colcount = 3;

dt = Open("$SAMPLE_DATA/Car Poll.jmp");

dist = dt << Distribution(
	Nominal Distribution(Column(:country)),
	Local Data Filter(
		Conditional,
		Add Filter(
			columns(:country, :size, :type),
			Display(:country, N Items(3), "List Display"),
			Display(:size, N Items(3), "List Display"),
			Display(:type, N Items(3), "List Display")
		)
	)
);

ldf_ob = (Report(dist) << Top Parent)[Outline Box("Local Data Filter")];
lub = ldf_ob[LineupBox(2)];


lub << N Col(colcount);
For(i = 1, i <= colcount, i++,
	lub << Prepend(Spacer Box(Size(200, 0)));
);

Write();

jthi_0-1763984725201.png

 

-Jarmo
OddsDeer284888
Level II

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

Thank you for your response.

Do you have any example code that you can share where you are displaying column values from the data table in the combobox with conditonal achieved?

hogi
Level XIII

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

A slightly different approach:

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
	Size( 437, 787 ),
	Graph Spacing( 4 ),
	Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
	Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
	Local Data Filter(
		Add Filter(
			columns( :sex, :height, :weight  )
		)
	)
);
Current Report()["Local Data Filter", List Box( 6 )] << set Horizontal( 1 );
Current Report()[ List Box( 4 )] << set Horizontal( 0 );
	

hogi_0-1764001160638.png

 

OddsDeer284888
Level II

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

Do you think it works without graph builder? If you remove the graph builder will you be able to display however you want horizontally?

hogi
Level XIII

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

Every list Box has the Horizontal(0/1) flag.
Just change the flag and you can change every vertical List of display objects into a horizontal one.

 

here is an example for a pure data filter with horizontal mode (don't know if this is useful)

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );

win = new window("test", dt << data Filter(
		Add Filter(
		columns( :height, :countries visited, :family cars )
	)	
));

win["Data Filter",ListBox(7)] << set horizontal(1)

 

jthi
Super User

Re: Is it possible to arrange Data Filter/Local Data Filter horizontally? (Change UI)

What are you trying to do? What conditions? In which order should conditions apply? Do they have to apply in order or can some be skipped? Can you make modifications to the main table (new columns/selections)? When do the filters apply (immediately/on button press)? << Select Where with restrict is most likely one quite simple option

Local Data Filter can use Combo Box (or similar selector)

Names Default To Here(1);
colcount = 3;

dt = Open("$SAMPLE_DATA/Car Poll.jmp");

dist = dt << Distribution(
	Nominal Distribution(Column(:country)),
	Local Data Filter(
		Conditional,
		Add Filter(
			columns(:country, :size, :type),
			Display(:country, N Items(3), "Single Category Display"),
			Display(:size, N Items(3), "Single Category Display"),
			Display(:type, N Items(3), "Single Category Display")
		)
	)
);

ldf_ob = (Report(dist) << Top Parent)[Outline Box("Local Data Filter")];
lub = ldf_ob[LineupBox(2)];


lub << N Col(colcount);
For(i = 1, i <= colcount, i++,
	lub << Prepend(Spacer Box(Size(200, 0)));
);

Write();
-Jarmo

Recommended Articles