- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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..."
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 )
)}
)
)
);
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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().
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)
)
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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.
BatchID | Wafer |
X | A |
X | B |
X | C |
Y | D |
Y | E |
Y | F |
Z | G |
Z | H |
Z | I |
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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().
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)
)
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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
BatchID | Wafer |
QQQ1234 | ABC-123 |
YYY1234 | QWE-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!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Editing the Distribution Title by matching WaferID w/ By Statement
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Editing the Distribution Title by matching WaferID w/ By Statement
error message for "theLot"
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
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!