Sales Dashboard Project
Build a complete sales dashboard from scratch
Project Goal
Build a professional Sales Dashboard that executives actually use:

This dashboard answers the key questions every sales team needs:
- How are we performing this month/quarter/year?
- Which products drive the most revenue?
- Where are our strongest regions?
- Who are our top customers?
What You'll Build
| Visual | Purpose | Why It Matters |
|---|---|---|
| 4 KPI Cards | Revenue, Orders, Customers, Avg Order | Quick health check at a glance |
| Line Chart | Sales trend over time | Spot patterns and seasonality |
| Bar Chart | Top 10 products | Focus on what's working |
| Map | Sales by region | Geographic performance |
| Table | Top customers | Identify VIP accounts |
| Slicers | Date & Region filters | Self-service exploration |
Step 1: Get Your Data Ready
Before building visuals, you need clean data. For this project, use:
Option A: Power BI Sample Data
- Open Power BI Desktop
- Home → Get Data → More → Samples
- Select "Financial Sample" or "Sales & Marketing Sample"
Option B: Your Own Data (Excel) Create an Excel file with these columns:
| Column | Example | Type |
|---|---|---|
| OrderID | ORD-001 | Text |
| OrderDate | 2024-01-15 | Date |
| CustomerID | CUST-101 | Text |
| CustomerName | Acme Corp | Text |
| ProductName | Widget Pro | Text |
| Region | East | Text |
| Amount | 1250.00 | Number |
| Quantity | 5 | Number |
Step 2: Create Your Measures

Go to Modeling → New Measure and create these one by one:
Core Measures
Total Revenue = SUM(Sales[Amount])
Total Orders = COUNTROWS(Sales)
Unique Customers = DISTINCTCOUNT(Sales[CustomerID])
Avg Order Value = DIVIDE([Total Revenue], [Total Orders], 0)
Time Comparison Measures
LY Revenue =
CALCULATE(
[Total Revenue],
SAMEPERIODLASTYEAR(Calendar[Date])
)
YoY Growth =
DIVIDE(
[Total Revenue] - [LY Revenue],
[LY Revenue],
0
)
YTD Revenue =
TOTALYTD([Total Revenue], Calendar[Date])
Pro Tip: Always use DIVIDE() instead of / to avoid division by zero errors!
Step 3: Plan Your Layout

The F-Pattern Rule: Users scan dashboards in an F-shape. Put the most important info at the top-left.
| Position | Visual | Size |
|---|---|---|
| Top Row | 4 KPI Cards | 25% width each |
| Left Sidebar | Date + Region Slicers | 15% width |
| Center-Top | Line Chart (main story) | 60% width |
| Bottom-Left | Bar Chart (products) | 40% width |
| Bottom-Right | Map + Table | 40% width |
Enable Grid:
- View → Snap to Grid ✓
- View → Gridlines ✓
Step 4: Build KPI Cards

Create Revenue Card
- Click Card visual in Visualizations pane
- Drag Total Revenue measure to Fields
- Resize to fit top row (about 25% width)
Format the Card
Click the card → Format pane (paint roller icon):
| Setting | Value |
|---|---|
| Callout Value → Font | 45pt, Bold |
| Callout Value → Display Units | Millions (M) |
| Callout Value → Decimal Places | 1 |
| Category Label | On, 12pt |
| Background | White with subtle shadow |
Repeat for Other Cards
Create 3 more cards:
- Total Orders (display units: Auto)
- Unique Customers (display units: Auto)
- Avg Order Value (display units: Auto, 0 decimals)
Align them: Select all 4 cards → Format → Align → Distribute Horizontally
Step 5: Build the Line Chart

Create the Chart
- Click Line Chart in Visualizations
- Configure fields:
| Well | Field |
|---|---|
| X-axis | OrderDate (Month) |
| Y-axis | Total Revenue |
Format for Clarity
| Setting | Value |
|---|---|
| Title | "Monthly Sales Trend" |
| X-axis → Title | Off (dates are obvious) |
| Y-axis → Display Units | Millions |
| Data Colors | Your brand's primary color |
| Markers | On, size 5 |
Add Last Year Comparison (Optional)
Drag LY Revenue to Y-axis as second line:
- Use dotted line style
- Use lighter/gray color
- Add legend
Step 6: Build Top Products Bar Chart

Create the Chart
- Click Clustered Bar Chart
- Configure:
| Well | Field |
|---|---|
| Y-axis | ProductName |
| X-axis | Total Revenue |
Apply Top 10 Filter
This is crucial - don't show all products!
- Click the chart
- Open Filters pane (right side)
- Find "ProductName" in Visual level filters
- Change filter type to Top N
- Show top: 10
- By value: Total Revenue
- Click Apply filter
Format
| Setting | Value |
|---|---|
| Title | "Top 10 Products by Revenue" |
| Data colors | Gradient (dark to light) |
| Data labels | On, outside end |
Step 7: Build the Map

Create the Map
- Click Filled Map or Bubble Map
- Configure:
| Well | Field |
|---|---|
| Location | Region (or State/Country) |
| Size | Total Revenue |
| Color saturation | Total Revenue |
Format
| Setting | Value |
|---|---|
| Map style | Grayscale or Light |
| Bubble size | Min 5, Max 30 |
| Colors | Blue gradient (light=low, dark=high) |
Note: Maps require location data that Power BI can geocode. Use standard names like "California" not "CA".
Step 8: Build Top Customers Table
Create the Table
- Click Table visual
- Add columns:
- CustomerName
- Total Revenue
- Total Orders
Apply Top 10 Filter
Same as bar chart - filter to Top 10 by Total Revenue.
Format
| Setting | Value |
|---|---|
| Style | Alternating rows |
| Total Revenue | Format as currency |
| Grid | Subtle gray lines |
Add Conditional Formatting
- Click column → Format → Conditional formatting
- Add data bars to Total Revenue column
- Color: subtle blue gradient
Step 9: Add Slicers

Date Slicer
- Click Slicer visual
- Drag OrderDate to Field
- Click dropdown arrow → Select Relative Date
- Set to: "is in the last 1 year"
Region Slicer
- Add another Slicer
- Drag Region to Field
- Format → Slicer settings → Style: Dropdown
- Enable: Selection → Multi-select with Ctrl
Position Slicers
- Place on left sidebar
- Stack vertically
- Same width as each other
Step 10: Apply Theme & Polish

Apply a Professional Theme
- View → Themes
- Choose: Executive or Innovation
- Or import custom theme JSON
Final Formatting Checklist
| Element | Check |
|---|---|
| All visuals aligned | Use Snap to Grid |
| Consistent fonts | One font family |
| Consistent colors | 3-4 colors max |
| White space | Don't crowd visuals |
| Titles | Clear, descriptive |
| Numbers | Proper formatting (K, M, $) |
Add Report Title
- Insert → Text Box
- Type: "Sales Performance Dashboard"
- Format: 24pt, Bold, Dark gray
Add Last Refresh Date
- Insert → Text Box
- Add: "Last Updated: " + date
- Or create measure:
Last Refresh = NOW()
Final Result

Your completed dashboard should:
| Criteria | Check |
|---|---|
| Load in < 3 seconds | ✅ |
| Answer key business questions | ✅ |
| Look professional | ✅ |
| Work on mobile | ✅ |
| Cross-filter correctly | ✅ |
| Have clear visual hierarchy | ✅ |
Test Your Dashboard
Cross-Filtering Test
- Click a bar in the bar chart
- All other visuals should filter
- Click again to clear
Slicer Test
- Select a region in slicer
- All numbers should update
- Verify numbers make sense
Mobile Test
- View → Mobile Layout
- Rearrange visuals for phone
- Preview in Power BI Mobile app
Common Mistakes to Avoid
| Mistake | Fix |
|---|---|
| Too many visuals | Stick to 5-7 max |
| Rainbow colors | Use 3-4 colors |
| Tiny fonts | KPIs should be 40pt+ |
| No filters | Always add date slicer |
| Showing all data | Use Top N filters |
| Cramped layout | Add white space |
Next Steps
- Save your .pbix file
- Publish to Power BI Service
- Share with your team
- Schedule automatic refresh
- Collect feedback and iterate
Congratulations! You've built a professional sales dashboard. This same pattern works for any business - just change the data source and measures!