Building COVID-19 Dashboards

The Dashboard Challenge Nobody Planned For

Two months ago, I’d never built a pandemic dashboard. Now I’ve built two and helped three other organizations build theirs.  Welcome to 2020.

COVID-19 dashboards went from nonexistent to critical business infrastructure practically overnight. Organizations need to track cases, visualize capacity, monitor employee health, and communicate rapidly changing data to stakeholders. And they need it yesterday.

Here’s what I’ve learned building dashboards for rapidly changing pandemic data; the design principles, technical approaches, and mistakes to avoid when every number matters and data updates by the hour.

The Unique Challenges of Pandemic Data

Pandemic dashboards aren’t like your typical sales or operations dashboards. The stakes are higher, the data is messier, and the requirements change daily.

Data Changes Fast

Your typical dashboard shows weekly or monthly trends. COVID dashboards need hourly updates. Case counts change throughout the day. Testing capacity shifts. Hospital beds fill up. Your extract refresh schedule from 2019 doesn’t cut it.

Data Quality Is Inconsistent

We’re dealing with data from dozens of sources; health departments, internal HR systems, manual surveys, Johns Hopkins, WHO, CDC. Reporting standards vary. Definitions change. Counties report at different times. Some days data doesn’t come at all.

You can’t wait for perfect data. You build with what you have and clearly communicate limitations.

Design Principles for Crisis Dashboards

Start with these principles. Every decision should support at least one of them.

Clarity Over Complexity

This isn’t the time to show off your advanced Tableau skills. Drop the fancy animations, complex interactivity, and nested filters. Show the key metrics clearly and get out of the way.

We’ve all seen dashboards with 15 different views, 20 filters, and custom color schemes that make no sense. Nobody has time for that. Three to five key metrics, dead simple navigation, obvious conclusions.

Context Is Everything

Raw numbers mean nothing without context. “150 cases” sounds scary, but is that up or down? Is that per 100,000 people? What’s the testing rate? What was it yesterday? Last week?

Every number needs:

  • Trend direction (up/down/flat)
  • Comparison to previous period
  • Per capita normalization where relevant
  • Clear denominator (cases per 100k, tests per day, etc.)

Communicate Uncertainty

Don’t pretend you have perfect data. You don’t, and nobody else does, either. Call out data quality issues, reporting delays, and methodology changes directly in the dashboard.

Add text boxes explaining:

  • When data was last updated
  • Known issues or delays
  • Changes in reporting methodology
  • Data source limitations

Users need to understand what they’re looking at and what they shouldn’t conclude from it.

Technical Implementation

Data Sources

Where to get COVID data:

Johns Hopkins CSSE: Most widely used source for global and US data. Updates daily, available via GitHub. Quality is generally good but has occasional reporting issues.

The COVID Tracking Project: Excellent for US state-level testing data. More granular than JHU for some metrics.

State/Local Health Departments: Most authoritative for local data but formats vary wildly. Plan to do significant data prep.

CDC: Authoritative but sometimes slower to update than other sources.

Your Own Internal Data: For workplace dashboards, you’ll need data from HR, facility management, and health screening systems.

Data Refresh Strategy

Live connections aren’t realistic for most COVID data sources. Plan for frequent extract refreshes:

Public Health Dashboards: Refresh every 4-6 hours during business hours. Data sources typically update once or twice daily.

Internal Workplace Dashboards: Refresh every 1-2 hours if using live screening data.

Hospital Capacity Dashboards: Near real-time if possible—every 15-30 minutes for critical metrics.

Use Tableau Bridge or direct database connections for frequent updates. Don’t rely on manual file uploads.

Calculation Examples

7-Day Moving Average:

WINDOW_AVG(SUM([Cases]), -6, 0)

Table calculation, compute using Date. Shows smoothed trend.

Daily New Cases:

ZN(SUM([Total Cases])) - 
LOOKUP(ZN(SUM([Total Cases])), -1)

Table calculation to get difference from previous day. ZN() handles nulls.

Positivity Rate:

SUM([Positive Tests]) / SUM([Total Tests])

Format as percentage. Flag when above 5%.

Per Capita Normalization:

(SUM([Cases]) / [Population]) * 100000

Standardizes to per 100,000 population.

Conclusion

Building COVID-19 dashboards is hard. You’re dealing with messy data, high stakes, non-technical audiences, and constantly changing requirements. There’s no template you can copy and be done.

Start with clarity. One or two key metrics, displayed prominently, updated frequently, with clear context. Everything else is supporting information.

Design for mobile. People check these dashboards constantly from their phones. If it doesn’t work on mobile, it doesn’t work.

Keep it simple. This isn’t the time for fancy visualizations or complex interactivity. Show the information clearly and get out of the way.

Stay safe, keep your dashboards simple, and remember that perfect is the enemy of done. Get something useful in front of people quickly, then iterate based on feedback.