Hi John.
Thank you. I'm using JMP 15. These are the lines from log.
//Open Seahawk & TTVision Table
dt2= Open(
"\\domi8\Production Report\Manufacturing Yield Dashboard\AVI\AVIYield (Datasheet).xlsx",
Worksheets( {"Seahawk"} ),
Use for all sheets( 1 ),
Concatenate Worksheets( 1 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
Wait( 1);
dt2 << delete columns( [2]);
dt2 << Select Where(Is missing(:Machine Type) | Is missing(:Recipe) | is missing(:Device)) << Delete Rows;
dt2:Start Lot Time << Data Type( Numeric );
dt2:End Lot Time << Data Type( Numeric);
dt3= Open(
"\\domi8\Production Report\Manufacturing Yield Dashboard\AVI\AVIYield (Datasheet).xlsx",
Worksheets( {"TTVision"} ),
Use for all sheets( 1 ),
Concatenate Worksheets( 1 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
Wait( 1);
dt3 << delete columns( [2]);
dt3 << Select Where(Is missing(:Machine Type) | Is missing(:Recipe) | is missing(:Device)) << Delete Rows;
//Concatenation Seahawk & TTVision Table
dt4=Data Table( "Seahawk" ) << Concatenate(
Data Table( "TTVision" ),
Output Table( "AVIYield (Datasheet)" )
);
Close(dt2);
Close(dt3);
//Open Data3ITDeviceListTable
dt= Open(
"\\domi8\Production Report\Manufacturing Yield Dashboard\AVI\AVIYield (Datasheet).xlsx",
Worksheets( "Domi3_ITDevice" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
:DeviceName << Set Name("Device");
//VLOOKUP Table (dt=Domi3_ITDevice) to add matching device with (dt4=AVIYield Datasheet). Add new column name Package
dt4 << update (with (dt), by matching columns (dt4:Device==dt:Device), add columns from update table(:PackageFamily));
Close(dt);
//Clean-up data
//In Recipe, recode BDD0762 DBA-xKS_V4 with BDD0762 DBA-XKS_V4
//In Recipe, recode BDD0708_DWY_MKR_V3 with BDD0708_DWY_MK_V3
//In Recipe, replace recipe string which contain " " with "_"
Names Default To Here( 1 );
dt = Data Table( "AVIYield (Datasheet)" );
dt << Begin Data Update;
dt << Recode Column(
dt:Recipe,
{Map Value(
_rcOrig,
{"BDD0762 DBA-xKS_V4", "BDD0762 DBA-XKS_V4"},
Unmatched( _rcNow )
)},
Target Column( :Recipe ));
dt << End Data Update;
Names Default To Here( 1 );
dt = Data Table( "AVIYield (Datasheet)" );
dt << Begin Data Update;
dt << Recode Column(
dt:Recipe,
{Map Value(
_rcOrig,
{"BDD0708_DWY_MKR_V3", "BDD0708_DWY_MK_V3"},
Unmatched( _rcNow )
)},
Target Column( :Recipe ));
Names Default To Here( 1 );
dt = Data Table( "AVIYield (Datasheet)" );
dt << Begin Data Update;
dt << Recode Column(
dt:Recipe,
{Substitute( _rcNow, " ", "_" )},
Target Column( :Recipe ));
dt << End Data Update;
//Remove data with lot size <10,000 (not required for analysis)
Current Data Table() << Row Selection(
Select where( :Total Inspected Unit < 10000 ));
r = dt << Delete Rows;
Show( r );
//Remove data with lot number does not contain ".0" (not required for analysis)
Current Data Table() << Row Selection( Select where( !Contains( :Lot No, ".0" ) ) );
r = dt << Delete Rows;
Show( r );
//Sort to Ascending Start Lot Date (Numeric)
Names Default To Here( 1 );
dt = Data Table( "AVIYield (Datasheet)" );
dt << Sort( replace table, By( :End Lot Time), Order( Ascending));
//Change Date Format (Time m/d/y h:m:s)
:End Lot Time
<< Data Type( Numeric)
<< Format( "d/m/y h:m:s")
<< Modeling Type(continuous)
;
//set Label for Machine No, Lot No, Base Part (Device), Recipe
dt << set label columns( :Machine No, :Lot No, :Device, :Recipe );
//create group columns for Seahawk & TTV Defects
dt << group columns( "SeahawkDefects", :FBMissing Bond :: :SBBall Accuracy );
dt << group columns( "TTVDefects etc.", :Name( "NU-No Unit" ), 15 );
//open Process before AVI table
wait(1);
dt2 = Open(
"C:\Users\jmpuser2020c\Desktop\Manufacturing Yield Dashboard\AVI\ProcessBeforeAVIMatching\Process_History_LotNoListingBeforeAVI.xlsx",
Worksheets(
{"2ndWirebond", "Wirebond", "2ndGlueCuring", "4thDiebond",
"3rdDiebond", "2ndDiebond", "Diebond", "LM"}
),
Use for all sheets( 1 ),
Concatenate Worksheets( 1 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
wait(1);
//combine Mach No with Oven No into "Process Mach No"
dt2 << Combine Columns (
delimiter(","),
Columns(
:Mach No,
:Oven No
),
Column Name("Process Mach No")
);
//combine Oper Desc & Cur Oper into "Process Oper"
dt2 << Combine Columns (
delimiter(","),
Columns(
:Oper Desc,
:Cur Oper
),
Column Name("Process Oper")
);
//delete unused column
dt2 << Delete Columns ( :Oper Desc, :Cur Oper, :In Emp Name, :Out1Emp Name, :PCby, :In Qty, :Out Qty, :Yield, :Mach No, :Out2Emp Name, :In Temp, :Out Temp, :Out Emp Name, :Oven No, :Out3Emp Name, :Device );
//set Label for Lot No, Process Mach No, Process Oper
dt2 << set label columns( :Lot No, :Process Mach No, :Process Oper );
//Sort to Ascending Start Lot Date (Numeric)
Names Default To Here( 1 );
dt2 = Data Table( "Process_History_LotNoListingBeforeAVI" );
dt2 << Sort( replace table, By( :Out Time), Order( Ascending));
//join table AVI Yield Datasheet & ProcessHistory
Data Table( "Process_History_LotNoListingBeforeAVI" ) <<
Join(
With( Data Table( "AVIYield (Datasheet)" ) ),
SelectWith(
:Machine Type,
:Machine No,
:Lot No,
:Device,
:Recipe,
:Start Lot Time,
:End Lot Time,
:Total Inspected Unit,
:Total Dummy Unit,
:Total Reject Unit,
:Overall Yield Include dummy,
:Yield Exclude dummy,
:FBMissing Bond,
:FBAccuracy,
:FBBroken Wire,
:FBBall Size,
:SBMissing Bond,
:SBPlacement,
:SBBroken Wire,
:SBWedge Size,
:WTDeviation,
:WTBroken Wire,
:Die Shift,
:Die Surface,
:Die Rotate,
:Die Epoxy Insuff,
:Die Expoxy Excess,
:Die Substrate,
:SBBall Missing Bond,
:SBBall Broken Wire,
:SBBall Accuracy,
:Name( "NU-No Unit" ),
:Name( "DU-Destroy Unit" ),
:Name( "ID-Incomplete Die" ),
:Name( "DED-Die Edge Defect" ),
:Name( "DP-Die Placement" ),
:Name( "EG-Excessive Glue" ),
:Name( "IG-Insufficient Glue" ),
:Name( "DO-Die Orientation" ),
:Name( "NWB-No Wire Bond" ),
:Name( "MW-Multiple Wire" ),
:Name( "BP-Ball Placement" ),
:Name( "DW-Distorted Wire" ),
:Name( "IW-Incomplete Wire" ),
:Name( "FM-Foreign Material" ),
:Name( "MP-Missing Phosphor" ),
:PackageFamily
),
Select( :Process Oper, :Process Mach No, :In Time, :Out Time ),
By Matching Columns( :Lot No = :Lot No ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve main table order( 1 ),
Output Table( "JoinT" )
);
close (dt2);
close (dt);
//create Graph Builder
Names Default To Here( 1 );
dt3 = Data Table( "JoinT" );
gb = dt3 << Graph Builder(
Size( 605, 3451 ),
Show Control Panel( 0 ),
Lock Scales( 1 ),
Link Page Axes( "X and Y" ),
Variables(
X( :In Time ),
Y( :Yield Exclude dummy ),
Page( :Process Oper ),
Overlay( :Process Mach No )
),
Elements( Points( X, Y, Legend( 9 ) ) ),
Local Data Filter(
Add Filter(
columns(
Transform Column(
"Concatenate[Process Oper]",
Character,
Formula( Concat( :Process Oper ) )
),
:Machine Type,
:PackageFamily,
:Machine No,
:Recipe,
:Process Mach No
),
Display(
Transform Column(
"Concatenate[Process Oper]",
Character,
Formula( Concat( :Process Oper ) )
),
"Single Category Display"
),
Display( :PackageFamily, "Single Category Display" ),
Display(
:Machine No,
"Single Category Display",
Find( Set Text( "" ) )
),
Display( :Recipe, "Single Category Display", Find( Set Text( "" ) ) ),
Display(
:Process Mach No,
"Single Category Display",
Find( Set Text( "" ) )
),
Order By Count(
Transform Column(
"Concatenate[Process Oper]",
Character,
Formula( Concat( :Process Oper ) )
)
)
)
),
SendToReport(
Dispatch(
{},
"In Time",
ScaleBox,
{Format( "d/m/y", 10 ), Min( 3723595037 ), Max( 3730267481.28 ),
Interval( "Day" ), Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 2 ),
{Format( "d/m/y", 10 ), Min( 3723840000 ), Max( 3730079028.96 ),
Interval( "Day" ), Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 3 ),
{Format( "d/m/y", 10 ), Min( 3723796743.08 ), Max( 3725242379.92 ),
Interval( "Day" ), Inc( 2 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 4 ),
{Format( "d/m/y", 10 ), Min( 3723840000 ), Max( 3730002981.72 ),
Interval( "Day" ), Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 5 ),
{Format( "d/m/y", 10 ), Min( 3723840000 ), Max( 3730063004.8 ),
Interval( "Day" ), Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 6 ),
{Format( "d/m/y", 10 ), Min( 3723840000 ), Max( 3730200253.12 ),
Interval( "Day" ), Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 7 ),
{Format( "d/m/y", 10 ), Min( 3723840000 ), Max( 3730020656.4 ),
Interval( "Day" ), Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"In Time",
ScaleBox( 8 ),
{Format( "d/m/y", 10 ), Min( 3723595299.52 ), Max( 3730267481.28 ),
Interval( "Day" ), Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox,
{Format( "Fixed Dec", 15, 2 ), Min( 0 ), Max( 105 ), Inc( 10 ),
Minor Ticks( 1 ), Add Ref Line(
98,
"Solid",
"Medium Dark Red",
"TargetYield=98.00%",
2
)}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 2 ),
{Format( "Fixed Dec", 15, 0 ), Min( 13.63 ), Max( 102.111427606729 ),
Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 3 ),
{Format( "Fixed Dec", 15, 1 ), Min( 97.970970312416 ),
Max( 99.8921310582744 ), Inc( 0.5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 4 ),
{Format( "Fixed Dec", 15, 1 ), Min( 95.8240945419339 ),
Max( 100.016768985686 ), Inc( 0.5 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 5 ),
{Format( "Fixed Dec", 15, 1 ), Min( 95.8220034130674 ),
Max( 100.057545297737 ), Inc( 0.5 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 6 ),
{Format( "Fixed Dec", 15, 0 ), Min( 4.52872 ), Max( 103.59928 ),
Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 7 ),
{Format( "Fixed Dec", 15, 0 ), Min( 43.0752 ), Max( 101.7948 ),
Inc( 10 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Yield Exclude dummy",
ScaleBox( 8 ),
{Format( "Fixed Dec", 15, 0 ), Min( 4.52792 ), Max( 103.62008 ),
Inc( 10 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( "AVI Yield Exclude dummy vs. In Time (Process before AVI)" )}
)
)
);
gb << Bring Window to Front;
//Get the container of the platform
tr = gb << Top Report;
tr << Save Interactive HTML("C:\Users\jmpuser2020c\Desktop\Manufacturing Yield Dashboard\AVI\AVIAutoReport\ProcessBeforeMCAVIYield.html");
/*Close(gb);
Close(dt3);
//set no save for auto taskscheduler
exit(nosave);
/*:
C:\Users\jmpuser2020c\Desktop\Seahawk.jmpC:\Users\jmpuser2020c\Desktop\TTVision.jmpC:\Users\jmpuser2020c\Desktop\Domi3_ITDevice.jmp
r = 555;
r = 0;C:\Users\jmpuser2020c\Desktop\Process_History_LotNoListingBeforeAVI.jmpC:\Users\jmpuser2020c\Desktop\AVIYield (Datasheet).jmp
Interactive HTML: Column "Process Mach No" has an unsupported modeling type.
Interactive HTML: Values excluded by the data filter are not exported.
Interactive HTML: Controls are not interactive.
Interactive HTML: Column "Process Mach No" has an unsupported modeling type.
Interactive HTML: Column "Process Oper" has an unsupported modeling type.
Created Web Page.