100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Building a Sales Dashboard

A step-by-step walkthrough of designing, modeling, and publishing a real-world Power BI sales dashboard.

PracticeIntermediate11 min readJul 10, 2026
Analogies

Planning the Dashboard

Before opening Power BI Desktop, sit with the actual stakeholders — a VP of Sales, regional managers — and pin down which 4-6 KPIs matter most: typically total revenue, revenue growth versus prior period, average deal size, win rate, and pipeline value. Sketch the page layout on paper or in Figma first, deciding what a viewer needs to see in the first three seconds (usually big-number cards for the top KPIs) versus what belongs on a drill-through page (deal-level detail, rep-level breakdowns). Skipping this step is the single most common reason sales dashboards end up cluttered and unused.

🏏

Cricket analogy: A captain sets a bowling plan against a specific batter (say, targeting Kohli's leg-side weakness) before the over starts, rather than bowling reactively, just as a dashboard's KPIs should be chosen deliberately before any visual is built.

Data Model for Sales

A solid sales dashboard model centers on a Fact_Sales table (one row per order line: date, product, customer, salesperson, quantity, amount) connected to Dim_Date, Dim_Product, Dim_Customer, and Dim_Salesperson dimensions in a star schema. Bring in a Fact_Target table at the salesperson/month grain if the business tracks quotas, and relate it through Dim_Date and Dim_Salesperson so actual-vs-target comparisons work naturally. Keep transactional detail (individual line items) in the fact table but push descriptive attributes like product category, region, and customer segment into the dimension tables so slicers stay fast and the model stays clean.

🏏

Cricket analogy: The fact table storing every ball bowled (over, run, wicket) is like a scorecard's ball-by-ball log, while the dimension tables (bowler bios, venue details) are like the separate team-sheet reference data that log links back to.

DAX
Total Sales = SUM ( Fact_Sales[SalesAmount] )

Sales YoY Growth % =
VAR CurrentSales = [Total Sales]
VAR PriorYearSales =
    CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Dim_Date'[Date] ) )
RETURN
    DIVIDE ( CurrentSales - PriorYearSales, PriorYearSales )

Attainment % =
DIVIDE ( [Total Sales], SUM ( Fact_Target[TargetAmount] ) )

Visuals and Layout

Open the page with card visuals for Total Sales, YoY Growth %, and Attainment %, placed top-left where eyes land first, then add a line chart of sales trend by month to show trajectory, a matrix broken down by region and product category for detail, and a bar chart ranking top salespeople. Add slicers for Date range, Region, and Product Category near the top or in a consistent left rail, and sync slicers across pages using Sync Slicers so filtering feels consistent as users navigate. Conditional formatting on the matrix (color scale on Attainment %) turns a wall of numbers into an instantly scannable heat map.

🏏

Cricket analogy: Placing the score and required-run-rate cards top-left on a broadcast graphic, where viewers glance first, mirrors placing Total Sales and Attainment cards top-left on the dashboard.

Use conditional formatting with a diverging color scale (red-yellow-green) on the Attainment % column in the matrix visual — under Format > Cell elements > Background color > Format by: Rules or Color scale — so reps below quota are visually obvious without reading every number.

Publishing and Sharing

Publish the .pbix to a dedicated Power BI Service workspace (e.g., 'Sales Analytics'), then package the report into a Power BI App for distribution to end users rather than sharing the raw workspace, which keeps the editing environment separate from the consumption experience. If different regional managers should only see their own region's numbers, implement Row-Level Security (RLS) by creating roles in Power BI Desktop with DAX filter expressions (e.g., [Region] = USERPRINCIPALNAME()) and mapping users to roles in the Service, so one dataset securely serves every manager their own slice.

🏏

Cricket analogy: Publishing to an App instead of sharing the raw workspace is like giving fans a curated stadium broadcast feed rather than letting them wander the dressing room, keeping production separate from consumption.

Row-Level Security filters data but does not hide measures, visuals, or DAX formulas from a determined user with Desktop access to the underlying dataset. RLS is a data-row filter, not a full security boundary — for genuinely sensitive data, also control who can download the .pbix or connect via Analyze in Excel.

  • Interview stakeholders and pick 4-6 core KPIs before opening Power BI Desktop.
  • Model sales data as Fact_Sales at the order-line grain surrounded by Dim_Date, Dim_Product, Dim_Customer, and Dim_Salesperson.
  • Add a Fact_Target table for actual-vs-quota comparisons, related through Date and Salesperson dimensions.
  • Lead the page with card visuals for top KPIs, then trend and breakdown visuals for detail.
  • Use synced slicers for Date, Region, and Category so filtering feels consistent across pages.
  • Apply conditional formatting to turn dense matrices into scannable heat maps.
  • Publish via a Power BI App and implement Row-Level Security for region-specific access.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#PowerBIStudyNotes#BuildingASalesDashboard#Building#Sales#Dashboard#Planning#StudyNotes#SkillVeris#ExamPrep