Excelgoodies logo +44 (0)20 3769 3689

LEARN THIS HANDS ON

Power BI Reporting

. Live Online FILLING FAST
View all upcoming batches
From Excel to Power BI: A Finance Team’s Guide to Switching Without Breaking Everything

From Excel to Power BI: A Finance Team’s Guide to Switching Without Breaking Everything

Your finance team has a monster Excel file: 20+ tabs, a few hidden ones, thousands of VLOOKUPs, some INDEX/MATCH, a bit of VBA, and a monthly ritual where someone presses F9 and prays the forecast still ties to the trial balance. Management now wants this in Power BI, refreshed daily, without breaking everything.

This guide walks through a realistic migration path from that kind of Excel-driven process to Power BI, focusing on what you must change, what you can safely reuse, and how to avoid nasty surprises in a finance context.


Scenario: The Monthly Management Pack That Outgrew Excel

We’ll use a typical setup:

  • Source systems:
    • General ledger from an ERP (CSV or direct database export).
    • Budget and forecast maintained in Excel workbooks.
    • A few manual adjustments in separate Excel files.
  • Current process:
    • One master workbook with:
      • Raw data tabs (ERP exports pasted in).
      • Transformation tabs (cleanup, mapping to chart of accounts, FX conversion).
      • Calculation tabs (variance, KPIs, ratios).
      • Output tabs (P&L, BS, cash flow, management dashboards).
    • A bit of VBA to copy/paste, clear ranges, and refresh pivot tables.
  • Pain points:
    • File size and recalculation time.
    • Broken formulas when structure changes.
    • Difficult to refresh more than once per month.

The goal: move this to Power BI so the finance team can have daily or intraday refresh, controlled versions of measures, and less fragile logic—without losing control or auditability.


Step 1 – Decide What Stays in Excel and What Moves to Power BI

"From Excel to Power BI" doesn’t mean deleting Excel. For finance, Excel usually remains:

  • A front-end for ad-hoc analysis.
  • A data-entry surface for budgets, forecasts, and adjustments.

The switch is mainly about where core logic lives.

Good candidates to move into Power BI

For our scenario, these usually belong in Power BI:

  • Data cleansing and mapping
    • Chart of account mapping tables.
    • Cost center / legal entity mappings.
    • FX rates and standard conversions.
  • Core aggregation logic
    • P&L by month, entity, function.
    • Variance vs budget/forecast.
    • Financial ratios that depend on consistent aggregations.
  • Standard KPIs
    • Margin %, EBITDA, working capital metrics.

What often stays in Excel (at least initially)

  • Budget/forecast models with complex input templates.
  • One-off scenario modelling that changes every cycle.
  • Detailed schedules where users need free-form editing.

The practical move: treat Power BI as the single source of truth for numbers that should be consistent across the company, and Excel as a flexible consumer and input tool.


Step 2 – Reshape the Data Model: From Wide Excel Tabs to Star Schema

In the current workbook, you probably have a wide “data” sheet with columns like:

  • Date
  • Account
  • Cost center
  • Entity
  • Amount
  • Scenario (Actual/Budget/Forecast)

…plus a lot of helper columns.

Power BI works best with a fact table + dimension tables model.

Target model for the finance scenario

  • Fact table (e.g. FactLedger):
    • PostingDate
    • AccountID
    • CostCenterID
    • EntityID
    • ScenarioID
    • Amount
    • CurrencyID
  • Dimension tables:
    • DimAccount (AccountID, AccountNumber, AccountName, AccountType, P&L group).
    • DimCostCenter (CostCenterID, Name, Function, Region).
    • DimEntity (EntityID, LegalEntityCode, Country, ConsolidationGroup).
    • DimScenario (ScenarioID, ScenarioName: Actual, Budget, Forecast).
    • DimDate (Date, Year, Month, Quarter, etc.).
    • DimCurrency (CurrencyID, ISO code, description).

Why this matters for "not breaking everything"

  • Relationships replace VLOOKUP: In Power BI, relationships are defined once instead of repeated lookup formulas.
  • Measures replace scattered formulas: A margin calculation is a single DAX measure, not a copy/pasted formula across tabs.
  • Adding a new scenario or entity: You extend the dimension tables and refresh, rather than rewriting formulas.

The key migration step: use Power Query to build these tables from your existing Excel structure.


Step 3 – Move Transformations into Power Query (Instead of Excel Formulas)

In the original workbook, transformations are often done with:

  • Helper columns (e.g. mapping text codes to standard values).
  • Array formulas to derive flags (e.g. "is this account part of Gross Profit?").
  • Manual filtering and copy/paste.

In Power BI, this should move into Power Query.

Typical transformations for the finance scenario

Use Power Query to:

  1. Import ERP exports
    • From CSV, Excel, or direct database connection.
  2. Clean and normalize
    • Trim text, standardize date formats.
    • Remove obviously invalid rows.
  3. Merge with mapping tables
    • Join ledger lines to DimAccount, DimCostCenter, etc.
  4. Create scenario flags
    • Tag imports as Actual, Budget, Forecast.

Example: merging ledger lines with account dimension in Power Query:

let
    Source = Excel.Workbook(File.Contents("C:\Data\LedgerInput.xlsx"), true),
    LedgerRaw = Source{[Name="Ledger"]}[Content],
    LedgerTyped = Table.TransformColumnTypes(
        LedgerRaw,
        {
            {"PostingDate", type date},
            {"AccountNumber", type text},
            {"CostCenterCode", type text},
            {"EntityCode", type text},
            {"Amount", type number},
            {"CurrencyCode", type text}
        }
    ),
    AccountsSource = Excel.Workbook(File.Contents("C:\Data\Accounts.xlsx"), true),
    AccountsRaw = AccountsSource{[Name="Accounts"]}[Content],
    AccountsTyped = Table.TransformColumnTypes(
        AccountsRaw,
        {
            {"AccountNumber", type text},
            {"AccountID", Int64.Type},
            {"AccountName", type text},
            {"AccountType", type text},
            {"PLGroup", type text}
        }
    ),
    LedgerWithAccount = Table.NestedJoin(
        LedgerTyped,
        {"AccountNumber"},
        AccountsTyped,
        {"AccountNumber"},
        "AccountTable",
        JoinKind.LeftOuter
    ),
    ExpandedLedger = Table.ExpandTableColumn(
        LedgerWithAccount,
        "AccountTable",
        {"AccountID", "AccountName", "AccountType", "PLGroup"},
        {"AccountID", "AccountName", "AccountType", "PLGroup"}
    )
in
    ExpandedLedger

This replaces the equivalent VLOOKUPs in Excel and runs on refresh, not on every cell recalculation.

Practical guardrails

  • Keep Power Query for row-level transformations, DAX for aggregations and business logic.
  • Avoid mixing complex DAX calculated columns for tasks that are simpler in Power Query (e.g. text cleanup, basic mappings).

Step 4 – Replace Key Excel Calculations with DAX Measures

The biggest risk when switching is silently changing logic. Finance teams care deeply about:

  • Variance definitions.
  • FX conversion rules.
  • Aggregation levels (e.g. what counts as Operating Expense).

You need to translate these exactly into DAX measures.

Example: P&L Measures

Assume FactLedger[Amount] is stored in functional currency and DimAccount[PLGroup] defines groupings like "Revenue", "COGS", "Opex".

Basic measures:

Total Amount := 
SUM ( FactLedger[Amount] )

Revenue := 
CALCULATE ( 
    [Total Amount],
    DimAccount[PLGroup] = "Revenue"
)

COGS := 
CALCULATE ( 
    [Total Amount],
    DimAccount[PLGroup] = "COGS"
)

Gross Profit := 
[Revenue] - [COGS]

Gross Margin % := 
DIVIDE ( [Gross Profit], [Revenue] )

Example: Variance vs Budget

Assume DimScenario[ScenarioName] contains "Actual" and "Budget".

Actual Amount := 
CALCULATE ( 
    [Total Amount],
    DimScenario[ScenarioName] = "Actual"
)

Budget Amount := 
CALCULATE ( 
    [Total Amount],
    DimScenario[ScenarioName] = "Budget"
)

Variance := 
[Actual Amount] - [Budget Amount]

Variance % := 
DIVIDE ( [Variance], [Budget Amount] )

These measures centralize logic that previously lived in multiple Excel tabs. Changing a definition (e.g. what counts as Revenue) is now a single change in the model.

Avoiding common breakage

  • Keep measure names stable once published; changing them can break thin reports and external tools.
  • Avoid copying Excel’s cell-based mentality: measures should be context-aware, not hard-coded for a single report.

Step 5 – Handle Budgets and Forecasts Without Losing Control

Our scenario includes budgets and forecasts maintained in Excel. Moving to Power BI doesn’t mean forcing planners into the Power BI UI.

You have three practical options:

  1. Import Excel-based budgets into Power BI

    • Keep the budget model in Excel.
    • Standardize an output sheet (tabular format) that Power Query reads.
    • Refresh as needed (e.g. daily during budget season, weekly otherwise).
  2. Use OneDrive/SharePoint-hosted Excel as data source

    • Store budget files in a SharePoint or OneDrive library.
    • Connect Power BI to those files.
    • Benefit from scheduled refresh and version control.
  3. Move budget storage to a database or data warehouse

    • More work upfront, but better governance.

For many finance teams, option 1 or 2 is the pragmatic starting point.

Example: Reading a standardized budget sheet

Assume planners produce a sheet called BudgetOutput with columns:

  • Year
  • Month
  • AccountNumber
  • CostCenterCode
  • EntityCode
  • Amount

Power Query can read and append this to the fact table with a Scenario flag.

let
    Source = SharePoint.Files("https://contoso.sharepoint.com/sites/Finance", [ApiVersion = 15]),
    BudgetFile = Source{[Name="Budget.xlsx", FolderPath="https://contoso.sharepoint.com/sites/Finance/Shared Documents/"]}[Content],
    BudgetWorkbook = Excel.Workbook(BudgetFile, true),
    BudgetTable = BudgetWorkbook{[Name="BudgetOutput"]}[Content],
    BudgetTyped = Table.TransformColumnTypes(
        BudgetTable,
        {
            {"Year", Int64.Type},
            {"Month", Int64.Type},
            {"AccountNumber", type text},
            {"CostCenterCode", type text},
            {"EntityCode", type text},
            {"Amount", type number}
        }
    ),
    AddedScenario = Table.AddColumn(
        BudgetTyped,
        "ScenarioName",
        each "Budget",
        type text
    )
in
    AddedScenario

This produces a budget dataset that you can union with actuals in Power Query or keep as a separate fact table and bridge via Scenario.


Step 6 – Plan Refresh and Governance So Finance Doesn’t Lose Trust

A common way to "break everything" is to move to Power BI, then have numbers change unexpectedly because of refresh issues or uncontrolled changes.

For our scenario, focus on:

Refresh strategy

  • Actuals
    • Use scheduled refresh from ERP exports or database.
    • Frequency depends on source; daily is typical for finance.
  • Budgets/Forecasts
    • Refresh after planners publish new versions.
    • If using SharePoint/OneDrive, scheduled refresh plus manual on-demand for key cycles.

Make sure:

  • All sources used in the dataset support the configured refresh schedule.
  • Credentials and gateway settings are stable and monitored.

Governance of measures and model

  • Single dataset for core finance numbers
    • Publish one certified dataset (e.g. "Finance Core Model").
    • Build thin Power BI reports and Excel pivot tables on top.
  • Change management
    • Treat measure changes as controlled events.
    • Document definitions (even a simple table in the model with measure descriptions helps).

This keeps the finance team’s trust: numbers don’t change because someone edited a local copy of a workbook.


Step 7 – Keep Excel in the Loop: Analyze in Excel and Connected Workbooks

Finance users are comfortable with Excel. You can switch to Power BI without forcing them into a new UI for everything.

Two practical patterns:

  1. Analyze in Excel from a Power BI dataset

    • From Power BI Service, connect to the published dataset.
    • Users build pivot tables on top of the model.
    • Measures and relationships are reused exactly.
  2. Excel workbooks with Power BI connections

    • Create template workbooks that connect to the finance dataset.
    • Use pivot tables and cube formulas for management packs.

This preserves familiar workflows while moving logic and data management to Power BI.


Step 8 – Validate the New Model Against the Old Workbook

To avoid breaking everything, you need a structured reconciliation.

For our scenario, do this before declaring the migration finished:

  1. Pick key views

    • Monthly P&L by entity.
    • Variance vs budget for the latest period.
    • A few critical ratios.
  2. Export both Excel and Power BI results

    • From the old workbook: values for those views.
    • From Power BI: the same views via tables or Excel pivot tables.
  3. Compare at multiple levels

    • Grand totals.
    • By account group.
    • By entity.
  4. Investigate differences

    • If totals differ, check:
      • Data completeness (missing rows).
      • Mapping changes (dimensions not aligned).
      • Scenario tagging (actual vs budget misclassification).

Only once the new model reconciles for several periods should you retire the old workbook as the source of truth.


Practical Takeaway: Move Logic First, UI Second

For a finance team switching from Excel to Power BI, the safest path is:

  • Keep Excel as an entry and analysis tool.
  • Move data transformations into Power Query.
  • Centralize business logic into DAX measures on a clean star schema.
  • Publish a single, governed dataset and connect Excel to it.

If you treat Power BI as the new engine and let Excel remain a familiar steering wheel, you can switch without breaking the monthly pack—and gain a model that scales beyond the next budget cycle.

Editor's Note

This article reflects the gradual shift finance teams are making from fragile Excel-based management packs to governed Power BI models, especially in environments where monthly reporting has become too complex to maintain in a single workbook.

Professionals who want to apply these patterns to their own data can explore Excelgoodies' Power BI Reporting programme - taught live by instructors, with certification awarded once a real project is running at work.

Insights compiled through ongoing industry research and discussions within the Excelgoodies Analytics Community.

Power BI

New

Next Batches Now Live

Power BIPower BI
SQLSQL
Power AppsPower Apps
Power AutomatePower Automate
Microsoft FabricMicrosoft Fabrics
AzureAzure Data Engineering
Explore Dates & Reserve Your Spot → Reserve Your Spot →