cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
Yngeinstn
Level IV

Trouble Manipulating Tabulated Tables

I am don't quite understand why i am having issues manipulating columns from a table created from a tabulated report. I have attached the tables and scripts for your references. I am trying to create a table that matches our current report table.

 

Always, thanks for you help

 

 

Names Default To Here(1);

dt = Current Data Table();

LotListSQLString = "Wafer_1";

	tab = dt  
		<< Tabulate(
		invisible,
			Show Control Panel( 0 ),
			Add Table(
				Column Table( 
					Category Table, 
					Statistics(
						N,
						Name( "% of Total" ) 
					) 
				),
				
				Row Table( 
					Columns by Categories( 
						:Name( "test" ),
						:Name( "[Rx] test1" ),
						:Name( "[Rx] test2" ),
						:Name( "[Rx] test3" ),
						:Name( "[Tx] test1" ),
						:Name( "[Tx] test2" ),
						:Name( "[Tx] test3" ),
						:Name( "test4" ),
						:Name( "Composite" )	
					 ) 
				 )
			)
		);
		
	dtFinal = tab << Make Into Data Table;
	
	Wait( 1 );
	
	dtFinal << set name( " Yield Report" );
	
	dtFinal = New Column( "Mode",
		<< Formula( 
			If( (:Columns by Categories == "test" ), "-",
				IF( :Columns by Categories == "[Rx] test1", "Rx", 
					IF( :Columns by Categories == "[Rx] test2", "Rx",
						IF( :Columns by Categories == "[Rx] test3", "Rx",
							IF( :Columns by Categories == "[Tx] test1", "Tx", 
								IF( :Columns by Categories == "[Tx] test2", "Tx",
									IF( :Columns by Categories == "[Tx] test3", "Tx",
										If( :Columns by Categories == "test4", "-"
										)
									)
								)
							)
						)
					)
				)
			)
		)
	);
	
	Wait( 0 );
	
	dtFinal = New Column( "TestName",
		<< Formula( 
			If( (:Columns by Categories == "test" ), "test",
				IF( :Columns by Categories == "[Rx] test1", "test1", 
					IF( :Columns by Categories == "[Rx] test2", "test2",
						IF( :Columns by Categories == "[Rx] test3", "test3",
							IF( :Columns by Categories == "[Tx] test1", "test1", 
								IF( :Columns by Categories == "[Tx] test2", "test2",
									IF( :Columns by Categories == "[Tx] test3", "test3",
										If( :Columns by Categories == "test4", "test4"
										)
									)
								)
							)
						)
					)
				)
			)
		)
	);
	
// ------------------------ BEGIN FORMATING TABLE FOR FINAL REPORTING

// Says Scriptable[] but won't delete
	
	dtFinal << Delete Columns( {"N(Fail)", "% of Total(Fail)"} );

// Works Correctly

	dtFinal = New Column( "wafer_number",
		<< Formula(
			LotListSQLString
		)
	);

// Says Scriptable[] but won't go to column and obviously doesn't move

	dtFinal << Go To( "wafer_number" );
	Wait ( 0.5 );
	dtFinal << move selected Columns( To First );
	dtFinal << clear Column selection;

// Works Correctly
	
	dtFinal = Column( "Mode" ) << Delete Formula;
	dtFinal = Column( "TestName" ) << Delete Formula;
	
// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal << Go To( :Mode );
	Wait ( 1 );
	dtFinal << move selected Columns( after( "wafer_number" ) );
	dtFinal << Clear Column Selection;
	
// Says Scriptable[] but won't go to delete

	dtFinal << Delete Columns( :Columns by Categories);

// Says Scriptable[] but won't go to delete
	
	dtFinal << go to( :TestName );
	Wait( 1 );
	dtFinal << Move Selected Column( after( "name" ) );
	dtFinal << clear Column selection;

// Works Correctly
	
	lot = "XYZ";
	
	part = New Column( "part_number" );
	part << Set Formula( lot );

// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal << go to( :part_number );
	Wait ( 1 );
	dtFinal << Move Selected Column( after( "name" ) );
	dtFinal << clear Column selection;

// Works Correctly
	
	die = 334;
	
	numdie = New Column( "NumDie" );
	numdie << Set Formula( die ); 

// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal<< go to( :NumDie );
	Wait ( 1 );
	dtFinalYield<< move selected Columns( after( "part_number" ) );
	dtFinalYield<< clear Column selection;
	
	

 

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Trouble Manipulating Tabulated Tables

Below is my review of your script......the issues seem to be not understanding the difference between when to use "=" and when to use "<<", and also you seem to be more careful, which sometimes relates to not totally understanding JSL.  So I strongly suggest that you read the Scripting Guide!

     Help==>Books==>Scripting Guide

Here is my annotated script

Names Default To Here(1);

dt = Current Data Table();

LotListSQLString = "Wafer_1";

	tab = dt  
		<< Tabulate(
		invisible,
			Show Control Panel( 0 ),
			Add Table(
				Column Table( 
					Category Table, 
					Statistics(
						N,
						Name( "% of Total" ) 
					) 
				),
				
				Row Table( 
					Columns by Categories( 
						:Name( "test" ),
						:Name( "[Rx] test1" ),
						:Name( "[Rx] test2" ),
						:Name( "[Rx] test3" ),
						:Name( "[Tx] test1" ),
						:Name( "[Tx] test2" ),
						:Name( "[Tx] test3" ),
						:Name( "test4" ),
						:Name( "Composite" )	
					 ) 
				 )
			)
		);
		
	dtFinal = tab << Make Into Data Table;
	
	Wait( 1 );
	
	dtFinal << set name( " Yield Report" );
	
	// changed from 
	// dtFinal = New Column( "Mode", 
	// to
	dtFinal << New Column( "Mode", character,
		// More efficient way to code the If()
		Formula(
			If(
				:Columns by Categories == "test", "-",
				:Columns by Categories == "[Rx] test1", "Rx",
				:Columns by Categories == "[Rx] test2", "Rx",
				:Columns by Categories == "[Rx] test3", "Rx",
				:Columns by Categories == "[Tx] test1", "Tx",
				:Columns by Categories == "[Tx] test2", "Tx",
				:Columns by Categories == "[Tx] test3", "Tx",
				:Columns by Categories == "test4", "-"
			)
		)
	);
	
	Wait( 0 );
	// changed from 
	// dtFinal = New Column( "TestName", 
	// to
	dtFinal << New Column( "TestName", character,
		// More efficient way to code the If()
		Formula(
			If(
				:Columns by Categories == "test", "test",
				:Columns by Categories == "[Rx] test1", "test1",
				:Columns by Categories == "[Rx] test2", "test2",
				:Columns by Categories == "[Rx] test3", "test3",
				:Columns by Categories == "[Tx] test1", "test1",
				:Columns by Categories == "[Tx] test2", "test2",
				:Columns by Categories == "[Tx] test3", "test3",
				If( :Columns by Categories == "test4",
					"test4"
				)
			)
		)
	);
	
// ------------------------ BEGIN FORMATING TABLE FOR FINAL REPORTING

// Says Scriptable[] but won't delete
// You had not used the proper syntax in the above step, so that dtFinal 
// was changed from a data table pointer to pointer to column "TestName"
	
	dtFinal << Delete Columns( {"N(Fail)", "% of Total(Fail)"} );

// Works Correctly
	// changed from 
	// dtFinal = New Column( "wafer_number",
	// to
	dtFinal << New Column( "wafer_number", character,
		<< Formula(
			LotListSQLString
		)
	);

// Says Scriptable[] but won't go to column and obviously doesn't move

	dtFinal << Go To( "wafer_number" );
	Wait ( 0.5 );
	dtFinal << move selected Columns( To First );
	dtFinal << clear Column selection;

// Works Correctly
	// Changed from
	// dtFinal = Column( "Mode" ) << Delete Formula;
	// to
	dtFinal:Mode << Delete Formula;
	// Changed from
	// dtFinal = Column( "TestName" ) << Delete Formula;
	// to
	dtFinal:TestName << Delete Formula;
	
// Says Scriptable[] but won't go to column and obviously doesn't move

	// With keeping dtFinal as a pointer to the data table this now works	
	dtFinal << Go To( :Mode );
	// Wait ( 1 ); // not necessary wait
	dtFinal << move selected Columns( after( "wafer_number" ) );
	dtFinal << Clear Column Selection;
	
// Says Scriptable[] but won't go to delete
	
	// With keeping dtFinal as a pointer to the data table this now works
	dtFinal << Delete Columns( :Columns by Categories);

// Says Scriptable[] but won't go to delete
	
	dtFinal << go to( :TestName );
	//Wait( 1 );
	// changed from
	// dtFinal << Move Selected Column( after( "name" ) );
	// to
	dtFinal << Move Selected Column( after( :name("N(Pass)" ) ) );
	dtFinal << clear Column selection;

// Works Correctly
	
	// This form will not work, once you save the table and reopen it
	// because the formula requires a variable named Lot
	//lot = "XYZ";
	
	//part = New Column( "part_number" );
	//part << Set Formula( lot );
	// here is a form that will work
	dtFinal << New Column( "part_number", character, set each value("XYZ" ) );

// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal << go to( :part_number );
	//Wait ( 1 );
	// There is not a column named "name", therefore 
	// changed
	// dtFinal << Move Selected Column( after( "name" ) );
	// to
	dtFinal << Move Selected Column( after( :name("N(Pass)" ) ) );
	dtFinal << clear Column selection;

// Works Correctly
	
	// This form will not work, once you save the table and reopen it
	// because the formula requires a variable named die
	//die = 334;
	
	//numdie = New Column( "NumDie" );
	//numdie << Set Formula( die );
	dtFinal << New Column( "NumDie", set each value(334) ); 

// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal<< go to( :NumDie );
	//Wait ( 1 );
	// There is no pointer called dtFinalYield
	// changed from
	// dtFinalYield<< move selected Columns( after( "part_number" ) );
	// dtFinalYield<< clear Column selection;
	// to
	dtFinal << move selected Columns( after( "part_number" ) );
	dtFinal << clear Column selection;
	
	
Jim

View solution in original post

5 REPLIES 5
gianpaolo
Level IV

Re: Trouble Manipulating Tabulated Tables

i run your script with your data without problem....

created tabulate report and related table.... and is also possible to modify such table....

 

can you explain better what kind of trouble you have

 

ciao

Gianpaolo

Gianpaolo Polsinelli
gzmorgan0
Super User (Alumni)

Re: Trouble Manipulating Tabulated Tables

Incorrect syntax created several name collisions:

dtFinal = tab << Make Into Data Table;
	
	Wait( 1 );
	
	dtFinal << set name( " Yield Report" );
	
	dtFinal = New Column( "Mode",

As written your script expects, dtFinal to be the table reference, yet the syntax dtFinal = New Column() is assigning the new column to reference dtFinal.  The syntax should be dtFinal << New Column( )  also at the end of your script you refer to dtFinalyield, there is no such table.

 

Also you should look up the syntax for JMP If() functions. You do not need to nest the the ifs:

        If (cond1, result1, cond2, result2, ...condk, result k, else);

Yngeinstn
Level IV

Re: Trouble Manipulating Tabulated Tables

The dtFinalYield is supposed to just be dtFinal.. When i attach scripts to this forum, i have to rename everything and I missed that one.. My apologies.

I see the issues with the '=' sign instead of the '<<' I am not sure why i was doing that..
txnelson
Super User

Re: Trouble Manipulating Tabulated Tables

Below is my review of your script......the issues seem to be not understanding the difference between when to use "=" and when to use "<<", and also you seem to be more careful, which sometimes relates to not totally understanding JSL.  So I strongly suggest that you read the Scripting Guide!

     Help==>Books==>Scripting Guide

Here is my annotated script

Names Default To Here(1);

dt = Current Data Table();

LotListSQLString = "Wafer_1";

	tab = dt  
		<< Tabulate(
		invisible,
			Show Control Panel( 0 ),
			Add Table(
				Column Table( 
					Category Table, 
					Statistics(
						N,
						Name( "% of Total" ) 
					) 
				),
				
				Row Table( 
					Columns by Categories( 
						:Name( "test" ),
						:Name( "[Rx] test1" ),
						:Name( "[Rx] test2" ),
						:Name( "[Rx] test3" ),
						:Name( "[Tx] test1" ),
						:Name( "[Tx] test2" ),
						:Name( "[Tx] test3" ),
						:Name( "test4" ),
						:Name( "Composite" )	
					 ) 
				 )
			)
		);
		
	dtFinal = tab << Make Into Data Table;
	
	Wait( 1 );
	
	dtFinal << set name( " Yield Report" );
	
	// changed from 
	// dtFinal = New Column( "Mode", 
	// to
	dtFinal << New Column( "Mode", character,
		// More efficient way to code the If()
		Formula(
			If(
				:Columns by Categories == "test", "-",
				:Columns by Categories == "[Rx] test1", "Rx",
				:Columns by Categories == "[Rx] test2", "Rx",
				:Columns by Categories == "[Rx] test3", "Rx",
				:Columns by Categories == "[Tx] test1", "Tx",
				:Columns by Categories == "[Tx] test2", "Tx",
				:Columns by Categories == "[Tx] test3", "Tx",
				:Columns by Categories == "test4", "-"
			)
		)
	);
	
	Wait( 0 );
	// changed from 
	// dtFinal = New Column( "TestName", 
	// to
	dtFinal << New Column( "TestName", character,
		// More efficient way to code the If()
		Formula(
			If(
				:Columns by Categories == "test", "test",
				:Columns by Categories == "[Rx] test1", "test1",
				:Columns by Categories == "[Rx] test2", "test2",
				:Columns by Categories == "[Rx] test3", "test3",
				:Columns by Categories == "[Tx] test1", "test1",
				:Columns by Categories == "[Tx] test2", "test2",
				:Columns by Categories == "[Tx] test3", "test3",
				If( :Columns by Categories == "test4",
					"test4"
				)
			)
		)
	);
	
// ------------------------ BEGIN FORMATING TABLE FOR FINAL REPORTING

// Says Scriptable[] but won't delete
// You had not used the proper syntax in the above step, so that dtFinal 
// was changed from a data table pointer to pointer to column "TestName"
	
	dtFinal << Delete Columns( {"N(Fail)", "% of Total(Fail)"} );

// Works Correctly
	// changed from 
	// dtFinal = New Column( "wafer_number",
	// to
	dtFinal << New Column( "wafer_number", character,
		<< Formula(
			LotListSQLString
		)
	);

// Says Scriptable[] but won't go to column and obviously doesn't move

	dtFinal << Go To( "wafer_number" );
	Wait ( 0.5 );
	dtFinal << move selected Columns( To First );
	dtFinal << clear Column selection;

// Works Correctly
	// Changed from
	// dtFinal = Column( "Mode" ) << Delete Formula;
	// to
	dtFinal:Mode << Delete Formula;
	// Changed from
	// dtFinal = Column( "TestName" ) << Delete Formula;
	// to
	dtFinal:TestName << Delete Formula;
	
// Says Scriptable[] but won't go to column and obviously doesn't move

	// With keeping dtFinal as a pointer to the data table this now works	
	dtFinal << Go To( :Mode );
	// Wait ( 1 ); // not necessary wait
	dtFinal << move selected Columns( after( "wafer_number" ) );
	dtFinal << Clear Column Selection;
	
// Says Scriptable[] but won't go to delete
	
	// With keeping dtFinal as a pointer to the data table this now works
	dtFinal << Delete Columns( :Columns by Categories);

// Says Scriptable[] but won't go to delete
	
	dtFinal << go to( :TestName );
	//Wait( 1 );
	// changed from
	// dtFinal << Move Selected Column( after( "name" ) );
	// to
	dtFinal << Move Selected Column( after( :name("N(Pass)" ) ) );
	dtFinal << clear Column selection;

// Works Correctly
	
	// This form will not work, once you save the table and reopen it
	// because the formula requires a variable named Lot
	//lot = "XYZ";
	
	//part = New Column( "part_number" );
	//part << Set Formula( lot );
	// here is a form that will work
	dtFinal << New Column( "part_number", character, set each value("XYZ" ) );

// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal << go to( :part_number );
	//Wait ( 1 );
	// There is not a column named "name", therefore 
	// changed
	// dtFinal << Move Selected Column( after( "name" ) );
	// to
	dtFinal << Move Selected Column( after( :name("N(Pass)" ) ) );
	dtFinal << clear Column selection;

// Works Correctly
	
	// This form will not work, once you save the table and reopen it
	// because the formula requires a variable named die
	//die = 334;
	
	//numdie = New Column( "NumDie" );
	//numdie << Set Formula( die );
	dtFinal << New Column( "NumDie", set each value(334) ); 

// Says Scriptable[] but won't go to column and obviously doesn't move
	
	dtFinal<< go to( :NumDie );
	//Wait ( 1 );
	// There is no pointer called dtFinalYield
	// changed from
	// dtFinalYield<< move selected Columns( after( "part_number" ) );
	// dtFinalYield<< clear Column selection;
	// to
	dtFinal << move selected Columns( after( "part_number" ) );
	dtFinal << clear Column selection;
	
	
Jim
Yngeinstn
Level IV

Re: Trouble Manipulating Tabulated Tables

Just getting the syntax is killing me.. Thank you for pointing that out.. Since i am still learning how to code in JSL, i most definately have both these formus, the scripting guide and the scripting index all open to search how to do things.. I missed that = to << ..