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

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

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.
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

Add more and refresh

Remove X role

Add two to X role

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;
wonderful idea!
soooo useful, thanks @jthi