Event Attributes and Enumerations
What you know about each event — where attribute values come from, and why categorical ones must be enumerated.
An event on its own tells you that something happened and how long it lasted. Attributes tell you what it was — the product, the reason, the operator, the batch number, the result. They are what make events analysable rather than merely countable.
Attribute value types#
Each attribute holds one of two kinds of thing:
| Type | Holds |
|---|---|
| Value | A number or a free string |
| Enumeration | One of a defined set of options |
Choosing correctly between them decides whether your analysis works. More on that below.
Where values come from#
An attribute's retrieval type determines how it gets populated:
| Retrieval type | Value comes from |
|---|---|
| Manually entered | A person, through a form |
| Retrieved from Segments | Read from a data source over the event's duration |
| Calculated | An expression |
Retrieved from Segments#
The source is read across the event's own span rather than over a calendar interval. That is the useful part: the attribute describes this event, whatever length it happened to be.
So a production run's average line speed is the average over that run — not over the hour it started in, not over the shift. A batch's peak temperature is the peak during that batch.
This is the closest thing Infohub has to a signature capability for event analysis, and it is why "average rate per production run" is straightforward here and awkward in interval-based tools.
Calculated#
An expression evaluated for the event. Two forms are particularly useful.
Deriving from the event's own duration. The period in scope is the event, so its duration is available:
Period.Duration.TotalMinutes
Period.Duration.TotalHours
A changeover duration in minutes, a run length in hours, a downtime in minutes — all one expression, with no source needed.
Deriving from another attribute. Attributes can reference each other, so a computed attribute can build on a retrieved one — a yield from a good count and a total count, a rate from a quantity and the duration.
Keep these expressions numeric and unformatted. Formatting belongs to display, not to the value.
Manually entered#
A person supplies the value through a form. This is how downtime reasons, deviation explanations, and quality sign-offs get captured.
It is also the attribute type most likely to be left blank, which is the single biggest determinant of whether the resulting analysis is worth anything.
An unfilled reason attribute makes a useless Pareto. A downtime scheme where the reason is entered 40% of the time produces a chart whose largest bar is "unspecified". The analysis is then about data capture, not about the plant.
Design for completion: keep the number of manual attributes small, put them on a form the operators actually open, use enumerations so entry is one click rather than typing, and check the completion rate as a metric in its own right.
Enumerations#
An enumeration is a defined set of named options, held in the Toolbox and reusable across schemes. Options can carry colours, which then flow through to charts and timelines automatically.
Use one for anything categorical. This is not a stylistic preference.
Free text produces this, from four different people describing one thing:
Blockage
blockage
Blocked
blokage
Label blockage
Five categories, one cause, and a Pareto chart that ranks none of them meaningfully. No amount of downstream cleverness fixes it, because the information about which of them are the same thing was never captured.
An enumeration makes it one option, selected from a list, spelled once, in a known colour.
Designing an enumeration#
Keep the list short enough to choose from. Eight to fifteen options is workable. Forty means operators pick whichever appears first, and the data becomes noise.
Make the options mutually exclusive. If two options could both describe one event, different people will pick differently.
Include a genuine catch-all, named honestly — Other. Then watch it: if Other becomes the biggest category, the list is missing something real and needs revising.
Assign colours deliberately. Red for unplanned failures, amber for planned interventions, grey for idle. The colours reach timelines and charts, so a well-chosen palette makes a dashboard readable at a glance.
Version it thoughtfully. Adding an option is safe. Renaming one changes how history reads. Removing one orphans the events that used it. Decide the list properly rather than iterating on it against live data.
Enumeration groups#
Related enumerations can be combined into a group, which constrains valid combinations across several attributes.
The classic use is a two- or three-level reason hierarchy: a category, and within it a specific reason. A group ensures that selecting the Mechanical category offers only mechanical reasons, rather than allowing Mechanical with Operator break.
This is what makes a hierarchical Pareto possible — roll up to category for management, drill down to reason for the maintenance team — without relying on people to enter consistent combinations.
Set groups up when the reason list starts to exceed what a flat enumeration handles well. Ten reasons is fine flat; sixty needs a hierarchy.
Deciding an attribute set#
For each event scheme, ask what you would need to know to answer the questions people will ask.
A production run typically needs:
| Attribute | Type | Retrieval |
|---|---|---|
| Product | Enumeration | Retrieved from segments, or manual |
| Operator | Enumeration | Manual |
| Run Duration (min) | Value | Calculated from the period |
| Average Rate | Value | Retrieved from segments |
| Good Count | Value | Retrieved from segments |
| Reject Count | Value | Retrieved from segments |
| Yield % | Value | Calculated from good and reject |
A stoppage typically needs:
| Attribute | Type | Retrieval |
|---|---|---|
| Reason | Enumeration (grouped) | Manual |
| Category | Enumeration (grouped) | Manual |
| Planned | Enumeration | Manual |
| Duration (min) | Value | Calculated from the period |
Keep the set to what will actually be used. Every attribute is either a source to configure or a field a person must fill, and unused attributes make forms longer and completion rates worse.
Attributes on the interval grid#
Attribute values reach ordinary measures through the Event Value (Start) and Event Value (End) anchors on an event-aggregated measure, which pull a numeric attribute onto the interval grid so it can be charted, limited, and published like anything else.
Attributes also filter and group event-based charts and tables directly — the Pareto by reason, the timeline coloured by category, the table of runs by product. See Analysing Data by Event.
Diagnosing#
| Symptom | Cause |
|---|---|
| Categories will not group in a chart | Free-text Value attribute where an Enumeration was needed |
| Largest Pareto bar is "unspecified" | Manual attribute not being filled in |
| Attribute blank on some events only | Source had no data over that event's span; or the form was not completed |
| Duration attribute is zero | Event has not closed yet — an end trigger problem |
| Impossible category combinations | No enumeration group constraining them |
| Colours inconsistent between charts | Colours set per chart instead of on the enumeration |
| Calculated attribute fails | Expression references an attribute that is itself unpopulated; guard it |
| Attribute correct on new events, missing on old | Added after those events were created; rebuild the range if you need it retrospectively |