Power BI Sales Dashboard Project
A real project ties every skill into one workflow: connect, clean, model, calculate, visualize, and publish. This walkthrough builds a sales report for a fictional company named BrightMart, an online store that sells home goods.
The Business Questions
Every report starts with questions. The BrightMart director wants answers to these:
- How much revenue and profit did we earn this year?
- Which categories and cities perform best?
- How does this month compare with the same month last year?
- Which customers bring the most value?
The Data Files
| File | Content |
|---|---|
| Orders.xlsx | Order ID, Date, Product ID, Customer ID, Quantity, Price, Cost |
| Products.csv | Product ID, Name, Category, Brand |
| Customers.csv | Customer ID, Name, City, Segment |
The Target Design
+--------------------------------------------------+ | Slicers: Year | Category | City | +--------------+---------------+-------------------+ | Revenue Card | Profit Card | Orders Card | +--------------+---------------+-------------------+ | Line: Revenue by Month | Bar: Revenue by Category| +-------------------------+------------------------+ | Map or Bar: City | Table: Top 10 Customers | +-------------------------+------------------------+
Step 1: Load and Clean
- Choose Get data and connect to the three files.
- Open Power Query Editor. Set correct data types for dates, whole numbers, and decimals.
- Remove duplicate rows and blank rows in Orders.
- Trim spaces in text columns such as City.
- Rename columns with clear names and apply changes.
Step 2: Build the Model
- Create a Date table with CALENDAR and mark it as a date table.
- Open Model view and connect Products[Product ID], Customers[Customer ID], and Date[Date] to the Orders table.
- Check that every relationship is one-to-many with single direction filtering.
- Hide key columns in Orders to keep the field list tidy.
Products ---\
\
Customers ----> ORDERS <---- Date
Step 3: Write the Measures
Revenue = SUMX(Orders, Orders[Quantity] * Orders[Price])
Total Cost = SUMX(Orders, Orders[Quantity] * Orders[Cost])
Profit = [Revenue] - [Total Cost]
Profit Margin = DIVIDE([Profit], [Revenue])
Order Count = DISTINCTCOUNT(Orders[Order ID])
Revenue LY = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
Revenue Growth = DIVIDE([Revenue] - [Revenue LY], [Revenue LY])Place all measures in a dedicated table named Measures to keep the field list organized.
Step 4: Design the Report
- Apply a theme with a restrained palette.
- Add three card visuals for Revenue, Profit, and Order Count.
- Add a line chart with Date[Month Name] on the axis and Revenue as the value.
- Add a bar chart for Revenue by Category.
- Add a map or bar chart for Revenue by City.
- Add a table with the top ten customers using a Top N filter.
- Add slicers for Year, Category, and City, and align them in a neat row.
- Use conditional formatting to color Revenue Growth green when positive and red when negative.
Step 5: Add Interactivity
- Create a drill through page named Customer Detail.
- Add a report page tooltip for the category bar chart.
- Add bookmarks and buttons to switch between Revenue and Profit on the monthly chart.
Step 6: Publish and Secure
- Publish the file to a workspace named BrightMart Sales.
- Schedule a daily refresh and set up a gateway if the files sit on a local server.
- Set up row-level security so each city manager sees only that city.
- Pin key visuals to a dashboard and package everything into an app.
Quality Checklist
| Check | Question |
|---|---|
| Accuracy | Do totals match the source files? |
| Clarity | Does each visual have a clear title? |
| Speed | Does each page load in a few seconds? |
| Security | Does each role show only the intended rows? |
Key Points
- Start every project with the business questions.
- Clean data in Power Query before modeling.
- A star schema with a date table supports every calculation.
- Measures, visuals, and interactivity tell the story.
- Publishing, refresh, and security complete the delivery.
