Skip to content
ArumSoft Learning
KO

    Expert Excel · Tutorial 12 of 12

    Excel Capstone Project: Build a Complete Solution

    A guided project brief: build a refreshable operations model from five sources, with queries, a star schema, measures, a two-audience dashboard, QA checks, automation and a handoff.

    Level
    Expert
    Time
    15 min read
    Updated:
    Applies to:
    Excel for Microsoft 365
    Eight sales and the region table. The revenue total ties to the export, but O-105 maps to no region, so the region report would be 400 short.
    Example: Eight sales and the region table. The revenue total ties to the export, but O-105 maps to no region, so the region report would be 400 short.

    What you'll learn

    • Turn a brief with five data sources into a design, a workbook map and acceptance criteria
    • Build refreshable queries that route bad rows to an exceptions list
    • Model the data as a star schema with reusable measures and named logic
    • Design report pages for two audiences and prove the numbers with QA checks
    • Automate one step, then protect, document and hand off the workbook

    Example file

    Excel Capstone Project - Build a Complete Solution.xlsx

    Download the workbook used in this tutorial and follow along in Excel.

    Excel workbook (.xlsx) · 7 KB

    Download example file

    This project brings the expert tutorials together in one piece of work: a refreshable operations model, built from five sources and delivered as if another team will own it after you. There's no single right answer, so this guide gives you the brief, the milestones in order, what each one must produce and the standard to review the finished workbook against. Plan for several working sessions, not one sitting.

    Check you're ready

    Each milestone uses skills from an earlier tutorial. If one of these is shaky, go back to it first: the capstone is a checkpoint, not the place to meet a skill for the first time.

    You'll need toCovered in
    Turn a vague request into requirements and a workbook mapPlanning an Excel Solution
    Write reusable logic with LET and LAMBDAReusable Formulas with LAMBDA and Dynamic Arrays
    Build queries that refresh from a folder and handle bad rowsPower Query Engineering
    Design a star schema and explain filter contextData Modeling and DAX Measures
    Choose an automation path by its maintenance riskAutomating Excel with VBA; Office Scripts and Power Automate
    Design a dashboard for two audiencesBuilding Interactive Dashboards
    Add tests and a reconciliationTesting Excel Models and Keeping Audit Trails
    Protect, version and hand off a workbookSecuring and Deploying Excel Workbooks

    The brief

    A sales operations team wants one workbook to replace a pile of weekly spreadsheets. Every Monday, the operations manager needs to know which regions are behind their monthly target and which orders need attention. Once a month, the sales director needs revenue against target by region, and the trend.

    Five sources feed the model:

    SourceKeyAddsRefreshControl checkOwner
    Sales exportOrder IDRevenue per orderA new file in a folder each weekRow count and revenue total match the exportSales Ops
    Product tableProduct IDCategoryMonthlyNo sale has a missing or unknown Product IDProduct Ops
    Region tableRegion IDRegion name, managerQuarterlyEvery sale maps to a regionFinance
    Targets fileRegion ID + monthMonthly goalMonthlyEvery active region has a targetFP&A
    Calendar tableDateMonth, quarter, yearOnce a yearDates cover every transactionYou

    If you don't have real exports, make realistic ones: three weekly CSV files of a few hundred rows each, plus the four smaller tables. Plant some problems on purpose: a sale with a blank Product ID, one with a Region ID that isn't in the region table, and a revenue value typed as text. A model is only tested when it meets bad data.

    Milestone 1: Write the design brief and workbook map

    Before you open Power Query, write the one-page brief: the two decisions (who is behind this week; how each region is doing against target this month), the decision owners, the inputs, the outputs, the refresh cadence (weekly) and at least three acceptance criteria someone else could test.

    Then map every layer of the workbook to this project:

    LayerIn this project
    SourceThe Sales folder of weekly CSVs, and the Products, Regions and Targets files
    StagingOne connection-only query per source, typed and cleaned
    ModelData Model with Sales and Targets as fact tables, Products, Regions and Calendar as dimensions, and the measures
    ReportAn Executive page and an Operations page
    QAA Checks sheet with an overall status
    NotesOwner, refresh steps, assumptions register, change log, version

    Done when the requester has read the brief and agreed it, before you build anything.

    Milestone 2: Ingest and validate with Power Query

    • Load the weekly files from a folder. Use Data then Get Data then From File then From Folder, then Combine & Transform Data. A new file dropped into the folder is picked up at the next refresh. Keep the Source.Name column the combine step adds, so every row says which file it came from.
    • Keep the folder path in a parameter (Manage Parameters in the Power Query Editor), so moving the folder means changing one value, not editing a step.
    • Set data types as a step of their own, then deal with what fails. A revenue value typed as text becomes an error when you change the column to a number type.
    • Route bad rows, don't delete them. Build an Exceptions query that lists every rejected row with a reason: errors from the type change, blank Product IDs, and sales whose key has no match. A Left Anti merge of Sales with Products returns exactly the sales whose Product ID isn't in the product table. Load Exceptions to a sheet; the operations team will read it.
    • Load staging queries as connections only. In the Power Query Editor, click the arrow on Close & Load on the Home tab and choose Close & Load To. Select Only Create Connection and tick Add this data to the Data Model for the tables the model needs.

    Done when you can drop a new weekly file into the folder, click Data then Queries & Connections then Refresh All and see its rows in the model with no query edits, and every planted problem appears in Exceptions.

    Milestone 3: Model the data and write reusable logic

    Build a star schema: Sales in the middle, related to Products, Regions and Calendar. Targets is a second fact table at a different grain (one row per region per month). Store each target against the first day of its month and relate it to Regions on Region ID and to Calendar on Date. Both fact tables are then filtered by the same dimensions, so a PivotTable with Region in Rows can show revenue and target side by side. Report targets by month or above: at day level, each target sits on the 1st.

    Write at least three measures, each building on the last:

    Total Revenue := SUM(Sales[Revenue])
    Total Target := SUM(Targets[Goal])
    % of Target := DIVIDE([Total Revenue], [Total Target])
    

    DIVIDE returns a blank instead of an error for a region with no target yet, which your QA checks will catch.

    The status rule (On target, Watch or Behind) is used on both report pages, so define it once. Put the Watch level, say 90%, in a named cell called WatchLevel in the assumptions register, then save this LAMBDA in Formulas then Defined Names then Name Manager as TargetStatus:

    =LAMBDA(pct, IF(pct>=1,"On target",IF(pct>=WatchLevel,"Watch","Behind")))

    Next to a % of Target value of 95% in C5, =TargetStatus(C5) returns Watch. When the business changes the Watch level, someone edits one cell and both pages follow.

    Done when a PivotTable by Region and Month shows the right revenue, target and % of target, and changing WatchLevel changes the statuses.

    Milestone 4: Design the two report pages

    Two audiences need two pages built on the same model. Write down the decision each visual supports; if you can't, the visual doesn't belong.

    VisualPageDecision it supports
    Revenue against target by regionExecutiveWhere to move sales support next month
    Twelve-month revenue trendExecutiveWhether the business is growing
    Regions at Watch or BehindOperationsWhich managers to call this week
    Exceptions listOperationsWhich records to fix before the next refresh

    Give each page one Month slicer and one Region slicer, connected to every PivotTable on that page (right-click the slicer and choose Report Connections). Put the refresh date and the overall QA status at the top of both pages, so a reader knows how current and how trustworthy the numbers are.

    Done when each audience can find their answer without help, and every visual has its decision written beside it.

    Milestone 5: Prove the numbers with QA checks

    Add at least three checks to the Checks sheet, including a reconciliation to the source totals: row count against the export, revenue total against the export's control total, no unmapped products, no unmapped regions, a target for every active region, and a calendar that covers the earliest and latest sale.

    The sample below shows why you need more than one kind of check. Order O-105 has Region ID R9, which isn't in the region table.

    ABCDEFGH
    1Order IDRegion IDRevenueRegionRegion IDRegionTarget
    2O-101R11,200NorthR1North3,000
    3O-102R2800SouthR2South2,000
    4O-103R11,500NorthR3East2,000
    5O-104R3950East
    6O-105R9400UnmappedSelectedR1
    7O-106R21,100SouthRevenue3,350
    8O-107R3700EastUnmapped1
    9O-108R1650NorthTotal checkPASS
    10
    11Export total7,300
    Eight sales and the region table. The revenue total ties to the export, but O-105 maps to no region, so the region report would be 400 short.

    The total check passes: the eight sales add up to 7,300, the same as the export. But North, South and East together show only 6,900, because the 400 from O-105 belongs to no region. A reconciliation alone would have called this report correct.

    Done when every check shows PASS on clean data, and each one fails when you break the data on purpose.

    Milestone 6: Automate one step

    Pick one step people repeat, and choose the simplest tool that does it reliably:

    If the step isUse
    A calculation repeated on every rowA formula or a measure
    Bringing in and cleaning new filesPower Query and Refresh All
    A routine someone runs in desktop Excel, such as exporting the Operations page to PDFVBA
    A job that must run on a schedule with nobody at a computerAn Office Script run by a Power Automate flow, on a file in OneDrive or SharePoint

    Check what the step depends on before you choose. A cloud flow can't refresh a query that reads a folder on your own computer, and a VBA macro won't run for someone who opens the file in Excel for the web. Write down what the automation does, what triggers it, what happens when it fails and who maintains it.

    Milestone 7: Protect, document and hand off

    • Protect every sheet that holds formulas, leave the assumptions register's input cells unlocked and protect the workbook structure.
    • Remove links to other workbooks, and set the version number and date.
    • Write the handoff note on the Notes sheet: purpose and decision owners, where the file lives, numbered refresh steps, what to check before sharing, known risks (for example, a renamed column in the export breaks the Sales query; a new region must be added to both Regions and Targets), the maintenance owner and backup, and the rollback plan.

    Then run the real test. Give the workbook and a new weekly file to someone who hasn't seen it, and ask them to refresh it, check it and tell you which regions are behind, using only the Notes sheet. Watch without helping. Every place they hesitate goes on your punch list.

    Review against the completion standard

    AreaDone when
    RequirementsThe brief names the decisions, their owners and testable acceptance criteria, and the requester agreed it
    IngestionA new weekly file loads with Refresh All and no query edits
    Bad rowsEvery rejected row appears in Exceptions with a reason
    ModelRevenue, Target and % of Target are measures and give correct totals by region and month
    Reusable logicThe status rule is defined once, and its threshold lives in the assumptions register
    ReportEvery visual states the decision it supports
    QAAt least three checks, including a reconciliation, all pass and each fails when broken
    AutomationOne step is automated, with its trigger, failure behavior and owner written down
    HandoffSomeone else refreshed and checked it from the Notes sheet alone; protection, version and rollback plan are in place

    Common mistakes

    • Building before the brief is agreed. The model ends up answering a question nobody asked.
    • Deleting bad rows. They vanish from the totals and nobody knows they existed. Route them to Exceptions.
    • Ratios worked out row by row. Averaging each row's % of target gives the wrong answer for a region. A measure divides the totals.
    • Automating a step that still changes. Automate it once the manual version has run the same way a few times.
    • Testing only on your own computer. Paths, add-ins and versions differ. The handoff test exists to find that.

    Practice

    Practice

    Build the complete refreshable model

    1. Write the brief, the workbook map and three acceptance criteria, and get them agreed.
    2. Build the folder query, a staging query for each source and an Exceptions query.
    3. Relate the tables as a star schema and write the three measures and the TargetStatus function.
    4. Build the Executive and Operations pages with their slicers, and write each visual's decision beside it.
    5. Add at least three QA checks, including a reconciliation, and an overall status.
    6. Automate one step and document it.
    7. Protect, version and document the workbook, then hand it to someone else and fix everything they stumble on.

    Warm up on the sample: map a sale to its region, total one region, count the unmapped rows and tie the total back to the export.

    Try it0 of 4 done

    1. In D6, look up the region name for the Region ID in B6, and show Unmapped if it isn't in F2:F4.
    2. In G7, add up the Revenue in C2:C9 for the Region ID selected in G6.
    3. In G8, count the sales rows in D2:D9 that show Unmapped.
    4. In G9, show PASS if the total of C2:C9 equals the export total in C11, otherwise FAIL.

    Click a dashed cell, type a formula in the bar and press Enter.

    ABCDEFGH
    1Order IDRegion IDRevenueRegionRegion IDRegionTarget
    2O-101R11,200NorthR1North3,000
    3O-102R2800SouthR2South2,000
    4O-103R11,500NorthR3East2,000
    5O-104R3950East
    6O-105R9400SelectedR1
    7O-106R21,100SouthRevenue
    8O-107R3700EastUnmapped
    9O-108R1650NorthTotal check
    10
    11Export total7,300

    Check your skills

    • Can you turn a vague request into a brief with decisions, owners and testable acceptance criteria?
    • Can you build queries that pick up new files and route bad rows to an exceptions list instead of deleting them?
    • Can you explain the fact and dimension tables in your model and write measures that give the right answer under any filter?
    • Can you choose an automation path and justify it by its maintenance risk?
    • Can you hand the workbook to someone who refreshes, checks and, if needed, rolls it back without you?

    Related

    Was this guide helpful? Spot a mistake? Send feedback · admin@arumsoft.com