Technical Debt & Rescue
Got legacy reports that take 40 minutes to refresh? A semantic model nobody dares touch? We diagnose the root cause, refactor the mess, and get your production environment back to peak freshness — without bringing the system down.
Common rescue missions
- ⚡ Report refresh times from hours → minutes
- ⚡ Broken DAX measures & circular dependencies
- ⚡ Duplicate tables across 15 workbook copies
- ⚡ Failed scheduled refreshes & gateway issues
- ⚡ Post-migration data reconciliation
Our approach
- Profile & benchmark current state
- Identify top 3 bottlenecks (usually 80% of pain)
- Fix in a staging environment, validate with stakeholders
- Cut over with rollback plan — zero downtime
Example deliverables
Performance Recovery Report
Before (Week 0)
Report refresh42 min
Failed queries / day23%
Model size2.1 GB
Duplicate measures47
User complaints / wk12
After (Week 6)
Report refresh4 min ▼90%
Failed queries / day1% ▼96%
Model size680 MB ▼68%
Duplicate measures0
User complaints / wk0
Root Cause Analysis Timeline
09:14
Alert: refresh failed 3x consecutively
Gateway timeout after 30 min
09:45
Diagnosis: cartesian product in fact join
Sales × Promotions = 840M rows inflated
11:20
Fix: bridge table + inactive relationship
Deployed to staging, validated by finance
14:00
Production cutover — refresh in 3m 48s
Rollback window closed. Incident resolved.
Data Model Cleanup
Legacy model (v14)
Tables: 34 (12 hidden duplicates) Relationships: 28 (4 bi-directional ⚠) Measures: 112 (47 duplicates) Calculated cols: 89 ← should be in ETL Import mode: 2.1 GB Refresh: Import all tables
Refactored model (v15)
Tables: 18 (star schema) Relationships: 16 (all single-direction) Measures: 65 (documented, grouped) Calculated cols: 12 (display only) Import mode: 680 MB Refresh: Incremental on facts