cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.
Choose Language Hide Translation Bar
View Original Published Thread

Maintain the correct zones

ConvergentWhale
Level I

On the control charts, I want to exclude the zones over the average when there is no lower limit. 
Here is my script : 

        // Loop across the split data table and read the values for that column from the dt_limits_copy data table. Populate the Spec Limits and Control Limits
For(i = 1, i <= N Cols(dtsplitcopy), i++, 

	limrow = Try((pIDlimits_copy << get rows where(pIDlimits_copy:labelny == cols[i]))[1], .);

	If(Is Missing(limRow) == 0,
		specs = {LSL(.), USL(.), Target(.), Show Limits(1)};

		specs["LSL"] = pIDlimits_copy:Lower Limit Value[limrow];
		specs["USL"] = pIDlimits_copy:Upper Limit value[limrow];
                   
		Column(dtsplitcopy, Char(cols[i])) << set property("spec limits", Eval(specs));

		controllimits = {Individual Measurement(Avg(a), LCL(b), UCL(c))};
                   
                    // If lower limit is missing it is set to mean - (UCL - mean) = 2*mean - UCL as this will fix issues with zones otherwise being wrong if set to missing
		Substitute Into(controllimits,
			Expr(b),
				If(Is Missing(pIDlimits_copy:Lower_Control_Limit[limrow]),
					2 * pIDlimits_copy:Mean_Plot[limrow] - pIDlimits_copy:Upper_Control_Limit[limrow],
					pIDlimits_copy:Lower_Control_Limit[limrow]
				)
		); // this is done to get correct zones
		Substitute Into(controllimits, Expr(c), pIDlimits_copy:Upper_Control_Limit[limrow]);
		Substitute Into(controllimits, Expr(a), pIDlimits_copy:Mean_Plot[limrow]);
                   
		Column(dtsplitcopy, Char(cols[i])) << set property("control limits", Eval(controllimits));
                    // These notes are added so that later we can choose to hide the "artificial lower limits" which is only included for the zones to be correct
		Column(dtsplitcopy, Char(cols[i])) << set property(
			"notes",
			If(Is Missing(pIDlimits_copy:Lower_Control_Limit[limrow]),
				"Only one limit",
				"Two limits"
			)
		);
	);
);
       
dtsplitcopy << sort(by(Date), Replace Table);

n_vars = N Items(cols);
        // Create window for a control chart for all parameters of a given product from a given site
NW = New Window(sitename || " " || prod_ID || " Report",
	For(v = 38, v <= n_vars, v += 1, //changed from column 37 to 38 to avoid 'Date' being printet as well.
               
		tmp = :column(v) << get property("notes");
               
		Control Chart Builder(
			Show Two Shewhart Charts(0),
			Show Control Panel(0),
			Include Missing Categories(0),
			Name("AIAG (Ppk) Labeling")(1),
			Variables(Y(:Column(v))),
			Chart(
				Points(Statistic("Individual")),
				Limits(Show Lower Limit(tmp == "Two limits"), Sigma("Moving Range"), Zones(1)),
				Warnings(Test 1(0), Test 5(1), Test Beyond Limits(1))
			),

		);
	);
           
	vlb = V List Box(ob = Outline Box("Cpk estimates and print of data"));
);


What should I add to my script ? 
2 REPLIES 2


Re: Maintain the correct zones

*below the average not over the average . 
example : 

ConvergentWhale_0-1718611938662.png

Here you can see that there is no LCL, thus i want to remove the zones below the green line, but i want to keep the zones above the green line. Also, when i have points on the A zone below the average, I don't want to have alerts because there is no LCL. Does someone knows how to do it? 

 

jthi
Super User


Re: Maintain the correct zones

I think this would require to you script those zones and shaded zones (it might be easier to do this in Graph Builder rather than in Control Chart Builder)

-Jarmo