TEC-DATA85-11 · Lesson 7 · 12 clock hours · lab
Power BI Dashboard: City Data Storytelling
Objective. Students build a multi-page, interactive Power BI report connected to their analysis-ready dataset that enables a non-technical city stakeholder to explore key findings, applying PL-300 data-modeling and report-design best practices.
⚠ Pending professional review
This lesson, its worked examples and its practice questions has not yet been verified by an industry-certified professional or by a certification or approval body. It is a study draft and may contain errors. Do not use it as instructions for work on a job site or on live equipment. Always follow your instructor, your supervising professional, and current official references and regulations.
VoTechWorks program approval and accreditation are still in progress. Credentials are issued only by the certifying bodies named in each program, after their own exams.
Power BI Dashboard: City Data Storytelling
Why Dashboards Matter for City Stakeholders
A city department manager rarely has time to read a lengthy analysis report. What they need is a clear, interactive tool that lets them answer their own questions quickly. Power BI is one of the most widely used business intelligence platforms in government and industry, and building a well-designed dashboard is a core skill tested on the Microsoft PL-300 exam. In this lab you will connect your cleaned city dataset to Power BI Desktop, build a proper data model, write DAX measures, and publish a report that a non-technical stakeholder can navigate without your help.
Setting Up Your Data Model
A strong Power BI report begins with a clean data model, not just raw tables dropped into a file. The standard approach for analytics is the star schema: one central fact table (containing numeric measurements and foreign keys) surrounded by dimension tables (containing descriptive attributes such as neighborhood name, year, or department).
When you import your cleaned CSV into Power BI Desktop, check the following before building any visuals:
- Data types: Confirm that numeric columns are recognized as whole numbers or decimals, dates as date/datetime, and text fields as text. Wrong data types cause incorrect calculations and broken visuals.
- Relationships: Use the Model view to draw relationships between your fact table and dimension tables. A typical relationship is one-to-many (one row in the dimension matches many rows in the fact table). Set the cross-filter direction to Single unless you have a specific reason for bidirectional filtering, because bidirectional filters can produce ambiguous results.
- No circular relationships: Power BI will warn you, but always verify. A circular dependency breaks the model logic.
If your project dataset came from PostgreSQL rather than a CSV, use the PostgreSQL connector in Power BI Desktop. The modeling steps are identical once the data is loaded.
Writing DAX Measures
DAX (Data Analysis Expressions) is the formula language of Power BI. Two measure types you must include in this project are a year-over-year change and a per-capita rate.
A DAX measure lives in the report's data model, not in a column. Create measures by selecting a table in the Fields pane and choosing "New measure." Keep measure names descriptive so a stakeholder reading a tooltip understands it.
General patterns:
- Year-over-year change: Subtract the prior-year value from the current-year value. Power BI's time intelligence functions (such as `CALCULATE` combined with `SAMEPERIODLASTYEAR`) handle this when your date table is properly marked as a date table.
- Per-capita rate: Divide a count or total by a population figure. Store population in a dimension table and reference it in the measure formula.
Always test a new measure by placing it on a card visual with a known single value you can verify manually. This prevents silent errors from reaching your stakeholder.
Designing for a Non-Technical Audience
Before opening Power BI, sketch a storyboard: a simple wireframe showing each page of your report, the audience, the one key question that page answers, and the visual type chosen. Storyboarding forces you to think about communication before you think about software.
Report design principles that matter for PL-300 and for real city work:
- One question per page: Each report page should have a clear title that states what the user will learn. City stakeholders scan quickly; a cluttered page with five different topics loses them.
- Slicers for self-service: A slicer tied to year, neighborhood, or category lets the manager filter data without needing your help. Place slicers in a consistent location across pages.
- Map visuals for spatial data: City data almost always has a geographic dimension. A filled map or bubble map lets stakeholders see patterns instantly. Confirm that your location field (city, ZIP code, or latitude/longitude pair) is recognized correctly by Power BI to avoid misplotted points.
- KPI cards for headline numbers: A KPI card showing total incidents, average response time, or population served gives the stakeholder a single number to anchor the conversation.
- Accessible color palettes: Avoid red-green combinations as the sole differentiator; a significant portion of the population has difficulty distinguishing those colors. Use labels and tooltips as a second layer of information.
Publishing and the Usability Walk-Through
When your report is complete, publish it to Power BI Service using the free workspace associated with your Microsoft account. This generates a shareable link. Submit that link to your instructor.
The usability walk-through is the most important quality check in this lab. Your instructor will navigate the report as a city department manager without any help from you. If they cannot find a filter, misread a chart title, or cannot answer the page's stated question within a few minutes, that is a design failure — not a user failure. Common issues to prevent:
- Unlabeled axes or visuals with no title
- Slicers that affect only one visual when they should affect the whole page
- Measures that display too many decimal places for a general audience
- Navigation buttons between pages that are missing or hard to see
Safety and Professional Responsibility
City datasets often contain information about real residents. Before publishing any report — even to a free workspace — confirm that your dataset has been de-identified according to your project guidelines. Do not publish names, addresses, or other personally identifiable information to any cloud service without explicit authorization. Data privacy is a professional and ethical obligation, and mishandling public data can cause real harm to individuals and to your program's community relationships.
Connecting This Lab to PL-300
The PL-300 exam tests data modeling, DAX, report design, and Power BI Service tasks — exactly what this lab covers. Reviewing Microsoft Learn's PL-300 study guide after completing this lab will reinforce the terminology and concepts the exam expects. Every skill you practice here maps directly to exam objectives.
Key terms8
Star schemaA data model structure with one central fact table connected to multiple dimension tables, designed to make queries efficient and relationships easy to understand.
DAX (Data Analysis Expressions)The formula language used in Power BI to create calculated columns and measures that perform aggregations, comparisons, and time-intelligence calculations.
MeasureA DAX formula stored in the data model that computes a value dynamically based on the current filter context, as opposed to a static calculated column.
SlicerA visual filter control placed on a Power BI report page that allows users to interactively narrow the data shown in other visuals on that page.
KPI cardA Power BI visual that displays a single key metric prominently, sometimes alongside a target or trend indicator, to give stakeholders an at-a-glance headline number.
Filter contextThe set of filters currently applied to a data model that determines which rows are included when a DAX measure or visual calculates its result.
Power BI ServiceThe cloud-based platform at app.powerbi.com where Power BI reports are published, shared, and managed; separate from Power BI Desktop, which is the authoring tool.
StoryboardA wireframe or sketch created before building a report that identifies the audience, the question each page answers, and the visual types to be used, guiding design decisions.
Worked examples3
1. Your fact table has a column 'Incidents' and a dimension table has a column 'Population'. Write the logic for a DAX measure called 'Incidents Per 1000 Residents' and verify it with sample data: 250 incidents, population of 50,000.
- Step 1: Identify the two values needed — total incidents from the fact table and population from the dimension table.
- Step 2: Write the measure formula pattern: Incidents Per 1000 Residents = DIVIDE([Total Incidents], SUM(DimNeighborhood[Population])) * 1000. Using DIVIDE instead of the slash operator avoids a divide-by-zero error.
- Step 3: Substitute the sample values to verify: (250 / 50,000) × 1,000 = 0.005 × 1,000 = 5.0.
- Step 4: Place the measure on a card visual filtered to the single neighborhood and confirm the card displays 5.0. If it does, the measure logic is correct.
Answer: The measure returns 5.0 incidents per 1,000 residents for the sample data.
2. You need a year-over-year change measure. Last year's total calls = 1,840; this year's total calls = 2,116. Calculate the absolute change and the percentage change.
- Step 1: Calculate absolute change: 2,116 − 1,840 = 276 additional calls.
- Step 2: Calculate percentage change: (276 / 1,840) × 100.
- Step 3: Divide: 276 / 1,840 ≈ 0.15.
- Step 4: Multiply by 100: 0.15 × 100 = 15.0%.
- Step 5: In DAX, the percentage change measure pattern is: YoY % Change = DIVIDE([This Year Calls] - [Last Year Calls], [Last Year Calls]). Format the measure as a percentage in the Formatting pane so it displays as 15.00% rather than 0.15.
Answer: Absolute change = 276 calls; percentage change ≈ 15.0% increase year-over-year.
3. A report page has 3 visuals and a slicer. The slicer is set to filter only the bar chart, but the requirement is that it filters all three visuals. Describe the steps to fix this in Power BI Desktop.
- Step 1: Click the slicer visual to select it.
- Step 2: In the Format tab on the ribbon, locate 'Edit interactions' (in some Power BI versions it appears under the Format menu or View tab).
- Step 3: With Edit interactions active, icons appear on each of the other visuals showing whether they are filtered (funnel icon) or unaffected (circle with line icon) by the selected slicer.
- Step 4: Click the funnel (filter) icon on each visual that is currently showing the 'no filter' icon, until all three visuals show the funnel icon.
- Step 5: Click anywhere outside the slicer to exit Edit interactions mode, then test by changing the slicer selection and confirming all three visuals update.
Answer: After enabling Edit interactions and setting the filter icon on all three visuals, the slicer will control all of them simultaneously.
The math in this lesson1
Learners write a measure for incidents per 1,000 residents from counts and population.
7.RP.2
In class: Instructor demonstrates importing a cleaned CSV into Power BI Desktop, creating a star-schema data model, writing at least two DAX measures (e.g., year-over-year change, per-capita rate), and designing a report page with slicers, a map visual, and a KPI card; students follow along on their own data. · Students design a storyboard (paper or digital wireframe) for their two- to three-page report before building in Power BI; storyboard must identify the audience, one question answered per page, and the visual type chosen with a one-sentence justification. · Students publish the completed Power BI report to Power BI Service (free workspace) and share the link with the instructor; a usability walk-through is conducted where the instructor plays the role of a city department manager and navigates the report without student guidance, noting any confusion points.
Materials: Power BI Desktop (free); Power BI Service free account; cleaned project dataset (CSV or PostgreSQL connection); Microsoft PL-300 exam study guide; DAX reference documentation (Microsoft Learn); storyboard template.
Check: Instructor evaluates the published report against a rubric: functional data model (at least two tables related), at least two correct DAX measures, three or more interactive visuals, usability walk-through completed without critical navigation failures; score of 75% or higher = pass.
Practice check8
Answer each question, then check it. Nothing is recorded; this is your own practice.
Record this lesson on my transcript. Sign in with your key and enrollment email to record lessons (enroll free if you have no key). This page stays open to read and practise.