Besides commonly used quality capability performance indices (Cp, Cpk, Pp, Ppk), my company also uses K-index. K=|Xbar-T|/(min(USL-T, T-LSL)). Basically it is similar to Ppk, except that it gives a non-statistical manager a quick glance of process mean deviation from the target in percent. Some prefer not use the absolute numerator. Then +/- sign indicate if process is under or over spec target,
Once I enter the LSL/USL in column properties or capability under distribution platform, I calculate K manually, which is time-consuming, especially if I have many specs. Can I program this formula in the JSL? I am fairly new to JSL and I want to learn how to do it.
You can do what you are talking about. Here is a script that illustrates it.using the Semiconductor Capability sample data table:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dis = dt << Distribution( Continuous Distribution( Column( :NPN1 ) ) );
// Calculate K
k = ((Report( dis )["Summary Statistics"][1][1][2] << get)[1] - (dt:NPN1 << get property( "Spec Limits" ))["Target"]) /
Min(
((dt:NPN1 << get property( "Spec Limits" ))["USL"]) - (dt:NPN1 << get property( "Spec Limits" ))["Target"],
(dt:NPN1 << get property( "Spec Limits" ))["Target"] - (dt:NPN1 << get property( "Spec Limits" ))["LSL"]
);
// Put into the display
// Place the k value into a list
klist = {};
Insert Into( klist, k );
ob = Outline Box( "K Value", Table Box( Number Col Box( "K Value", klist ) ) );
Report( dis )["Capability Analysis"] << prepend( ob );
Thank you so much Jim. That looks awesome! I think this is what I need. Can you please also advise me what is the best way to keep this script as "handy tool" in order to apply for different data tables.
Thank you,
Here is a script that will generate the Distribution output for all columns in a data table that has LSL, USL, and Target
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
columnList = dt << get column names( numeric, string );
NW = New Window( "Distributions", HLB = H List Box() );
For( i = 1, i <= N Items( columnList ), i++,
If(
Is Empty( Try( (Column( dt, columnList[i] ) << get property( "Spec Limits" ))["USL"] ) ) == 0 & Is Empty(
Try( (Column( dt, columnList[i] ) << get property( "Spec Limits" ))["LSL"] )
) == 0 & Is Empty( Try( (Column( dt, columnList[i] ) << get property( "Spec Limits" ))["Target"] ) ) == 0,
dis = Distribution( Continuous Distribution( Column( column(dt,columnList[i]) ) ) );
// Calculate K
k = ((Report( dis )["Summary Statistics"][1][1][2] << get)[1] - (Column( dt, columnList[i] ) << get property( "Spec Limits" ))["Target"]) /
Min(
((Column( dt, columnList[i] ) << get property( "Spec Limits" ))["USL"]) - (Column( dt, columnList[i] ) << get property( "Spec Limits" ))[
"Target"],
(Column( dt, columnList[i] ) << get property( "Spec Limits" ))["Target"] - (Column( dt, columnList[i] ) << get property( "Spec Limits" ))
["LSL"]
);
// Put into the display
// Place the k value into a list
klist = {};
Insert Into( klist, k );
ob = Outline Box( "K Value", Table Box( Number Col Box( "K Value", klist ) ) );
Report( dis )["Capability Analysis"] << prepend( ob );
HLB << append( Report(dis) );
dis << close window;
)
);