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

Editing the Distribution Title by matching WaferID w/ By Statement

Hello,

 

I would like to edit the title of my distribution graphs to be a bit more descriptive and easier to match up with another graph I created. I would like the title of each graph to be "Wafer = XYZ..., BatchID = ABC..." 

saneal_0-1625238262471.png

 

The code I created below lets me edit the title, however, it unsurprisingly lists all the batchids that were listed in the associative array I made prior. (this array just lists all the batchIDs in a column of a table I have). What I would like to do is match the Wafer to the BatchID and display it in the title of each graph with a By statement. Is there anyway to do this? Thank you!

//DISTRIBUTION PLOT
batchids = Associative Array( BatchIDs:BatchID );
RawData << Distribution(
	Stack( 1 ),
	Automatic Recalc( 1 ),
	Continuous Distribution(
		Column( :col1 ),
		Horizontal Layout( 1 ),
		Vertical( 0 )
	),
	Local Data Filter( 
	Close Outline( 1 ),
	Add Filter( columns( :FailDie ), Where( :FailDie == 0 ) ) ),
	By( :Wafer ),
	SendToReport(
		Dispatch(
			{},
			"Distributions Wafer=XYZ",
			OutlineBox,
			{Set Title(
				"Distributions Wafer=XYZ, Batch ID = " || Char( batchids << Get Keys )
			)}
		)
	)
);
1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Editing the Distribution Title by matching WaferID w/ By Statement

It is a simple matter to strip off the wafer value from the Outline Box() for the Distribution, and then to do a lookup from the lookup data table and get the BatchID, or in the case of my example, to get the Lot_id, and then to add it to the title of the Outline Box().

txnelson_0-1625275428463.png

Names Default To Here( 1 );

dt = Current Data Table();
batchids = Associative Array( dt:lot_id );

dtlookup =New Table( "Lookup",
	Add Rows( 24 ),
	New Column(
		["en" => "wafer", "ja" => "ウエハー", "x-id" => "S_wafer_Col", "zh-CN" => "晶片"],
		Numeric( 1 ),
		"Nominal",
		Set Values(
			[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
			21, 22, 23, 24]
		),
		Lock( 1 )
	),
	New Column( "lot_id",
		Character,
		"Nominal",
		Set Values(
			{"lot01", "lot02", "lot03", "lot04", "lot05", "lot06", "lot07", "lot08",
			"lot09", "lot10", "lot11", "lot12", "lot13", "lot01", "lot02", "lot03",
			"lot04", "lot05", "lot06", "lot07", "lot08", "lot09", "lot10", "lot11"}
		)
	)
);

Dis = dt << Distribution(
	Stack( 1 ),
	Automatic Recalc( 1 ),
	Continuous Distribution(
		Column( :npn1 ),
		Horizontal Layout( 1 ),
		Vertical( 0 )
	),
	Local Data Filter(
		Close Outline( 1 ),
		Add Filter( columns( :site ), Where( :site == 1 ) )
	),
	By( :Wafer )
);
For( i = 1, i <= N Items( Dis ), i++,
	theWafer = num(word(-1,Report( dis[i] )[Outline Box( 1 )] << get title,"="));
	thelot = dtLookup:lot_id[(dtLookup << get rows where(:wafer == theWafer))[1]];
	Report( dis[i] )[Outline Box( 1 )] <<
	Set title(
		Report( dis[i] )[Outline Box( 1 )] << get title || " Lot="
		 || Char(thelot)
	)
);
Jim

View solution in original post

10 REPLIES 10
txnelson
Super User

Re: Editing the Distribution Title by matching WaferID w/ By Statement

I would take the resetting of the title outside of the initial code to generate the distributions, and change the titles after the distribution report is generated

txnelson_0-1625241894314.png

Here is an example based upon your script, but modified to the sample data

Names Default To Here( 1 );

dt = Current Data Table();
batchids = Associative Array( dt:lot_id );

Dis = dt << Distribution(
	Stack( 1 ),
	Automatic Recalc( 1 ),
	Continuous Distribution(
		Column( :npn1 ),
		Horizontal Layout( 1 ),
		Vertical( 0 )
	),
	Local Data Filter(
		Close Outline( 1 ),
		Add Filter( columns( :site ), Where( :site == 1 ) )
	),
	By( :Wafer )
);
For( i = 1, i <= N Items( Dis ), i++,
	Report( dis[i] )[Outline Box( 1 )] <<
	Set title(
		Report( dis[i] )[Outline Box( 1 )] << get title || " Lots="
		 || Char( batchids << get keys )
	)
);

Note: I manually closed the Process Capability sections of the output for a better picture

 

Jim
saneal
Level III

Re: Editing the Distribution Title by matching WaferID w/ By Statement

Hello txnelson,

 

Thank you again for a quick reply. This is getting closer to what I want except for each Wafer only 1 BatchID should be displayed, not all of them. Perhaps looking at an example table will make more sense. 

 

I want the titles of my distribution graphs to be "Distribution Wafer = A, BatchID = X" and "Distribution Wafer = B, BatchID = X" etc. However, I am not quite understanding the means at which I can be sure I am matching the Wafer to the correct BatchID. (or how to match them at all for that matter) 

Note: I have a table which does match each Wafer to its BatchID already available.

BatchIDWafer
XA
XB
XC
YD

Y

E
YF
ZG
ZH
ZI

 

Another side question I had was: for the code you just sent, it looks like it updates all the titles of my graphs except my first one in the By statement. Do you know common reasons why this could occur? I have seen this on more than one occasion. 

txnelson
Super User

Re: Editing the Distribution Title by matching WaferID w/ By Statement

It is a simple matter to strip off the wafer value from the Outline Box() for the Distribution, and then to do a lookup from the lookup data table and get the BatchID, or in the case of my example, to get the Lot_id, and then to add it to the title of the Outline Box().

txnelson_0-1625275428463.png

Names Default To Here( 1 );

dt = Current Data Table();
batchids = Associative Array( dt:lot_id );

dtlookup =New Table( "Lookup",
	Add Rows( 24 ),
	New Column(
		["en" => "wafer", "ja" => "ウエハー", "x-id" => "S_wafer_Col", "zh-CN" => "晶片"],
		Numeric( 1 ),
		"Nominal",
		Set Values(
			[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
			21, 22, 23, 24]
		),
		Lock( 1 )
	),
	New Column( "lot_id",
		Character,
		"Nominal",
		Set Values(
			{"lot01", "lot02", "lot03", "lot04", "lot05", "lot06", "lot07", "lot08",
			"lot09", "lot10", "lot11", "lot12", "lot13", "lot01", "lot02", "lot03",
			"lot04", "lot05", "lot06", "lot07", "lot08", "lot09", "lot10", "lot11"}
		)
	)
);

Dis = dt << Distribution(
	Stack( 1 ),
	Automatic Recalc( 1 ),
	Continuous Distribution(
		Column( :npn1 ),
		Horizontal Layout( 1 ),
		Vertical( 0 )
	),
	Local Data Filter(
		Close Outline( 1 ),
		Add Filter( columns( :site ), Where( :site == 1 ) )
	),
	By( :Wafer )
);
For( i = 1, i <= N Items( Dis ), i++,
	theWafer = num(word(-1,Report( dis[i] )[Outline Box( 1 )] << get title,"="));
	thelot = dtLookup:lot_id[(dtLookup << get rows where(:wafer == theWafer))[1]];
	Report( dis[i] )[Outline Box( 1 )] <<
	Set title(
		Report( dis[i] )[Outline Box( 1 )] << get title || " Lot="
		 || Char(thelot)
	)
);
Jim
saneal
Level III

Re: Editing the Distribution Title by matching WaferID w/ By Statement

Hi txnelson! Thank you again for a speedy response and awesome solution.

 

I am still having trouble with my look up table. It seems "theWafer" is being found correctly, however when I run it in debugger "theLot" is not populating. Have you had any issues with this? Attached is my exact code. My headers look like "Distributions Wafer = ABC123, BatchID = ."

 

BatchIDs = lookup table for reference

BatchIDWafer
QQQ1234ABC-123
YYY1234QWE-456

 

For( i = 1, i <= N Items( VthNew ), i++,
	theWafer = char(word(-1,Report( VthNew[i] )[Outline Box( 1 )] << get title,"="));
	theLot = BatchIDs:BatchID[(BatchIDs << get rows where(:Wafer == theWafer))[1]];
	Report( VthNew[i] )[Outline Box( 1 )] <<
	Set title(
		Report( VthNew[i] )[Outline Box( 1 )] << get title || " BatchID =" || Char(theLot)
	)
);

Thanks for the help!

txnelson
Super User

Re: Editing the Distribution Title by matching WaferID w/ By Statement

Does the example that I provided in my last response work for you? That needs to be the starting point.
Jim
saneal
Level III

Re: Editing the Distribution Title by matching WaferID w/ By Statement

In short no. I cannot get it to work with the table that I need it to. From what I can tell though it does make sense and should work. The error I sent in my last message (sorry didn't see you responded) is what keeps showing up. The only thing I haven't quite made sense of is the [1] at the end of this line:

 

theLot = AllTheBatchIDs:BatchID[(AllTheBatchIDs << get rows where( :Wafer == theWafer ))[1]];

 

what does it do? Any suggestions?

saneal
Level III

Re: Editing the Distribution Title by matching WaferID w/ By Statement

invalid subscript (must be number or list of numbers){1} in access or evaluation of....
error message for "theLot"
txnelson
Super User

Re: Editing the Distribution Title by matching WaferID w/ By Statement

My error on my sample script.  See below to use the sample data table I was using.

What version of JMP are you running?

Iin my example program that I provided, change the line

dt = current data table();

to

dt = open("$sample_data/semiconductor capability.jmp");

and then run the script.  It should work without error.

Jim
saneal
Level III

Re: Editing the Distribution Title by matching WaferID w/ By Statement

I am running JMP 14.

 

Strangely enough the script runs correctly when I remove the [1] from this line of code. Leaving all else the same.

thelot = dtLookup:lot_id[(dtLookup << get rows where(:wafer == theWafer))[1]];

Changed to be: 

thelot = dtLookup:lot_id[(dtLookup << get rows where(:wafer == theWafer))];

Thanks again for your help!