- Turn business questions into KPIs, measures and visuals
- Carry out the whole workflow, from source to app, in order
- Reconcile the numbers with the source before publishing
- Know Copilot's capabilities, requirements and limits
In this lesson we bring every part of the course together in one project. The director of a three-store chain has set the task: “When I open it each morning, I want to see the state of sales, the growth, the best city and product; and the managers should see only their own store.” We will work in stages and check the numbers at the end of each one — that is how a professional analyst works.
Stage 1: from questions to KPIs
| Business question | Measure | Visual |
|---|---|---|
| How much did we sell? | Total Sales, Orders, AOV | Card |
| Are we growing? | Sales YTD, Sales LY, YoY % | KPI, Line chart |
| Which city and product lead? | City Rank, % of All Cities, Top Product | Clustered bar chart, Matrix |
| Who are the most valuable customers? | Sales per Customer | Table |
- AOVaverage order value, ₼
- Ssales in the selected period, ₼
- Nnumber of orders
On the sample data: 665 / 8 = 83.125 ₼; in Baku 345 / 4 = 86.25 ₼.
Stage 2: data, model and the measure layer
- 1Sources
Monthly sales CSVs sit in a SharePoint folder, and
ProductandStoreare in an Excel file stored there too. Because we chose a cloud source, no gateway will be needed later. - 2Power Query
Combine the folder's files with
Combine & Transform Data, drop unneeded columns, set types with a locale, applyTrimto the keys and move the folder path into a parameter. - 3Model
A star schema:
Salesin the middle;Product,Store,Customerand a DAX-builtDatearound it. All relationships are*:1andSingle; the date table is marked,Auto date/timeis off and the keys are hidden. - 4Measure layer
Create an empty
_Measurestable withHome › Enter dataand collect every measure there, so users find them in one place. Give each measure a format and aDescription.
Total Sales = SUMX ( Sales, Sales[Quantity] * Sales[UnitPrice] )
Orders = COUNTROWS ( Sales )
AOV = DIVIDE ( [Total Sales], [Orders] )
Sales LY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )
YoY % = DIVIDE ( [Total Sales] - [Sales LY], [Sales LY] )
City Rank = RANKX ( ALL ( Store[City] ), [Total Sales] )
Top Product =
VAR T = TOPN ( 1, VALUES ( Product[Product] ), [Total Sales] )
RETURN CONCATENATEX ( T, Product[Product], ", " )TOPN picks the product with the highest sales and CONCATENATEX turns it into text (on a tie the names are listed with commas).Reconcile the measure results for January–March 2026 with the source file and find Top Product for Baku.
Show solutionHide solution
SUM = 665 ₼ and the row count = 8 → Total Sales = 665, Orders = 8, AOV = 83.125 ₼ ✓.2) Distinct customers: C1, C2, C3, C4 → 4 ✓.
3) Months: January 120 + 50 + 45 = 215, February 120 + 100 + 60 = 280, March 80 + 90 = 170; total 665 ✓.
4) Across the chain
Top Product = Backpack (120 + 80 = 200).5) In Baku: Headphones 120, Notebook 100, Backpack 80, Keyboard 45 → Headphones.
All checks pass — the report can be published.
Stage 3: report pages
- Overview:
Total Sales,Orders,AOVandCustomerscards plus theSales YTDKPI on top; a monthly line chart in the middle (215 → 280 → 170) with a bar chart by city next to it; one date slicer. - Products: a
Category→Productmatrix with conditional formatting on% of Category; the page is also the drillthrough target forProduct. - Customers: a customer table (
Total Sales,Orders,Sales per Customer) with bookmark buttons to switch between table and chart. - City tooltip: a mini page that opens when you hover over a city —
Total Sales,City Rank,Top Product.
Monthly sales of the bigger shop (from the time intelligence lesson): 2025 — 1000, 1200, 1100; 2026 — 1150, 1300, 1210 ₼ (January–March). With Quarter = Q1 of 2026 selected in the slicer, what will the YoY % card show?
Show solutionHide solution
Total Sales = 1150 + 1300 + 1210 = 3660 ₼.2)
SAMEPERIODLASTYEAR shifts the same days to 2025: Sales LY = 1000 + 1200 + 1100 = 3300 ₼.3)
YoY % = (3660 − 3300) / 3300 = 360 / 3300 ≈ 10.91%.Note: the average of the monthly percentages, (15% + 8.33% + 10%) / 3 ≈ 11.11%, is wrong — a quarter's percentage is computed from the quarter's totals.
Stage 4: publish, secure, refresh, app
Publish to the “Sales Analytics” workspace with Home › Publish. Create a dynamic RLS role with the rule Store[ManagerEmail] = USERPRINCIPALNAME (), add the managers to the role in the Service and check it with Test as role. Because the source lives in SharePoint, schedule the refresh for 07:00 without a gateway. Finally, publish an app with two audiences using Create app — “Directors” see every page, “Managers” see Overview and Products — and endorse the semantic model as Promoted.
Copilot in Power BI
Copilot is an assistant based on generative AI. Requirements: the workspace must be on paid Fabric capacity (F2 or higher) or Power BI Premium (P1 or higher); trial capacities and free SKUs are not supported, and a Pro or PPU licence alone is not enough. The administrator must not have turned off the Users can use Copilot and other features powered by Azure OpenAI setting. In Desktop, Copilot needs write access to a workspace on such capacity.
- Summarise a report and ask questions about the data in the Copilot pane on the right of a report.
- Create or edit a report page from a description and add a summary (narrative) visual to a page.
- Write and explain DAX queries in
DAX query viewand add descriptions to measures. - A separate full-screen standalone Copilot (preview) finds and answers questions about any report or model you can access.
Make a sales report.Create a page named Overview with cards for [Total Sales],
[Orders] and [AOV], a line chart of [Total Sales] by
'Date'[Month], and a bar chart of [Total Sales] by
Store[City] sorted descending.Key points
- Order: question → measure → visual; a visual that is not in the plan does not go on the dashboard.
- Keep the measure layer in its own table with formats and descriptions.
- Reconcile numbers with the source before publishing; a quarter's percentage is not the average of monthly ones.
- A cloud source refreshes without a gateway; dynamic RLS and an app with audiences simplify sharing.
- Copilot needs F2+ or P1+ capacity; always verify its results.
Check yourself
10 questions. Every correct answer earns XP.