decision tables as a programming tool

43
rapidgen.com rapidgen.com Howard Rogers Director Technical Support [email protected] Decision Tables as a Programming tool

Upload: rapidgen

Post on 30-Jun-2015

223 views

Category:

Technology


5 download

DESCRIPTION

Decision tables compared with “conventional” programming languages. - How decision tables can be used but as a practical and efficient programming tool, not just as visual representations of complex logical processing - Shortcut compact coding techniques - Comparisons for simple truth and complex logic coding

TRANSCRIPT

Page 1: Decision Tables as a Programming Tool

rapidgen.com rapidgen.com

Howard Rogers Director Technical Support

[email protected]

Decision Tables as a

Programming tool

Page 2: Decision Tables as a Programming Tool

rapidgen.com

Agenda

• A brief history

• Decision table structures

• Rule formats

• Rule redundancy, reduction and optimisation

• Relevance testing

• Some practical examples

• Current examples of use

• Future developments

• Questions and Answers

2

Page 3: Decision Tables as a Programming Tool

rapidgen.com

Speaker

• Statistics & Operation Research

• UK National Health Service

• 35 years IT

• Decision table based languages and compilers

• Query & reporting tools

• Generic file & database access

• Brief interlude with RTPI

• Technical support

3

Page 4: Decision Tables as a Programming Tool

rapidgen.com

History • NASA

• Morgan Crucible – LITA – List &Tabulate

• TABN for ICL 1900 series mainframes

• (DE)TAB-360 for IBM System/360

• UNITAB for UNIVAC

• HTAB for Honeywell

• TAB-11 for RSTS/E on PDP-11

• FTL6/DTPL for ICT 1900 series

• RPL-11 for RT-11, RSTS/E, RSX-11 on PDP-11

• RPL-3 for IBM System/3

• Filetab-D for x86 and PDP-11, OpenVMS VAX

• FPL - IBM PCs and compatibles.

• RPL, Rapid-Expert and expertGenius extended syntax for Microsoft

Windows, Unix, Linux and OpenVMS,VAX, Alpha & Itanium

4

Page 5: Decision Tables as a Programming Tool

rapidgen.com

History

• Excel – query tables

• COPE – Translate DTs to COBOL

• LogicGEM – Translate to BASIC,C, C++, FORTRAN, Pascal etc etc

• CCIDE – Pre-processor for BASIC, JAVA, CC, C++, BASH, QB, VB,

and EX(euphoria)

• Silk (Simple In-line Logic Kompiler) converting decision tables to

Cobol code and vice versa.

• PASPREP – Pascal preprocessor

• Many many others

5

Page 6: Decision Tables as a Programming Tool

rapidgen.com

Decision table structure

• Conditions

• Actions

• Condition rules

• Action rules

6

Page 7: Decision Tables as a Programming Tool

rapidgen.com

Single Condition Decision Table

Condition Stubs Rules

Action Stubs Actions

7

Quantity > 100 Y N

Apply 20% Discount X -

Page 8: Decision Tables as a Programming Tool

rapidgen.com

Decision Tables

Horizontal vs Vertical Condition Stubs Action Stubs

Rules Actions

8

Quantity > 100 Apply 20% Discount

Y N

X -

Page 9: Decision Tables as a Programming Tool

rapidgen.com

Multiple Single Decision Table

Condition Stubs Rules

Action Stubs Actions

9

Quantity > 100 Y Y N N

Cash payment Y N Y N

Apply 20% Discount X - - -

Apply 10% Discount - X - -

Apply 5% Discount - - X -

No discount - - - -

Page 10: Decision Tables as a Programming Tool

rapidgen.com

Multiple Condition DTs

10

• Complete True/False Y N require

2^Conditions rules

• 3 Conditions – 8 rules

• 4 Conditions – 16 rules

• etc

• Use of “-” to reduce completeness

• Practical limit 32

Page 11: Decision Tables as a Programming Tool

rapidgen.com

Five Conditions – One rule

11

Initially no discount

Quantity > 100 Y -

Cash payment Y -

Credit_check Y -

Product type is laptop Y -

Employee N -

Apply 5% Discount X -

Page 12: Decision Tables as a Programming Tool

rapidgen.com

Multiple Section Decision Table

12

Quantity > 100 Y Y N N

Cash payment Y N Y N

Apply 20% Discount X - - -

Apply 10% Discount - X - -

Apply 5% Discount - - X -

No discount - - - -

Discount_amount < $1 Y -

No discount X -

Discount amount > $1000 Y -

Set discount $1000 X -

Page 13: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables 1

13

1 2 3 4 5 6 7 8

Credit limit exceeded

Y Y Y Y N N N N

Cash payment Y Y N N Y Y N N

Special clearance Y N Y N Y N Y N

Accept order X X X - X X X X

Reject Order - - - X - - - -

Page 14: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables 2

14

1&2 3 4 5 6 7 8

Credit limit exceeded

Y Y Y N N N N

Cash payment Y N N Y Y N N

Special clearance - Y N Y N Y N

Accept order X X - X X X X

Reject Order - - X - - - -

Page 15: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables 3

15

1&2 3 4 5&6 7&8

Credit limit exceeded

Y Y Y N N

Cash payment Y N N Y N

Special clearance - Y N - -

Accept order X X - X X

Reject Order - - X - -

Page 16: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables 4

16

1&2 3 4 567&8

Credit limit exceeded

Y Y Y N

Cash payment Y N N -

Special clearance - Y N -

Accept order X X - X

Reject Order - - X -

Page 17: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables 5

17

4 123567&8

Credit limit exceeded

Y ELSE

Cash payment N -

Special clearance N -

Accept order - X

Reject Order X -

Page 18: Decision Tables as a Programming Tool

rapidgen.com

Optimising Decision Tables

18

1 2 3 4 5 6 7 8

Credit limit exceeded

Y Y Y Y N N N N

Cash payment Y Y N N Y Y N N

Special clearance Y N Y N Y N Y N

Accept order X - X - X X X X

Reject Order - X - X - - - -

2&4 123567&8

Credit limit exceeded

Y ELSE

Special clearance N -

Accept order - X

Reject Order X -

Page 19: Decision Tables as a Programming Tool

rapidgen.com

ELSE Rule

19

4 123567&8

Credit limit exceeded

Y ELSE

Cash payment N -

Special clearance N -

Accept order - X

Reject Order X -

Page 20: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables –

Extended entry

20

TRANSKEY GT MASTKEY Y - - - ELSE

TRANSKEY EQ MASTKEY - Y Y - -

TRANSKEY LT MASTKEY - - - Y -

TRANSTYPE = “I” - - - Y -

TRANSTYPE = “D” - - Y - -

TRANSTYPE = “A” - Y - - -

CALL PROCESS_MATCH - X - - -

CALL PROCESS_MISS - - X - -

CALL PROCESS_ADD - - - X -

CALL NEXT_TRANS - X X X -

CALL NEXT_MAST X X X - -

REPEAT X X X X -

Page 21: Decision Tables as a Programming Tool

rapidgen.com

Simplifying Decision Tables –

Extended entry

21

TRANSKEY ? MASTKEY > = = < ELSE

TRANSTYPE = “?” - A D I -

CALL PROCESS_? - MATCH MISS ADD -

CALL NEXT_TRANS - X X X -

CALL NEXT_MAST X X X - -

REPEAT X X X X -

Page 22: Decision Tables as a Programming Tool

rapidgen.com

Ambiguity or Multi-ruling?

22

Set discount

Initialise DISCOUNT_PERC

Cash payment Y - - -

Special offer - Y - -

Good credit history - - Y -

DISCOUNT_PERC + ? 5 10 2 -

Page 23: Decision Tables as a Programming Tool

rapidgen.com

Code generation 1

23

|--------------------------------------------------|

|--------------------------------------------------|

|# |STATEMENT 1 2 3 4 5 6 7 8 |

|--------------------------------------------------|

|C1 |Cash payment |y |y |y |y |n |n |n |n |

|C2 |Special offer |y |y |n |n |y |y |n |n |

|C3 |Good credit history |y |n |y |n |y |n |y |n |

|==================================================|

|A1 |Discount initialise | | | | | | | | |

|A2 |Discount + 5 |X |X |X |X | | | | |

|A3 |Discount + 10 |X |X | | |X |X | | |

|A4 |Discount + 2 |X | |X | |X | |X | |

|--------------------------------------------------|

Page 24: Decision Tables as a Programming Tool

rapidgen.com

Generation – Nested If/else 1

24

{ if ((Cash payment)) { if ((Special offer)) { if ((Good credit history)) { /* rule 1 */ Discount + 5; Discount + 10; Discount + 2; } else { /* rule 2 */ Discount + 5; Discount + 10; } } else { if ((Good credit history)) { /* rule 3 */ Discount + 5; Discount + 2; } else { /* rule 4 */ Discount + 5; } } } else {

Page 25: Decision Tables as a Programming Tool

rapidgen.com

Generation – Nested If/else 2

25

if ((Special offer)) { if ((Good credit history)) { /* rule 5 */ Discount + 10; Discount + 2; } else { /* rule 6 */ Discount + 10; } } else { if ((Good credit history)) { /* rule 7 */ Discount + 2; } else { /* rule 8 */ } } } }

Page 26: Decision Tables as a Programming Tool

rapidgen.com

Generation – Case Switch 1

26

{ if ((Cash payment)) { if ((Special offer)) { if ((Good credit history)) { rule_number = 1; } else { rule_number = 2; } } else { if ((Good credit history)) { rule_number = 3; } else { rule_number = 4; } } }

Page 27: Decision Tables as a Programming Tool

rapidgen.com

Generation – Case Switch 2

27

else { if ((Special offer)) { if ((Good credit history)) { rule_number = 5; } else { rule_number = 6; } } else { if ((Good credit history)) { rule_number = 7; } else { rule_number = 8; } } }

Page 28: Decision Tables as a Programming Tool

rapidgen.com

Generation – Case Switch 3

28

switch (rule_number) { case 1: Discount + 5; Discount + 10 ; Discount + 2; break; case 2: Discount + 5; Discount + 10; break; case 3: Discount + 5; Discount + 2; break; case 4: Discount + 5; break;

Page 29: Decision Tables as a Programming Tool

rapidgen.com

Generation – Case Switch 4

29

case 5: Discount + 10; Discount + 2; break; case 6: Discount + 10; break; case 7: Discount + 2; break; case 8: break; }

Page 30: Decision Tables as a Programming Tool

rapidgen.com

Generation – Rule List 1

30

{ if ( ((Cash payment)) && ((Special offer)) && ((Good credit history)) ) { Discount + 5; Discount + 10; Discount + 2; } if ( ((Cash payment)) && ((Special offer)) && (!(Good credit history)) ) { Discount + 5; Discount + 10; } if ( ((Cash payment)) && (!(Special offer)) && ((Good credit history)) ) { Discount + 5; Discount + 2; } if ( ((Cash payment)) && (!(Special offer)) && (!(Good credit history)) ) { Discount + 5; }

Page 31: Decision Tables as a Programming Tool

rapidgen.com

Generation – Rule List 2

31

if ( (!(Cash payment)) && ((Special offer)) && ((Good credit history)) ) { Discount + 10; Discount + 2; } if ( (!(Cash payment)) && ((Special offer)) && (!(Good credit history)) ) { Discount + 10; } if ( (!(Cash payment)) && (!(Special offer)) && ((Good credit history)) ) { Discount + 2; } if ( (!(Cash payment)) && (!(Special offer)) && (!(Good credit history)) ) { } }

Page 32: Decision Tables as a Programming Tool

rapidgen.com

Generation – Rule Mask

32

{Mask = 11111111 {if ( Cash payment) Mask AND 11110000; } {if ( Special Offer) Mask AND 11001100; } {if (Good credit history) Mask AND 10101010; } {if (Mask AND 11110000) Discount + 5 ; } if (Mask AND 11001100) Discount + 10; } if (Mask AND 10101010) Discount + 2; }

Page 33: Decision Tables as a Programming Tool

rapidgen.com

Rule masking

33

• Succinct code

• Reduces repetition of condition testing

• Reduced repetition of action code

• Fast execution

• No frequency/cost weighting of rules

needed

• All conditions are evaluated

Page 34: Decision Tables as a Programming Tool

rapidgen.com

Relevance Testing

34

AGE > 50 Y - -

CALL ADJUST_COVER Y - -

TRANSKEY LT MASTKEY - Y -

LOOKUP MASTER TRANSKEY - Y -

Some operations require dynamic masking where actions may be performed or I/O occurs

Page 35: Decision Tables as a Programming Tool

rapidgen.com

Relevance Testing

35

AGE > 50 Y - -

COVER + 20 R - -

TRANSKEY LT MASTKEY - Y -

DISPLAY “Message” - R -

Dynamic masking again needed when Actions are inserted into condition section of Decision Table using “R”

Page 36: Decision Tables as a Programming Tool

rapidgen.com

Decision table linkage

36

CALLs to other DTs or object library routines

CALL Credit_limit_exceeded Y ELSE

CALL Cash_payment N -

CALL Special_clearance N -

CALL ACCEPT_ORDER - X

CALL REJECT_ORDER X -

GOTO link to DT or indirect CALL

CALL Credit_limit_exceeded Y ELSE

CALL Cash_payment N -

CALL Special_clearance N -

GOTO ACCEPT_ORDER - X

CALL_I Variable_name X -

Page 37: Decision Tables as a Programming Tool

rapidgen.com

Requirements of a DT language

• Feature rich language

• Support for multiple data types

• Unmatched data type comparison

• Good string handling/text manipulation

• Access external routines/library functions

• File, database, object and data dictionary

• Callable access from other products

• Source code maintenance, version control

• Compiled and portable execution

37

Page 38: Decision Tables as a Programming Tool

rapidgen.com

Decision Tables in other products

• Uses GUI in SAP HANA Studio

• SAP Parameter/Database DTs

• Alternate use via Excel spreadsheets

• SMARTS

• OpenRules Engine

• Decision First Modeler

• Drools

• Many more …

38

Page 39: Decision Tables as a Programming Tool

rapidgen.com

Usage of RPL - expertGenius

• Self compiling

• Cross compiling

• Source of Genius Suite

• Code writing and compiling 4GL and RAD

toolset

• Complete layered application suites

• Reporting – fixed logic

39

Page 40: Decision Tables as a Programming Tool

rapidgen.com

Genius deployment

• Aerospace factory tracking systems

• Mobile phone billing systems

• Payroll data mining

• HR system ad-hoc querying

• Newspaper distribution system

• Stock control

• Sales order dashboard & EIS

• Web based on-line parts ordering

40

Page 41: Decision Tables as a Programming Tool

rapidgen.com

CDT Callable Decision Tables

• Simple calculator

• Calculator code

• Tax formula (UK)

• Tax calculator

• Tax code

• CDT Callable access from other

languages and applications

41

Page 42: Decision Tables as a Programming Tool

rapidgen.com

Future developments

• Extend range of generic database access

• Ports to new architectures

• Macro expansions for FEEL or S-FEEL

• GUI extensions

• CDT Callable access from other

languages and applications

• Cloud based compiler

42

Page 43: Decision Tables as a Programming Tool

rapidgen.com rapidgen.com

Howard Rogers Director Technical Support

[email protected]

[email protected]

Decision Tables as a

Programming tool