GARNET GRID LOADING CASE STUDY...
Home Solutions Showcase Insights Pricing Tools Live Website Builder Website Quiz ROI Calculator Architecture Audit Contact
Showcase Case Study
Manufacturing · Analytics

Global Financial
Consolidation

How we unified 12 global business units into a single Power BI semantic model — cutting monthly close reporting from 4 days to 3 hours and saving $1.2M annually.

4d → 3h Close Time
500M+ Rows Modeled
12 Business Units
$1.2M Annual Savings

Client Context

A global manufacturing conglomerate operating across 12 business units in 4 continents engaged Garnet Grid to solve a critical visibility problem: their executive leadership lacked a single source of truth for financial performance.

Each division maintained its own reporting stack — a patchwork of Excel workbooks, on-premise SSRS reports, and legacy Crystal Reports. Monthly close required manually exporting and reconciling data from 7 different ERP instances, 3 separate chart-of-account structures, and 4 different currencies.

The existing process consumed the FP&A team's first four working days every month, delaying strategic decision-making and introducing reconciliation errors that averaged $340K in quarterly adjustments.

Power BI Premium Azure SQL DAX Composite Models Incremental Refresh Row-Level Security Power Automate Azure Data Factory

Four Days of Darkness Every Month

The CFO's team coined a term for the first week of every month: "the blackout." No real-time data, no KPI visibility, just spreadsheet reconciliation across time zones.

🗄️ Data Silos

Seven disconnected ERP instances across D365, SAP, and Oracle — each with different chart-of-account hierarchies, fiscal calendars, and currency denominations.

⏱️ Manual Reconciliation

FP&A analysts spent 4 full days every month exporting, transforming, and validating data in Excel. Intercompany eliminations alone required 6 hours of manual cross-referencing.

🔒 Security Gaps

Regional controllers could see all divisions' data. No row-level governance existed, creating compliance risk across EU data residency requirements.

📊 Stale Reporting

Reports were static snapshots — by the time the board saw them, the data was 5-7 days old. No capability for drill-through or ad-hoc analysis.

Unified Semantic Architecture

We designed a three-tier Power BI architecture that centralized all financial data into a single semantic model while preserving each division's autonomy and data ownership.

01 — Data Integration Layer

Azure Data Factory orchestrates nightly extractions from all 7 ERP systems, normalizing chart-of-account structures into a unified conformed dimension. Currency conversion uses daily ECB rates stored in a dedicated Azure SQL reference table.

02 — Semantic Model

A single Power BI Premium composite model spans 500M+ rows using DirectQuery for real-time actuals and Import mode for historical aggregates. Incremental refresh partitions ensure sub-30-second load times despite data volume.

03 — Row-Level Security

Dynamic RLS roles map to Azure AD groups, ensuring each regional controller sees only their division's data. The CFO's executive role provides a unified cross-BU view with drill-through to any division.

04 — Automated Distribution

Power Automate flows deliver paginated PDF snapshots to board members on the 2nd business day of each month. Data-driven alerts notify the CFO of any BU exceeding variance thresholds.

DAX Patterns & Model Design

The core challenge was computing intercompany eliminations and currency-adjusted P&L aggregations across 12 business units without sacrificing query performance. We developed a set of reusable DAX measure patterns that handle multi-currency consolidation at the calculation layer.

consolidation_measures.dax
// Consolidated Revenue with Dynamic Currency Conversion Consolidated Revenue = VAR _LocalRevenue = SUMX( FactFinancials, FactFinancials[Amount] * RELATED(DimCurrency[ExchangeRate]) ) VAR _ICEliminations = CALCULATE( [IC Elimination Amount], USERELATIONSHIP( FactFinancials[CounterpartyBU], DimBusinessUnit[BU_Key] ) ) RETURN _LocalRevenue - _ICEliminations // Row-Level Security Filter Expression [BU Access Filter] = VAR _UserBUs = CALCULATETABLE( VALUES(SecurityMapping[BU_Key]), SecurityMapping[UserPrincipalName] = USERPRINCIPALNAME() ) RETURN DimBusinessUnit[BU_Key] IN _UserBUs

We also implemented a star-schema with 14 conformed dimensions, including a custom fiscal calendar dimension that handles 3 different fiscal year-end dates across the group. The model's partition strategy uses incremental refresh with a 2-year rolling window — only the current quarter refreshes nightly, while historical partitions remain cached.

Measurable Impact

The transformation was deployed in a phased rollout over 10 weeks. By Month 2, the CFO was running ad-hoc profitability analyses that previously required a week of analyst preparation.

Metric Before After Improvement
Monthly Close Reporting 4 business days 3 hours ▲ 96% faster
Data Freshness 5–7 days stale Near real-time ▲ Same-day
Reconciliation Errors ~$340K/quarter $0 ▲ 100% eliminated
FP&A Analyst Hours 160 hrs/month 12 hrs/month ▲ 92% reduction
Ad-Hoc Analysis Turnaround 3–5 business days Self-service, instant ▲ On-demand
Annual Cost Savings $1.2M ▲ Direct savings
We went from four days of spreadsheet chaos to having our consolidated P&L ready before the second business day. The board now makes decisions with data that's hours old, not weeks. This project didn't just improve reporting — it changed how our leadership team operates.
VP
VP of Financial Planning & Analysis
Global Manufacturing Group — Fortune 1000

Ready to Transform Your Reporting?

Let's discuss how a unified analytics architecture can eliminate your data silos.

Start Your Project →