The beauty of a transition table: a workshop saver


#1

Dear Community,

We know all that we need to understand the process and at some point the PPI (Process Performance Indicators): These are really geting important in business in workshops and alway questioned deeply and are questioned with all kind of “specials”.
In our case we talk a lot about Touchrate (how many times a case was manually touched) and Automation and Rework activities (non-added value activities)
And when you are sitting in workshops and business tells about many “big” problems which are not interpreted by the system correctly. (Meaning a transition is automatic not manual; due to special customisation of the SAP System. For example the activity “Send Purchase papers” can be automatically done after activity “Create purchase order”. The user in both activities are the same / dialog!
The focus of the picture seems to move to "we do not trust the system, it is incorrect! Get these “big” errors out an then come back! Your Workshop and the system is seen as sucked.

Of course no system is correct; it is as good as the knowhow which has designed it.:sunglasses:
And we learned our lessons…

A Workshop saver:
We have setup ap a transition table which gives you back all the transistions as Count, as being automated. Transitions which follow the 0 sec upto 20 second rule (and are very likely to be automated by customisations). The best part actually is the you get a very good gut feeling if this is a real “big” problem or this <1% topic… This really helps to fuocus on the real stuff and at the same time say that this “small error” will be repaired.
It saves you your improvement workshop!!
Of course you can add all kind of other nice KPI or dropdowns with all kind of attributes (Company codes ?!) for your use case… We can compare our 70 different companies in one go to see the differences and start asking why this is…
For a deep dive in a transition we have an additional histogram with time buckets to understand the timespreading of the transition.

As a small Bonbon: in the last column we have the last case ID where this transition took place…

The Code:
Statistics of direct transitions between activities

Component filter:
No filter
Dimensions:

  • From
    => SOURCE("_CEL_O2C_ACTIVITIES".“ACTIVITY_EN”)
  • To
    => TARGET("_CEL_O2C_ACTIVITIES".“ACTIVITY_EN”)
  • Company
    => VBAK.BUKRS_VF || ’ - ’ || VBAK.BUKRS_TEXT
  • Process Type
    => KPI(“Process Type”)
    Aggregations:
  • SO Items

    => COUNT_TABLE(“VBAP”)
  • % SO Items
    => COUNT_TABLE(“VBAP”)*1.0
  • Avg. Throughput Time Between From and To activities
    => AVG(
    DAYS_BETWEEN(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”),TARGET("_CEL_O2C_ACTIVITIES".“EVENTTIME”))
    )
  • <= 20 sec (# SO Items)
    => COUNT(DISTINCT CASE
    WHEN SECONDS_BETWEEN(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”),TARGET("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) <= 20 THEN SOURCE("_CEL_O2C_ACTIVITIES"."_CASE_KEY")
    ELSE NULL
    END)
  • <= 20 sec (% SO Items)
    => COUNT(DISTINCT CASE
    WHEN SECONDS_BETWEEN(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”),TARGET("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) <= 20 THEN SOURCE("_CEL_O2C_ACTIVITIES"."_CASE_KEY")
    ELSE NULL
    END)*1.0
    /
    COUNT_TABLE(“VBAP”)
  • % of <= 20 Sec
    => COUNT(DISTINCT CASE
    WHEN SECONDS_BETWEEN(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”),TARGET("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) <= 20 THEN SOURCE("_CEL_O2C_ACTIVITIES"."_CASE_KEY")
    ELSE NULL
    END)
  • <= 0 sec (# SOI)
    => COUNT(DISTINCT CASE
    WHEN SECONDS_BETWEEN(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”),TARGET("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) <= 0 THEN SOURCE("_CEL_O2C_ACTIVITIES"."_CASE_KEY")
    ELSE NULL
    END)
  • 0 sec Last Case ID and event time
    => MAX(DISTINCT CASE
    WHEN SECONDS_BETWEEN(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”),TARGET("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) <= 0
    THEN SOURCE("_CEL_O2C_ACTIVITIES"."_CASE_KEY")
    || ’ - ’ || YEAR(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”))
    || ‘.’ || CASE WHEN MONTH(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) < 10 THEN ‘0’ || MONTH(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) ELSE ‘’ || MONTH(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) END
    || ‘.’ || CASE WHEN DAY(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) < 10 THEN ‘0’ || DAY(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) ELSE ‘’ || DAY(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) END
    || ’ ’ || CASE WHEN HOURS(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) < 10 THEN ‘0’ || HOURS(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) ELSE ‘’ || HOURS(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) END
    || ‘:’ || CASE WHEN MINUTES(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) < 10 THEN ‘0’ || MINUTES(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) ELSE ‘’ || MINUTES(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) END
    || ‘:’ || CASE WHEN SECONDS(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) < 10 THEN ‘0’ || SECONDS(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) ELSE ‘’ || SECONDS(SOURCE("_CEL_O2C_ACTIVITIES".“EVENTTIME”)) END
    ELSE NULL
    END)

Have :grinning:!
Hans