NDA notice
To comply with non-disclosure obligations, all corporate entities, internal ERP schemas and system identifiers have been generalised and anonymised. The methodologies, architectures and performance outcomes remain fully representative of the actual engagement.
Business Analyst Intern — Global Fortune 500 Enterprise — Dec 2025 → Feb 2026
Order Reporting
Automation System
A reporting task that depended on staff who understood how four enterprise tables connected — rebuilt so that anyone can produce the same report from a single order number, in about thirty seconds.
Knowledge locked inside people, not systems.
Generating a single customer order report required staff to navigate across multiple related Dataverse tables by hand. Although foreign-key relationships existed in the system, users still had to open each record, trace the relationships, and copy data into Excel one field at a time.
The process was slow, inconsistent, and entirely dependent on experienced staff who understood how the underlying data connected. When those staff were unavailable, reporting stopped. The challenge was never generating the report — it was making complex enterprise data understandable without requiring users to understand the database structure themselves.
- 01Fragmented data
- Related records spread across four Dataverse tables — no unified view.
- 02Manual FK resolution
- Users mentally traced PK/FK links between the master sales table and three transactional sub-tables.
- 03Undocumented logic
- Business rules — coalesce fallbacks, field mappings, country codes — lived only in experienced staff.
- 04Repetitive Excel work
- Final report assembly done by hand, every single time.
As-Is → To-Be
The same report, before and after. What changed is not the number of steps but who performs them, and how much a person has to know before they can start.
Time to produce one report — drawn to scale
Ten to one. The bar is the value, so a tenth of the length means a tenth of the time — a 93% reduction.
As-is · manual
- 01Search Dataverse manually
- 02Open related record
- 03Navigate another table
- 04Copy field by field
- 05Assemble in Excel
- 06Customer report
Avg 5+ minutes · inconsistent output · knowledge-dependent
To-be · automated
- 01Order number input
- 02Power Automate triggered
- 03Dataverse PK/FK resolved
- 04Business rules applied
- 05Office Script formats
- 06Customer report
Avg ~30 seconds · consistent output · no expertise needed
Abstracting database complexity from the user
Behind a single order number sat records spread across four Dataverse tables — an enterprise master sales table plus three transactional sub-tables for shipping, localisation and billing — connected by PK/FK relationships with multi-table coalesce fallback logic.
The resolution order checks the shipping sub-table first, falls back to billing, then to the master table — handling fields that exist only in specific sub-tables. Additional encoding covers shipping destination codes, foreign trade name truncation, and agency versus end-user name fallback.
510 → USA · 520 → UK
truncate at “ for ”
agency name → end-user fallback
Manual — before
Automated — after
How one report gets built
Six stages, one of which the user touches. Everything the experienced staff used to hold in their heads is encoded between stages two and four.
- 01
User input
A single order number — the only thing the user ever touches.
- 02
Relationship resolution
Power Automate queries Dataverse using the existing PK/FK structure to fetch all related records automatically.
- 03
Business rule application
Coalesce logic, country code mapping, name truncation and agency/end-user fallback, all encoded in the flow.
- 04
Data aggregation
Records from all four tables merged into a single unified structure.
- 05
Template instantiation
The master template is copied into a new transaction-specific file, protecting the original.
- 06
Frozen report output
Office Script runs formatting rules, locks the output, and delivers a standalone customer-ready report.
Template isolation as a design principle
Rather than writing data straight into a shared master template — which risks corruption or accidental modification — the solution copies the master for each run, injects data into the copy, runs the Office Script, and freezes the result as a standalone file.
Separating configuration from runtime data is a standard principle in maintainable enterprise systems. It ensures the master can never be corrupted by an individual report run, and every output is independently auditable.
- 01
Template.xlsx
Master — never modified by a report run.
- 02
Template_[OrderID].xlsx
A per-transaction instance, copied fresh each time.
- 03
Frozen_[OrderID].xlsx
Standalone read-only output, independently auditable.
across a dataset of 500,000+ historical records from eight global factories
Deliverables
What the engagement actually taught me, as opposed to what it shipped.
Analysis before automation
The right process came from understanding why the manual process existed and what it was trying to achieve — not from jumping to a technical solution.
Remove decisions, not just clicks
The best automation shifts cognitive burden from the user to the system. Users no longer needed to understand how the data connected.
Reliable data, reliable output
Correctly resolving PK/FK relationships across all four tables was the foundational design decision. Everything downstream depended on it.
Maintainability over complexity
Separating the template from runtime data was a deliberate governance choice that makes the system auditable, recoverable, and safe to iterate on.