cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
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

7 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)
5 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