Here is a rework of you code, using a very powerful capability in JSL, Substitution. I commented out your UpperSpec_log reference line, since I didn't have that list available. However, Variability Chart Platform will automatically plot those spec limits, if you add them as Column Properties to your columns, before running the Variability Chart Platform. Once the limits are added as Column Properties, many of the platforms will allow for the displaying of the Spec Limits.
Here is my reworked code
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Semiconductor Capability.jmp" );
Try(dt:Wafer << Set Name( "wafernr" ));
Datalist_log = {NPN1, PNP1, NPN2}; //first I define the list with the tests I Need. It needs to be like this in the code.
imax = N Items( Datalist_log );
//Boxplots
For( i = 1, i <= imax, i++,
Eval(
Substitute(
Expr(
Variability Chart(
Y( __DataList__ ), //Loop cycling through the list putting the respective column on the Y axis
X( :wafernr ),
Max Iter( 100 ),
Conv Limit( 0.00000001 ),
Number Integration Abscissas( 128 ),
Number Function Evals( 65536 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 1 ),
Show Box Plots( 1 ),
SendToReport(
Dispatch(
{__VarChart__},
// This is how it looks when it works.
//But I need to replace the hard coded string with an element from
//the list defined above as a part of the Loop, for example:
//{"Variability Chart for " || Datalist_log[i]},
//This is my most promising attempt. But I have failed to understand how the concat works.
//If i manually change the argument to
//{"Variability Chart for XYSomethingElse"}, the outcome is the same, meaning that the
//formatting commands (lot plot, scientific axis etc.) that follow are all ignored.
"2",
ScaleBox,
{Scale( "Log" ), Format( "Scientific", 12 ), Min( 0.0000000001 ), Max( 0.000001 ), Inc( 1 ), Minor Ticks( 0 )//,
//Add Ref Line( UpperSpec_log[i], "Dotted", "Black", "USL", 2 )
}
),
Dispatch(
{__VarChart__},
"Variability Chart",
FrameBox,
{Frame Size( 600, 240 ), Marker Size( 1 ), DispatchSeg(
Box Plot Seg( 1 ),
{Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )}
), DispatchSeg( Box Plot Seg( 2 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 3 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 4 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 5 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 6 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 7 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 8 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 9 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 10 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 11 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 12 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 13 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 14 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 15 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 16 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 17 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 18 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 19 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 20 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 21 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 22 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 23 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 24 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} ),
DispatchSeg( Box Plot Seg( 25 ), {Box Type( "Outlier" ), Line Color( "Red" ), Line Width( 2 )} )}
),
Dispatch( {__VarChart__}, "", NomAxisBox, {Set Width( 573 ), Set Height( 21 )} ),
Dispatch( {__VarChart__}, "Varability Std Chart", FrameBox, {Frame Size( 559, 180 )} )
)
)
),
Expr( __DataList__ ), Parse( ":" || Char( DataList_Log[i] ) ),
Expr( __VarChart__ ), "Variability Chart for " || Char( DataList_Log[i] )
)
)
);
Jim