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.
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
1. What is the recommended first step before opening Power BI Desktop to build a sales dashboard?
2. At what grain should a Fact_Sales table typically be built?
3. How should a Fact_Target table be related to Fact_Sales for actual-vs-quota reporting?
4. What is the primary purpose of Row-Level Security (RLS) in a shared sales dataset?
5. Why publish a Power BI App instead of sharing the raw workspace with end users?
Was this page helpful?
You May Also Like
Power BI Best Practices
A practical checklist of proven techniques for building fast, maintainable, and trustworthy Power BI reports.
Power BI Quick Reference
A fast-lookup cheat sheet of core DAX functions, UI shortcuts, common error messages, and licensing tiers.
Power BI vs Tableau
A grounded comparison of Power BI and Tableau across modeling, calculation languages, licensing, and ecosystem fit.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics