If you want to replicate the Minitab report form, here is a very ruff, hardcoded version. It could be quite easily be put into a generic format and added as a JMP Addin. But I will leave that to your efforts
This is using only JSL, taking the objects from the output I previously provided, and then reformatting into the Minitab form. It needs a bunch of cleanup, and genericizing.
Here is the first pass at the code
Names Default To Here( 1 );
dt = Current Data Table();
dis = dt << Distribution( invisible,
SendToByGroup( {:Before After == "Hole - Before"} ),
Continuous Distribution( Column( :Measurement ), Process Capability( Use Column Property Specs ) ),
By( :Before After ),
Group Options( Layout( "Horizontal List" ) ),
SendToByGroup(
{:Before After == "Hole - Before"},
SendToReport(
Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Nonconformance"},
"Observed PPM", NumberColBox,
{Visibility( "Visible" )}
)
)
),
SendToByGroup(
{:Before After == "Hole - After"},
SendToReport(
Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Histogram"},
"Process Capability Analysis Histogram", FrameBox,
{DispatchSeg( CustomStreamSeg( 1 ), {Font} )}
),
Dispatch( {"Measurement", "Process Capability", "Measurement Capability", "Nonconformance"},
"Observed PPM", NumberColBox,
{Visibility( "Visible" )}
)
)
)
);
// Build the report
// Set the Histograms to the same axis
theMin = Min(
Report( Dis[1] )["Histogram", AxisBox( 1 )] << get min,
Report( Dis[2] )["Histogram", AxisBox( 1 )] << get min
);
theMax = Max(
Report( Dis[1] )["Histogram", AxisBox( 1 )] << get max,
Report( Dis[2] )["Histogram", AxisBox( 1 )] << get max
);
Report( Dis[1] )["Histogram", AxisBox( 1 )] << Min( theMin );
Report( Dis[1] )["Histogram", AxisBox( 1 )] << Max( theMax );
Report( Dis[2] )["Histogram", AxisBox( 1 )] << Min( theMin );
Report( Dis[2] )["Histogram", AxisBox( 1 )] << Max( theMax );
Summarize( dt, baGroups = by( :Before After ) );
nw = New Window( "Report",
Outline Box( "Before/After Capability Comparison for " || baGroups[1] || " vs. " || baGroups[2],
V List Box(
H List Box(
Text Box( "Before: " || baGroups[1] ),
Spacer Box( size( 200, 0 ) ),
Text Box( "Process Performance Report" )
),
Text Box( "After: " || baGroups[2] )
),
Spacer Box( size( 0, 5 ) ),
Lineup Box( N Col( 2 ),
Outline Box( "Capability Histogram",
lub1 = Lineup Box( N Col( 1 ),
H List Box( Spacer Box( size( 60, 0 ) ), Text Box( "Are the data inside the limits?" ) )
)
),
V List Box(
obPC = Outline Box( "Process Characterization" ),
Spacer Box( size( 0, 15 ) ),
obCS = Outline Box( "Capability Statistics" )
)
)
)
);
lub1 << Append( Report( Dis[1] )["Histogram", framebox( 1 )] );
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Text Box( " Before" )
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Report( Dis[1] )["Histogram", framebox( 2 )]
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Text Box( " After" )
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Report( Dis[2] )["Histogram", framebox( 2 )]
)
);
lub1 << Append(
Border Box( top( 0 ), bottom( 0 ), Left( 0 ), Right( 0 ), sides( 15 ),
Report( Dis[1] )["Histogram", axisbox( 1 )]
)
);
// Build Process Characterization table
beforePCList = Report( Dis[1] )["Process Summary", Number Col Box( 1 )] << get;
Remove From( beforePCList, 1, 2 );
Remove From( beforePCList, 5, 1 );
Insert Into( beforePCList, 1, 2 );
afterPCList = Report( Dis[2] )["Process Summary", Number Col Box( 1 )] << get;
Remove From( afterPCList, 1, 2 );
Remove From( afterPCList, 5, 1 );
Insert Into( afterPCList, 1, 2 );
changeList = {., .};
Insert Into( changeList, beforePCList[3] - afterPCList[3] );
Insert Into( changeList, beforePCList[4] - afterPCList[4] );
Insert Into( changeList, beforePCList[5] - afterPCList[5] );
obPC << append(
Table Box(
String Col Box( "", {"Total N", "Subgroup size", "Mean", "STDev(within)", "StDev(overall)"} ),
Number Col Box( "Before", beforePCList ),
Number Col Box( "After", afterPCList ),
Number Col Box( "Change", changeList )
)
);
beforeCSList = {.};
Insert Into( beforeCSList, (Report( Dis[1] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( beforeCSList, (Report( Dis[1] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 1 )] << get)[3] );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 3 )] << get)[3] );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 4 )] << get)[3] );
Insert Into( beforeCSList, beforeCSList[6] * 1000000 );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Within Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( beforeCSList, (Report( Dis[1] )["Within Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( beforeCSList, . );
Insert Into( beforeCSList, (Report( Dis[1] )["Nonconformance", Number Col Box( 2 )] << get)[3] );
Insert Into( beforeCSList, Round( beforeCSList[13] * 1000000, 0 ) );
afterCSList = {.};
Insert Into( afterCSList, (Report( Dis[2] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Overall Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 1 )] << get)[3] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 3 )] << get)[3] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 4 )] << get)[3] );
Insert Into( afterCSLIST, afterCSLIST[6] * 1000000 );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Within Sigma Capability", Number Col Box( 1 )] << get)[4] );
Insert Into( afterCSLIST, (Report( Dis[2] )["Within Sigma Capability", Number Col Box( 1 )] << get)[1] );
Insert Into( afterCSLIST, . );
Insert Into( afterCSLIST, (Report( Dis[2] )["Nonconformance", Number Col Box( 2 )] << get)[3] );
Insert Into( afterCSLIST, Round( afterCSLIST[13] * 1000000, 0 ) );
change = Matrix( beforeCSList ) - Matrix( afterCSList );
obcs << append(
Table Box(
String Col Box( "",
{"Actual (overall)", " Pp", " Ppk", " Z Bench", " % Out of spec (obs)",
" % Out of spec (exp)", " PPM (DPMO) (obs)", " PPM (DPMO) (exp)", "Potential (within)",
" Cp", " Cpk", " Z Bench", " % Out of spec (exp)", " PM (DPMO) (exp)"}
),
Number Col Box( "Before", beforeCSList ),
Number Col Box( "After", afterCSList ),
Number Col Box( "Change", change )
)
);
dis << close window;
Jim