A Dashboard Nobody Uses Is Worse Than No Dashboard
We walked into a manufacturing plant last year. They had Maximo Monitor deployed. Eighteen dashboards built. Gorgeous layouts. Every widget color-coded.
Nobody looked at them.
The operators had a paper checklist taped to the HMI cabinet. They walked the floor every two hours, wrote down temperatures by hand, and radioed the maintenance shop if something looked wrong.
"Those dashboards are for the bosses. They don't show us what we need to see."
That plant had a dashboard problem, not a data problem. The dashboards were designed by IT for IT. The people who actually needed the information -- the operators making minute-by-minute decisions -- were never asked what they needed.
This post is about building dashboards that people use. Not dashboards that impress in a demo. Dashboards that change behavior.
Who this is for: Maximo administrators building operational dashboards, reliability engineers designing KPI views, operations managers defining what their teams need to see, and anyone who has built a dashboard that nobody looked at twice.
Three Audiences, Three Dashboard Types
Before you add a single widget, answer one question: Who will look at this, and what decision will it help them make?
Executive Dashboards
Audience: Plant managers, VPs, C-suite.
Question they answer: "Are we on track?"
Update frequency: Daily aggregates or real-time roll-ups.
┌──────────────┬──────────────┬──────────────┬──────────────┐
│ Uptime │ Maint Cost │ OEE │ Safety │
│ 98.5% │ -12% YoY │ 85.2% │ 0 incidents │
├──────────────┴──────────────┴──────────────┴──────────────┤
│ │
│ [Multi-Site Performance Comparison - Bar Chart] │
│ │
├────────────────────────────┬───────────────────────────────┤
│ [Site Ranking Table] │ [Risk Indicators] │
└────────────────────────────┴───────────────────────────────┘Rules for executive dashboards:
- 4-6 summary cards maximum
- One comparison chart (sites, months, product lines)
- Red/yellow/green -- that is the only color language they need
- No raw sensor data. Ever.
Operational Dashboards
Audience: Shift supervisors, control room operators.
Question they answer: "Is anything wrong right now?"
Update frequency: Real-time (5-30 second refresh).
┌──────────┬──────────┬──────────┬──────────┬──────────────┐
│ Active │ Critical │ Devices │ OEE │ Production │
│ Alerts:3 │ Assets:2 │ Online: │ Current: │ Today: │
│ │ │ 142/150 │ 87.3% │ 1,234 units │
├──────────┴──────────┴──────────┴──────────┴──────────────┤
│ │
│ [Production Line Temperature Trend - Live] │
│ │
├───────────────────────────┬───────────────────────────────┤
│ [Temperature Heat Map] │ [Active Alert Table] │
│ by zone │ Severity | Device | Time │
└───────────────────────────┴───────────────────────────────┘Rules for operational dashboards:
- Alert count is always visible and always at the top
- Time-series charts show the last 1-4 hours, not last month
- Alert table is sorted by severity, not chronologically
- Refresh rate: 10-30 seconds
Analytical Dashboards
Audience: Reliability engineers, data analysts.
Question they answer: "Why is this happening, and will it get worse?"
Update frequency: On-demand.
Rules for analytical dashboards:
- Flexible time range selection (custom date pickers)
- Multi-metric overlay capability
- Drill-down from summary to raw data
- Export functionality for offline analysis
Widget Selection: The Right Tool for the Right Data
Summary Cards
The workhorse of executive and operational dashboards. One number. One color. One glance.
{
"widget": "summaryCard",
"title": "Average Bearing Temperature",
"dataSource": {
"deviceType": "VibrationSensor",
"metric": "bearing_temp",
"aggregation": "avg"
},
"thresholds": [
{"value": 60, "color": "green"},
{"value": 75, "color": "yellow"},
{"value": 85, "color": "red"}
],
"timeRange": "last_1_hour",
"showTrend": true
}Key insight: The threshold values on your summary cards are the most important numbers in your dashboard. Get them from the equipment manufacturer's specs, not from a guess. Wrong thresholds mean wrong colors mean wrong decisions.
Time-Series Charts
Show how metrics change over time. The bread and butter of monitoring.
Line charts for continuous metrics (temperature, pressure, flow). Area charts for cumulative metrics (energy consumption, production count). Bar charts for periodic comparisons (daily output, weekly downtime hours).
{
"widget": "timeSeriesChart",
"title": "Motor Health Indicators",
"dataSource": {
"deviceType": "Motor",
"metrics": [
{"name": "bearing_temp", "axis": "left", "color": "#FF5733"},
{"name": "vibration_rms", "axis": "right", "color": "#337DFF"}
]
},
"timeRange": "last_24_hours",
"aggregation": "15m",
"showMinMax": true
}Aggregation interval guidelines:
Viewing Window — Aggregation — Data Points
Last 1 hour — Raw data — ~720 (at 5s intervals)
Last 24 hours — 15 minutes — 96
Last 7 days — 1 hour — 168
Last 30 days — 1 day — 30
Last 1 year — 1 week — 52
Gauges
Current value against a range. Best for metrics with clear operating bands.
{
"widget": "gauge",
"title": "Pump Discharge Pressure",
"dataSource": {
"deviceType": "PressureSensor",
"metric": "pressure_psi"
},
"ranges": [
{"min": 0, "max": 40, "color": "red", "label": "Low"},
{"min": 40, "max": 80, "color": "green", "label": "Normal"},
{"min": 80, "max": 100, "color": "red", "label": "High"}
],
"target": 60
}Tables
Detailed data in sortable, filterable rows. Best for alert lists, device inventories, and detailed metric comparisons.
Maps
Geographic visualization for distributed assets. Fleet tracking, pipeline monitoring, multi-site operations. Markers colored by status with pop-up detail panels.
Image Overlays
Your production line diagram with live data hotspots. Your building floor plan with temperature readings at each HVAC zone. This is the widget that makes operators say "now I can see what is happening."
Custom KPI Creation
Raw metrics tell you what. KPIs tell you so what.
Overall Equipment Effectiveness (OEE)
The king of manufacturing KPIs. Three components multiplied together:
OEE = Availability x Performance x Quality
Availability = Run Time / Planned Production Time
Performance = Actual Output / Theoretical Output
Quality = Good Units / Total UnitsImplement it as a custom analytics function:
from iotfunctions.base import BaseTransformer
class CalculateOEE(BaseTransformer):
def __init__(self, planned_time, actual_time, target_output,
actual_output, good_output, output_item='oee'):
super().__init__()
self.planned_time = planned_time
self.actual_time = actual_time
self.target_output = target_output
self.actual_output = actual_output
self.good_output = good_output
self.output_item = output_item
def execute(self, df):
availability = df[self.actual_time] / df[self.planned_time]
performance = df[self.actual_output] / df[self.target_output]
quality = df[self.good_output] / df[self.actual_output]
df[self.output_item] = (availability * performance * quality * 100)
df[self.output_item] = df[self.output_item].clip(0, 100).fillna(0)
return dfOnce this function is registered, oee appears as a metric you can chart and display on summary cards just like any raw sensor reading.
Mean Time Between Failures (MTBF)
MTBF = Total Operating Time / Number of FailuresEnergy Efficiency Ratio
Efficiency = Output Produced / Energy ConsumedDrill-Down Navigation: From Forest to Trees
The most effective dashboard strategies are hierarchical. Users start with the big picture and drill into detail only when something demands attention.
Enterprise Overview
└── Site Dashboard (click a site)
└── Area Dashboard (click an area)
└── Asset Dashboard (click an asset)
└── Metric Detail (click a metric)Linking Dashboards
Connect widgets so clicking a summary card on the enterprise dashboard opens the site-level dashboard, pre-filtered to the selected site.
- Select the source widget
- Click the Link icon
- Set destination dashboard
- Define which parameter passes (site ID, device type, etc.)
Global Filters
Apply filters across every widget on a dashboard simultaneously:
- Time range selector -- Control the viewing window for all charts
- Device type filter -- Show data for one type across all widgets
- Site/location filter -- Limit all widgets to a specific facility
Performance Optimization
A dashboard that takes 30 seconds to load is a dashboard nobody uses.
The Performance Killers
- Raw data on long time ranges -- Querying 30 days of 5-second data = 518,400 data points per device per metric. Your browser will choke.
- Too many real-time widgets -- Each real-time widget opens a separate data stream. Ten real-time widgets means ten concurrent connections.
- Large device fleets without filters -- "Show me temperature for all 5,000 sensors" is not a dashboard request. It is a denial-of-service attack on your own UI.
The Performance Rules
- Use server-side aggregation for any time range over 1 hour
- Limit real-time widgets to 3-4 per dashboard (the ones that actually need live updates)
- Apply default filters -- Start filtered, let users expand
- Use tabbed layouts for secondary content instead of one mega-dashboard
- Set tiered refresh rates -- Critical alerts: 10s. Charts: 30s. Summary cards: 60s.
WIDGET TYPE REFRESH RATE REASON
──────────────── ────────────── ─────────────────────
Alert count 5-10 seconds Safety-critical awareness
Live gauges 10-15 seconds Operational monitoring
Time-series 30-60 seconds Trend, not instantaneous
Summary cards 60 seconds Aggregated, less volatile
Tables Manual/60s Reference dataDashboard Design Principles
Visual Hierarchy
Most important information goes top-left. That is where eyes land first in left-to-right cultures. Put your alert count and critical KPIs there. Never bury them in the bottom-right corner.
Color Discipline
- Red means danger. Only danger. Not "this month was worse than last month."
- Yellow/amber means attention needed soon.
- Green means within normal operating range.
- Blue for informational data with no implied status.
- Consider color-blind users -- add icons or patterns alongside color coding.
White Space
A cramped dashboard is an unreadable dashboard. Give widgets breathing room. If you need to squint, you need fewer widgets or bigger screens.
Mobile Responsiveness
More operators carry tablets than sit at desks. Test your dashboards on tablet-sized screens. Prioritize vertical scrolling over side-by-side layouts for mobile use.
The 5 Commandments of Dashboard Design
- One audience per dashboard. If executives and operators need different information, build two dashboards. Hybrid dashboards serve nobody well.
- Threshold colors must come from engineering specs. Not from "that looks about right." Wrong thresholds are worse than no thresholds.
- Aggregate before you render. Server-side aggregation, always. Your browser is not a data warehouse.
- Test with real users before publishing. Put the dashboard in front of an operator. Watch where their eyes go. Watch what confuses them. Iterate.
- Evolve continuously. The best production dashboards we have seen went through 3-5 revisions in the first 90 days based on user feedback.
What Comes Next
Your dashboards are displaying clean, well-aggregated, audience-appropriate data. But dashboards are reactive -- they require someone to look at them.
In Part 5: Analytics and AI Integration, we go beyond visualization into intelligence:
- Built-in statistical functions for trend detection
- Custom Python analytics for domain-specific calculations
- Anomaly detection that learns your equipment's normal behavior
- Machine learning integration for predictive capabilities
Series Navigation
Part — Title
1 — Introduction to IBM Maximo Monitor
2 — Getting Started with Maximo Monitor
3 — Data Ingestion and Device Management
4 — Dashboards and Visualization (You are here)
5 — Analytics and AI Integration
8 — Best Practices and Case Studies
Built by practitioners. For practitioners. No fluff.
TheMaximoGuys -- Maximo expertise, delivered different.



