Choose Language Hide Translation Bar
Creating a phase control chart with historical limits for each phase

In my blog post "4 ways to use fixed/baseline (historical) control limits in Control Chart Builder", I discussed four different methods of entering historical control limits. In this particular blog post, I will specifically discuss setting historical limits for a control chart when there is a phase variable involved.

The column property, set control limits, and excluded row state methods will not work in this scenario because JMP only allows one set of control limits to be defined for the entire chart using these methods. The only method that works for a phase control chart in which you want different limits for each phase is the get limits method. This blog post goes into detail about the get limits method with respect to a phase control chart.


In my blog post "Generating control limits using Control Chart Builder," I introduced a printing process. For the purposes of this blog post, the printing company wishes to reduce the variability of the force needed to break the bond between paper and the book spine. They want to do this for each of three different factories. A new process is decided upon based on a designed experiment. Data is gathered from the new process. The goal is to plot the new data on a control chart with historical limits from the old process. This way, the printing company can compare the new process to the old process limits. 

Each factory has different machines, different operators, and is also located in different countries; therefore, each factory has a unique set of historical limits and information. Historical control limits were calculated with old data (before the process change). This phase control chart can be seen below.

Figure 1: Phase control chart with historical dataFigure 1: Phase control chart with historical data

Limits Table

To use the get limits method, we must have a limits data table. Three columns are needed in this limits table:

  1. A _LimitsKey column, which defines the statistic.
  2. A column with the same name as the process variable that contains the value of the statistic listed in the _LimitsKey column.
  3. A column with the same name as the phase variable that contains identifying information about which phase the statistic applies to.

JMP 13.1 and above will create this table for you if you click on the red triangle next to Control Chart Builder and choose Save Limits -> in New Table. For versions of the software prior to JMP 13.1, you can easily create this table yourself from the Limit Summaries table of a Control Chart Builder report.  To create this table, right-click in the Force Limit Summaries table shown in Figure 1 and choose Make into Data Table.

Figure 2: Force Limits Summary tableFigure 2: Force Limits Summary table

You will need to perform some data table manipulations to get this table in the proper format.  Choose Tables->Stack. Select LCL, Avg, and UCL and click Stack Columns. In the box next to Output table name, type Force Limits. Change the Stacked Data Column name to Force.

Figure 3: Stack dialogFigure 3: Stack dialog

Click OK. We need to create the _LimitsKey column. JMP is looking for _LCL, _Avg, and _UCL rather than LCL, Avg, and UCL. For the dispersion chart, JMP is looking for _LCLR, _AvgR, and _UCLR.  We can do this using a formula. In the newly created Phase Limits Table, select Cols->New Column.  Name the Column _LimitsKey. Click Column Properties and select Formula. Enter the following formula.

Figure 4: Formula for the _LimitsKey columnFigure 4: Formula for the _LimitsKey column

Click OK.

Figure 5: New Column dialogFigure 5: New Column dialog

Click OK. Your new limits table should look like the following.

Figure 6: Force limits data tableFigure 6: Force limits data table

Phase control chart with historical limits

A change has been made in the process that the printing company hopes will reduce the variability of the force needed to break the bond between the pages and the spine of the book. We have a new data table that contains 70 rows of data that were recorded after this change was made. We would like to use the historical limits on the new graph so that we can see how the new data (after the process change) compares with our historical information (before the process change).

Figure 7: Data from new processFigure 7: Data from new process

To create the control chart, go to Analyze->Quality and Process->Control Chart Builder. Drag Site to the phase role. Drag Force to the Y role. Drag run to the x-axis.

Figure 8: Force control chart with new dataFigure 8: Force control chart with new data

To apply your historical limits to this graph, click on the red triangle next to Control Chart Builder and choose Get Limits. Pick the Force table that you created in Figure 6.

Figure 9: Force control chart with historical limitsFigure 9: Force control chart with historical limits


None of the points fall outside of the control limits for either the location or dispersion chart. The goal was to reduce variability. Looking at the moving range chart, we see that most points fall below the average line. Especially for sites 1 and 2, it is clear that the variability of force needed to break the bond between pages and the book spine has been decreased. Site 3 is not as obvious as sites 1 and 2. It appears that the variability may have been reduced some. However, it is unclear if this is a significant change or not. The improvements to the printing process have succeeded in reducing the variability.


JMP Software: Statistical Process Control Course Notes

Article Labels

    There are no labels assigned to this post.

Level V
Hello Tonya, It was very helpful, thank you for your blog. Is it possible to create several control charts with "By" some category and "Get Limits" from table with different limits for phases of each category? If yes, how Limits table have to look like?

Yes, you can do this.  You would need a separate table for each level of the by variable.  Each of the tables would look the same as in the blog post.

Level V
OK. Thank you. I will do it in that way in scripting. It means, I will loop over all "by" categories in some table T1 and every iteration save limits table L1 from the file T1 to some temp directory. Then I will execute Control chart command and delete the file L1. Is there some more elegant way to run all this without saving limits table every iteration ?

No, I do not know of a more elegant way.  Unfortunately the Get Limits command only uses a previously saved data table.


Hi all - i'm pleased to let you know that with JMP 15.0 and later, the Get Limits command will now accept either a previously saved table OR a currently open data table.

Level III

This is a GREAT feature that I think gets me 90% of where I want to be with something.  I have a system where I am monitoring a few hundred control charts.  The limits change as a benchmarking standard changes over time.  This will allow me to set the benchmarking standards as phases.


Now, here's the challenge.  My hope was to use a local data filter to switch around between the few hundred control charts.  This works great for if I am operating in graph builder, but I don't see a way I could filter my limits as well as the data.


Anyone see any easy way we could achieve this?


@Evan_Morris I am not sure I understand your data set up or what you are trying to accomplish.  Perhaps the Process Screening platform would be better suited for your needs if you have hundreds of control charts.  I suggest taking a look at the following blog post, Process Specification Limits that Differ Based on a Grouping Column. If you take a look at the 4th screenshot in this blog post, you will see that you can enter the centerline and sigma for control limits.  The specification limits are not required for this platform.

Level III



I am monitoring a few hundred manufacturing processes where each has it's own mean that changes from time to time.  I'm using the phase chart to manage that mean change.  I have had luck using the local data filters in the normal graph structure to allow quick exploration through the 100+ data sets, but if I do that I can't bring in the the control limits.


That said, your point on Process Screening is EXCELLENT.   I think this is the route I should be looking at.


Thanks much