cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar

New filter "Column Filter" a combination of Local Data Filter and Column Switcher

What inspired this wish list request? 

Depending what you are doing in JMP, you sometimes have to unnecessarily move from wide data to tall data due to how column switcher / local data filter work - we cannot "filter" columns currently. This is one of the reasons why I did create Enhanced Sankey Plot (ESP) add-in as it is fairly difficult to quickly add/remove specific columns from graph builder.

 

What is the improvement you would like to see? 

I would like to have new tool? "Column Filter" which would allow me to determine which columns I want to show. This would function basically like Data Filter but for columns.

If I have a situation like this where I have multiple columns in my Y-axis for example

jthi_0-1708156674084.png

I don't have any easy options to hide or add extra columns. If I want to some of those columns or add new ones, I have to stack the data first and the create a graph with local data filter

jthi_1-1708156775231.png

This does work great but sometimes this feels very unnecessary step.

 

Why is this idea important? 

This would make the gap between tall/stacked and wide/split data smaller.

3 Comments
jthi
Super User

Script to demonstrate how this could work (this is very far from usable product, but should function as demonstration, I also will turn this into add-in/toolbar when I have enough time to properly design the UI)

 

One column at Y

jthi_0-1708166091302.png

Add more and refresh

jthi_1-1708166109597.png

 

Remove X role

jthi_2-1708166125535.png

 

Add two to X role

jthi_3-1708166147701.png

 

View more...
Names Default To Here(1);

delete_variable_for_role = function({report, role}, {Default Local},
	all_variables = report << get variables;
	For Each({variable}, all_variables,
		colname = Arg(variable, 1) << get name;
		Try(
			Eval(EvalExpr(
				report << Remove Variable({Expr(NameExpr(AsColumn(colname))), Role(Expr(role)), Position(1)})
			));
		);
	);
);

add_variables_for_role = function({report, columns, role}, {Default Local},
	For Each({colname}, columns,
		Eval(EvalExpr(
			report << Add Variable({Expr(NameExpr(AsColumn(colname))), Role(Expr(role)), Position(1)});
		));
	);
);

update_cols = Expr(
	cur_cols = fcs << get selected;
	cur_role = cb << get selected;
	report << inval;
	delete_variable_for_role(report, cur_role);
	add_variables_for_role(report, cur_cols, cur_role);
	report << update window;
	wait(0);
);

prepend_column_filter = Expr(
	lb = (Report(report) << top parent) << child;
	lb << Set Horizontal(1);
	ob_colfilter = Outline Box("Column Filter",
		V List Box(
			H List Box(
				Panel Box("Role to Filter",
					Lineup Box(N Col(1),
						Text Box("Select Role to filter"),
						cb = Combo Box({"Y", "X"})
					)
				),
				Panel Box("Actions",
					Lineup Box(N Col(1),
						Button Box("Refresh",
							update_cols
						),
					)
				)
			),
			Panel Box("Columns",
				fcs = Filter Col Selector(Datatable(dt))
			)
		)
	);
	cur_height = report << get height;
	fcs << set height(cur_height - 200);
	fcs << set width(200);
	Eval(EvalExpr(
		ob_colfilter << Set Menu Script(
			{"Remove Column Filter", Expr(ob_colfilter) << Delete Box; Expr(lb) << Set Horizontal(0)}
		);		
	));
	lb << Prepend(ob_colfilter);	
);



dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
dt << Ungroup Columns;

report = dt << Graph Builder(
	Size(528, 653),
	Show Control Panel(0),
	Fit to Window("On"),
	Variables(X(:SITE), Y(:NPN1), Y(:PNP1, Position(1))),
	Elements(Boxplot(X, Y(1), Y(2), Legend(4)))
);

wait(2);
prepend_column_filter;
jthi
Super User
hogi
Level XI

wonderful idea!
soooo useful, thanks @jthi