Module 14 · Power BI Fundamentals
Final dashboard project
Plan and start a practice-management dashboard for a law firm, checking your model against known numbers before you build.
About 45 minutes
The problem
Ashgrove Chambers, a Lagos law firm, runs its practice from spreadsheets: matters, court hearings and invoices. The managing partner wants one report answering: How much work is open, and whose? How often are our hearings adjourned? How much money is outstanding, and who owes it?
That's your final project. This lesson sets it up and checks your model against numbers you know are right, so you start the design work on solid ground.
The concept
The data
| Table | One row is | Key columns |
|---|---|---|
clients | a client | client_id, client_name, client_type (Company/Individual) |
matters | a case or piece of work | matter_id, client_id, matter_title, practice_area, responsible_lawyer, opened_date, closed_date, status (Open/Closed/On hold) |
hearings | a court date | hearing_id, matter_id, hearing_date, court, outcome (Heard, Adjourned, Struck out, Judgment delivered, Scheduled) |
invoices | a bill | invoice_id, matter_id, issued_date, amount_ngn, status (Paid/Outstanding/Overdue), paid_date |
The model is a snowflake-ish star: clients (1) → matters (); matters (1) → hearings () and matters (1) → invoices (*). Add a Date table and relate it to the date you'll analyse most (e.g. invoices[issued_date]), with inactive relationships to the others, used with USERELATIONSHIP in measures where needed.
Measures you'll need (suggestions; name and format them well):
DAX
Open Matters = CALCULATE ( COUNTROWS ( matters ), matters[status] = "Open" )
Hearings Held = CALCULATE ( COUNTROWS ( hearings ), hearings[outcome] <> "Scheduled" )
Adjournment Rate =
DIVIDE (
CALCULATE ( COUNTROWS ( hearings ), hearings[outcome] = "Adjourned" ),
[Hearings Held]
)
Billed = SUM ( invoices[amount_ngn] )
Overdue Amount = CALCULATE ( [Billed], invoices[status] = "Overdue" )
Collection Rate = DIVIDE ( CALCULATE ( [Billed], invoices[status] = "Paid" ), [Billed] )Example
A three-page structure that works:
- Overview: cards (open matters, adjournment rate, overdue amount, collection rate); open matters by practice area; billed vs collected by month.
- Litigation: hearings by court and outcome; adjournment rate by court and practice area; upcoming (scheduled) hearings list.
- Billing: overdue invoices by client (top 10); ageing of unpaid invoices; collection rate trend.
Walkthrough
- Load the four CSVs; check the row counts and types (dates as Date).
- Build the relationships in Model view; check each is one-to-many and single direction.
- Add a date table and mark it.
- Write the measures above in a
_Measurestable. - Check before you design. Put each measure in a card and compare it with the answers below. If one disagrees, fix the model or measure first.
- Then design the pages, applying the dashboard design and storytelling lessons.
Practice
Practice
What is Ashgrove Chambers' adjournment rate: adjourned hearings ÷ hearings that have taken place (all outcomes except Scheduled)? One decimal place.
Practice
What is the total Overdue Amount, in naira?
Practice
How many matters are currently Open?
Check your understanding
Answer every question to check.
When you've finished, take the final assessment, then submit your dashboard through the final project page.