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

We want to hear your ideas for improving JMP software.

  1. Search: Please search for an existing idea first before submitting a new idea.
  2. Submit: Post your new idea using the Suggest an Idea button. Please submit one actionable idea per post rather than a single post with multiple ideas.
  3. Kudo & Comment Kudo ideas you like, and comment to add to an idea.
  4. Subscribe: Follow the status of ideas you like. Refer to status definitions to understand where an idea is in its lifecycle. (You are automatically subscribed to ideas you've submitted or commented on.)

We consider several factors when looking for what ideas to add to JMP. This includes what will have the greatest benefit to our customers based on scope, needs and current resources. Product ideas help us decide what features to work on next. Additionally, we often look to ideas for inspiration on how to add value to developments already in our pipeline or enhancements to new or existing features.

Choose Language Hide Translation Bar

the most important DataView? NON-excluded rows!

☐ cool new feature
☑ could help many users!

☐ removes a „bug“

☐ nice to have

☐ nobody needs it

 

The rows summary table on the bottom left of a table is very useful to get DataViews (subsets) for selected rows, excluded rows and so on.
The Data View 

 

Unfortuntely, in my daily work it's much more often that I need a subset of non-excluded rows than of excluded rows.
So, I go:

1)HolgerSp_1-1665845167027.png

 

2) HolgerSp_4-1665845387249.png

 

3) 

hogi_2-1666128990005.png

 

 

my wish: an additional entry for non-excluded rows,
like this

HolgerSp_5-1665845822500.png

and by this: the opportunity to generate a DataView for non-excluded rows.

 

Additional benefit:

One can directly see the number of actually used (= non-excluded) rows and doesn't have to calculate it (all rows - excluded)

 

more wishes submitted by  hogi_2-1702196401638.png

8 Comments
Status changed to: Acknowledged

@hogi - Thank you for your suggestion! We have captured your request and will take it under consideration.

SamGardner
Staff
Status changed to: Investigating
 
SamGardner
Staff

I have been think about this one for a while, and on my short holiday I decided to work on a scripted approach to do this.  

We are looking into this, however, to make this easier to. 

SamGardner_0-1671042490068.png

 

 Here is my script:

/***************************************************
SCRIPT NAME:  Row Selector Viewer

AUTHOR(s):
Sam Gardner, JMP Statistical Discovery LLC

JMP VERSION:  
Built with JMP 17.0 and tested with JMP 16.2

PURPOSE: 
To allow the user to be able to easily subset and see rows that are selected or excluded or hidden, OR unselected or unexcluded or unhidden

SPECIFICATION:
Views of the desired subset of the current data table are created using linked subsets and data box views within a report window.  Upon selecting an option, an invisible linked
subset of the desired rows to view is created, and then a new data view in a  data box is displayed in the scripted report window.

USAGE: 
Must be run with a data table open.
Upon running, choose the subset of the rows to view by selecting the check boxes.  Note that this current version
only allows subsetting based in Selected/Excluded/Hidden or Unselected/Unexcluded/Unhidden

ASSUMPTIONS: None.

SCRIPT REVISION HISTORY:

VERSION	DATE		DESCRIPTION
1.0		2022 Dec 14	First Version

NOTES:
N/A

TO DO:
N/A

FUTURE IMPROVEMENT IDEAS:
None at this time.
***************************************************/

Names Default To Here( 1 );

dt = Current Data Table();

// function definitions

/*
// Loc Inverse Function
// This function converts a vector of positive integers (locvals) into an
// indicator vector of a specified length, n,  with the values
// v[I] = 1 if I is in locvals, and 0 otherwise
// example
//      Loc Inverse(6, [1,3])
// returns
//      [1, 0, 1, 0, 0, 0]
*/

Loc Inverse = Function( {n, locvals},
	v = J( n, 1, 0 );
	v[locvals] = 1;
	v;
);
Loc Inverse( 6, [1, 3] );
/*
// this gets the indicators of selected rows in the data table
LocInverse( N Rows( dt ), dt << Get Selected Rows );
// this gets the indicators of the excluded rows in the data table
Loc Inverse( N Rows( dt ), dt << GetExcludedRows );
// this gets the indicators of the hidden rows in the data table
Loc Inverse( N Rows( dt ), dt << GetHiddenRows );
*/

nw = New Window( "Row Selector Viewer",
	<<On Close(
		Try(
			Close( dt_sub, nosave );
			Clear Symbols( dt_sub );
		)
	),
	vb = H List Box(
		V List Box(
			Text Box(
				"You can choose option from either the left or right set of check boxes.  If no options are selected then the entire table is shown.",
				<<Set Wrap( 200 )
			),
			pbleft = Panel Box( "Choose Rows",
				H List Box(
					cbleft = Check Box(
						{"Selected", "Excluded", "Hidden"},
						Print( cbleft << get selected );
						Print( cbleft << get selected indices );
            	
						viewchoice = cbleft << get selected;
						RowstoView = J( N Rows( dt ), 1, 0 );
						If( N Items( viewchoice ) > 0,
							For( i = 1, i <= N Items( viewchoice ), i++,
								RowstoView = RowstoView | Match( viewchoice[i],
									"Selected",
										cbright << Set All( 0, run script( 0 ) );
										Loc Inverse( N Rows( dt ), dt << Get Selected Rows );,
									"Excluded",
										cbright << Set All( 0, run script( 0 ) );
										Loc Inverse( N Rows( dt ), dt << Get Excluded Rows );,
									"Hidden",
										cbright << Set All( 0, run script( 0 ) );
										Loc Inverse( N Rows( dt ), dt << Get Hidden Rows );
								)
							);
							RowstoView = Loc( RowstoView );
							Print( RowstoView );
						,
							RowstoView = 1 :: N Rows( dt );
							Print( RowstoView );
						);
						If( !Is Empty( dt_sub ),
							Close( dt_sub, nosave );
							Clear Symbols( dt_sub );
						);
						selectedrows = dt << get selected rows;
						dt << clear select;
						dt << select rows( RowstoView );
					
						dt_sub = dt << Subset( Output Table( "Data View" ), Selected Rows( 1 ), Selected Columns Only( 0 ), Linked, Private );
						dt << clear select;
						dt << select rows( selectedrows );
						pbright << Append( dt_sub << new data box() );
            	
					),
					cbright = Check Box(
						{"Unselected", "Unexcluded", "Unhidden"},
						viewchoice = cbright << get selected;
						RowstoView = J( N Rows( dt ), 1, 1 );
						If( N Items( viewchoice ) > 0,
							For( i = 1, i <= N Items( viewchoice ), i++,
								RowstoView = RowstoView & Match( viewchoice[i],
									"Unselected",
										cbleft << Set All( 0, run script( 0 ) );
										!(Loc Inverse( N Rows( dt ), dt << Get Selected Rows ));,
									"Unexcluded",
										cbleft << Set All( 0, run script( 0 ) );
										!(Loc Inverse( N Rows( dt ), dt << Get Excluded Rows ));,
									"Unhidden",
										cbleft << Set All( 0, run script( 0 ) );
										!(Loc Inverse( N Rows( dt ), dt << Get Hidden Rows ));
								)
							);
							RowstoView = Loc( RowstoView );
							Print( RowstoView );
						,
							RowstoView = 1 :: N Rows( dt );
							Print( RowstoView );
						);
						If( !Is Empty( dt_sub ),
							Close( dt_sub, nosave );
							Clear Symbols( dt_sub );
						);
						selectedrows = dt << get selected rows;
						dt << clear select;
						dt << select rows( RowstoView );
						dt_sub = dt << Subset( Output Table( "Data View" ), Selected Rows( 1 ), Selected Columns Only( 0 ), Linked, Private );
						dt << clear select;
						dt << select rows( selectedrows );
						pbright << Append( dt_sub << new data box() );
					)
				)
			),
			Button Box( "Close Viewer", nw << close window )
		),
		pbright = Panel Box( "Data View", )
	)
);

dt_sub = dt << Subset( All Rows, Selected Columns Only, Linked, Private );
pbright << Append( dt_sub << new data box() );



 

 

hogi
Level XI

I found this in the outbox - don't know if I posted it somewhere else?


In the same context - please also allow the user to  send

dt << Get nonExcluded Rows();

to a data table:
https://community.jmp.com/t5/Discussions/col-lt-lt-get-values-for-non-excluded-rows/m-p/556579/highl... 

 

fastes single-line command for this important piece of code is ~ factor 10 slower:

allRows = dt << get rows where( Excluded() == 0 );

 

And first asking for the non-excluded rows and then "inverting" the list adds ~ 30% to the time budget

 

hogi
Level XI

@SamGardner.

Thank you for the code - really nice menus.
should definitely go to the Subset menu of Jmp 18

We could ask @julian if he wants to add it to the Dynamic subset Add-In as well 

 

Concerning my post here, I actually thought about something much tinier - just to add an option for the non-excluded rows to the menu on the lower left of a data table.

To be honest, I am already so used to selecting the excluded rows and then to invert the selection - I would say that such a feature comes would come too late for me.

But as many of my posts - the wishes are not mainly for myself, but more for my co-workers ... and all the other users in the community

 

 

hogi_0-1671056214547.png

 

hogi
Level XI

With the introduction of QuickSelect Toolbar  it got a bit easier: 

hogi_0-1671641024953.png

 

 

The click count reduced from 

- select excluded rows (2 clicks)

- invert selection (rows - row selection - invert row selection = 3 clicks)

- data view for selected rows (2 clicks)

➜ 7 clicks 

 

to 

- select excluded rows (2 clicks)

- invert (1 click)

- data view for selected rows (2 clicks) with the new Quickselect Toolbar: 1 click
5 4 clicks

 

Outlook:

with non-excluded added to the menu on the bottom left, it will be 2 clicks

hogi_1-1671641079863.png

hogi
Level XI

Hm, how about:

- don't add "non-Excluded" to the overview table

- but add Select non-excluded to the right click contect menu of Excluded
hogi_0-1673358375025.png

are there users who use the hidden functionality?

then add a similar option to select non-hidden rows

 

hogi
Level XI