Check a decision table before release

Type or paste your decision table. The page runs every combination of the values you give it and shows where the table gives no decision, which rows overlap and what a missing field gets.

Your decision table

#
1
2
3
4

Write cells as >=700, <35 or [620,700), where a square bracket includes the end and a round one leaves it out. Use a word such as broker for text, != for not equal, ANY or an empty cell for any value, and missing for a field the application did not send.

A demo referral table with four rows for credit score and debt-to-income.

Paste from a spreadsheet

Values to test

credit_score
debt_to_income

Every combination of these values runs through the table. The values the rows name are added, and a text column is also tried with any other value.

No outcome

144
Overlapping rows2
Outcome depends on row15
Catch-allNone

144 of the 468 combinations tested, 30.8%, get no outcome from this table.

Outcome map

Darker cells are decline, approve, refer in that order, red cells get no outcome, orange cells are mixed.

Findings

KindFinding
No outcome144 combinations match no row; the first is credit_score 620, debt_to_income 35.
Overlapping rowsRows 1 and 4 can both match one application, for example credit_score 710, debt_to_income 25, and both say approve.
Overlapping rowsRows 2 and 4 can both match one application, for example credit_score 670, debt_to_income 25; row 2 says refer, row 4 says approve, and with the current setting it gets approve.
Which row wins15 combinations get a different outcome if the other matching row wins.
Missing fieldWhen credit_score is missing, the table gives decline (13).
Missing fieldWhen debt_to_income is missing, the table gives approve (16), decline (12), refer (8).

Outcomes

OutcomeCombinationsShare
decline15633.3%
approve12727.1%
refer418.8%
No outcome14430.8%

These are counts over the test values, with each combination counted once. They are not counts over real applications, which do not spread evenly.

Test cases

#credit_scoredebt_to_incomeoutcomeDeciding rowWhy included
178015approve1Inside row 1
270015approve1On the edge of row 1 for credit_score
369015refer2Just past the edge of row 1 for credit_score
478035No outcome–On the edge of row 1 for debt_to_income
578030approve1Just inside the edge of row 1 for debt_to_income
666015refer2Inside row 2
762015refer2On the edge of row 2 for credit_score
861015decline3Just past the edge of row 2 for credit_score
966035No outcome–On the edge of row 2 for debt_to_income
1066030approve4Just inside the edge of row 2 for debt_to_income
1156030decline3Inside row 3
1262030refer2On the edge of row 3 for credit_score
1361030decline3Just inside the edge of row 3 for credit_score
14560100No outcome–On the edge of row 3 for debt_to_income
1556095decline3Just inside the edge of row 3 for debt_to_income
1669025approve4Inside row 4
1765025approve4On the edge of row 4 for credit_score
1864025refer2Just past the edge of row 4 for credit_score
1972025approve4On the edge of row 4 for credit_score
2073025approve1Just past the edge of row 4 for credit_score
2169020approve4On the edge of row 4 for debt_to_income
2269030approve4On the edge of row 4 for debt_to_income
2369035No outcome–Just past the edge of row 4 for debt_to_income
2462035No outcome–No row matches
2562040No outcome–No row matches
2662045No outcome–No row matches
27Missing15decline3credit_score not sent
28780Missingapprove1debt_to_income not sent

Get the result by email

The next step is the same table running on every application, pasted from the spreadsheet, with an overlap check and a simulation before each release. Start free

How checks work
Every combination of the test values runs through the rows from top to bottom.
A combination that no row matches has no outcome.
Two rows overlap when, column by column, their conditions can both hold for one value; this is worked out from the cells, not from the test values.
A combination depends on the setting when the first and the last matching row give different outcomes.
A catch-all row has any value in every column; it belongs first when the last matching row wins and last when the first matching row wins.
A missing field counts as less than every number in a comparison, as zero in a range, and matches any value and missing.

The checks cover the values tested here. A table with no gaps on them can still have one between two steps.

What the tool works out

A decision table links conditions in each column to an outcome in its result column. This tool runs every combination of the test values through the rows and shows combinations with no outcome, overlapping rows and the result for a missing field.

The result shows where a table may behave differently from its appearance. Use the findings to review row order, the catch-all row and missing values before the decision table goes live.

Common questions

What is a decision table?

A decision table links conditions to an outcome. Each row describes when that outcome applies, using the values in its condition columns.

How do you make a decision table?

Add a condition column for each value the decision uses and a result column for the outcome. Add rows that describe the conditions for each outcome, then test the values the table may receive.

How do you test a decision table?

Run combinations of test values through the rows and check the outcome each combination gets. Include values inside conditions, on their edges, just outside them and values the application did not send.

How do you find overlapping rows?

Two rows overlap when their conditions can both hold for one application. This tool works that out from the cells and shows an example value for each overlapping pair.

What happens when two rows match?

The setting decides whether the first matching row or the last matching row wins. If the rows give different outcomes, the same application can receive a different result when that setting changes.