πŸ”’ Guided

Pre-launch preview. Authorised access only.

Incorrect code

Guided by A Guide to Cloud
Explore AB-900 AI-901
Guided PL-300 Domain 2
Domain 2 β€” Module 7 of 7 100%
14 of 26 overall

PL-300 Study Guide

Domain 1: Prepare the Data

  • Connecting to Data Sources Free
  • Storage Modes: Import, DirectQuery & DirectLake Free
  • Data Profiling & Quality Free
  • Power Query Transforms Free
  • Combining Data: Merge, Append & Queries
  • Fact Tables, Dimension Tables & Keys
  • Data Loading & Query Optimisation

Domain 2: Model the Data

  • Star Schema & Relationships
  • Date Tables & Table Properties
  • Columns vs Measures: When to Use Which
  • DAX Fundamentals Free
  • CALCULATE & Filter Context
  • Time Intelligence & Calculation Groups
  • Model Performance Optimisation

Domain 3: Visualize and Analyze the Data

  • Choosing & Formatting Visuals
  • Slicers, Filters & Interactions
  • Bookmarks, Tooltips & Navigation
  • Copilot in Power BI Reports
  • Report Pages & Paginated Reports
  • Mobile, Accessibility & Personalisation
  • AI Visuals & Pattern Discovery

Domain 4: Manage and Secure Power BI

  • Workspaces & Distribution
  • Dashboards, Alerts & Subscriptions
  • Gateways & Scheduled Refresh
  • Row-Level Security & Access Control
  • Sensitivity Labels & Governance

PL-300 Study Guide

Domain 1: Prepare the Data

  • Connecting to Data Sources Free
  • Storage Modes: Import, DirectQuery & DirectLake Free
  • Data Profiling & Quality Free
  • Power Query Transforms Free
  • Combining Data: Merge, Append & Queries
  • Fact Tables, Dimension Tables & Keys
  • Data Loading & Query Optimisation

Domain 2: Model the Data

  • Star Schema & Relationships
  • Date Tables & Table Properties
  • Columns vs Measures: When to Use Which
  • DAX Fundamentals Free
  • CALCULATE & Filter Context
  • Time Intelligence & Calculation Groups
  • Model Performance Optimisation

Domain 3: Visualize and Analyze the Data

  • Choosing & Formatting Visuals
  • Slicers, Filters & Interactions
  • Bookmarks, Tooltips & Navigation
  • Copilot in Power BI Reports
  • Report Pages & Paginated Reports
  • Mobile, Accessibility & Personalisation
  • AI Visuals & Pattern Discovery

Domain 4: Manage and Secure Power BI

  • Workspaces & Distribution
  • Dashboards, Alerts & Subscriptions
  • Gateways & Scheduled Refresh
  • Row-Level Security & Access Control
  • Sensitivity Labels & Governance
Domain 2: Model the Data Premium ⏱ ~11 min read

Model Performance Optimisation

Find and fix performance bottlenecks using Performance Analyzer and DAX query view. Learn to reduce model size by removing unnecessary rows and columns, and improve query speed by reducing granularity.

Making your model fast

β˜• Simple explanation

Think of packing for a holiday. If you pack everything you own, your suitcase is huge and slow to move. Pack only what you need, and you travel light and fast.

Same with Power BI models. Remove columns you don’t use, eliminate rows you don’t need, and simplify your DAX β€” your reports load faster, refresh quicker, and use less memory.

Power BI gives you two tools to find the bottlenecks: Performance Analyzer (which visuals are slow?) and DAX query view (which measures are inefficient?).

Power BI model performance depends on three factors: model size (columns, rows, cardinality), DAX complexity (measure evaluation time), and visual query efficiency (how many queries a report page generates).

The VertiPaq engine compresses data column-by-column. Columns with low cardinality (few unique values) compress well. Columns with high cardinality (many unique values, like GUIDs or timestamps) compress poorly and bloat the model. Removing unused high-cardinality columns is often the single biggest performance win.

Performance Analyzer

Performance Analyzer measures how long each visual takes to render on a report page.

How to use it:

  1. On the Optimize tab (Power BI Desktop) β†’ Performance Analyzer β†’ Start recording
  2. Interact with the report (change slicers, navigate pages)
  3. View results β€” each visual shows:
    • DAX query time β€” how long the measure calculations took
    • Visual display time β€” how long the visual took to render
    • Other β€” anything else (data retrieval, etc.)

Riley at Coastal Fresh (πŸ›’) notices her sales dashboard takes 8 seconds to load. Performance Analyzer shows:

  • Map visual: 4.2s (DAX query)
  • Sales matrix: 2.1s (DAX query)
  • Cards: 0.1s each

The map is the bottleneck. She investigates the DAX query it generates.

πŸ’‘ Exam tip: what Performance Analyzer shows

Performance Analyzer captures three categories per visual:

  • DAX query: The time to generate and execute the DAX query against the model. You can copy the query for further analysis.
  • Visual display: Time for the visual to render on screen after data arrives.
  • Other: Any additional processing time not covered by the above two categories.

For DirectQuery sources, the source query latency is included within the DAX query time β€” it’s not shown as a separate bucket.

If DAX query time is high β†’ optimise the measure, model, or source database (for DirectQuery). If visual display time is high β†’ simplify the visual (fewer data points, simpler formatting).

DAX query view

DAX query view lets you write and test DAX queries directly against the model. Use it to:

  • Test measure performance in isolation
  • Analyse query plans
  • Compare alternative DAX approaches

Kenji at Apex Manufacturing (🏭) tests a slow measure:

EVALUATE
SUMMARIZECOLUMNS(
    'Date'[Month],
    "Revenue", [Total Revenue],
    "YoY Change", [YoY Change %]
)

He can run this query, see execution time, and iterate on the DAX until performance improves.

Reducing model size

Remove unnecessary columns

The fastest way to shrink a model is to remove columns nobody uses.

Column TypeAction
Foreign keys used only in relationshipsKeep β€” needed for relationships
Descriptive columns used in visualsKeep
Source system IDs (GUIDs, internal codes)Remove β€” high cardinality, no reporting value
Audit columns (CreatedBy, ModifiedDate)Remove unless used in reports
Free-text columns (comments, notes)Remove β€” very high cardinality, terrible compression
Duplicate columns (same data, different name)Remove the duplicate

Dr. Ethan at Bayview Medical (πŸ₯) imports a patient table with 45 columns. After audit, only 12 are used in reports or relationships. Removing the 33 unused columns cuts model size by 60%.

Remove unnecessary rows

Filter data in Power Query to load only what’s needed:

  • Date range: Only load the last 3 years instead of all history
  • Status filter: Exclude cancelled/archived records
  • Region filter: Only load regions relevant to the report audience
Best practice: remove in Power Query, not DAX

Always remove rows and columns in Power Query (before loading), not with DAX filters at query time. Power Query removal reduces model size and refresh time. DAX filtering still loads the data β€” it just hides it during queries.

Think of it as: Power Query decides what goes INTO the suitcase. DAX decides what you look at AFTER the suitcase is packed.

Reducing granularity

Granularity is the level of detail in your data. Transaction-level data (one row per sale) has high granularity. Daily summaries have lower granularity.

Nadia at Prism Agency (πŸ“Š) has 50 million ad impression rows. Her dashboard only shows daily metrics per campaign. She uses Group By in Power Query to aggregate to daily level β€” reducing 50 million rows to 50,000.

GranularityRowsUse When
Per transaction50MDetailed drill-down needed
Per day50KDaily trends are sufficient
Per week7KWeekly reporting only
Per month600Monthly summary dashboards

Trade-off: Lower granularity = faster model, but you lose the ability to drill into detail.

Performance optimisation checklist

ActionImpactEffort
Remove unused columnsHigh β€” biggest size reductionLow
Remove unnecessary rows (date range, filters)High β€” fewer rows = smaller modelLow
Reduce granularity (aggregate in Power Query)High β€” dramatically fewer rowsMedium
Avoid bi-directional cross-filteringMedium β€” reduces query complexityLow
Replace calculated columns with Power Query columnsMedium β€” transformation happens earlier, can benefit from query foldingMedium
Simplify complex DAX (use variables)Medium β€” reduces evaluation timeMedium
Avoid DISTINCTCOUNT on high-cardinality columnsMedium β€” expensive operationLow

Knowledge check

Question

What does Performance Analyzer show for each visual?

Click or press Enter to reveal answer

Answer

DAX query time (measure calculation), Visual display time (rendering), and Other. The DAX query can be copied for analysis in DAX query view.

Click to flip back

Question

What's the single biggest way to reduce model size?

Click or press Enter to reveal answer

Answer

Remove unused columns β€” especially high-cardinality columns like GUIDs, free-text fields, and audit timestamps. Do this in Power Query before loading.

Click to flip back

Question

Why reduce data in Power Query rather than using DAX filters?

Click or press Enter to reveal answer

Answer

Power Query removes data before loading β€” reducing model size, memory, and refresh time. DAX filters still load all data into the model; they just filter at query time.

Click to flip back

Knowledge Check

Dr. Ethan's patient dashboard loads slowly. Performance Analyzer shows the map visual takes 5 seconds (DAX query: 4.8s, visual display: 0.2s). What should he investigate first?

Knowledge Check

Nadia has a 50-million-row impressions table but only needs daily campaign metrics. What's the best optimisation?

🎬 Video coming soon

Next up: Choosing and Formatting Visuals β€” pick the right chart for your data story.

← Previous

Time Intelligence & Calculation Groups

Next β†’

Choosing & Formatting Visuals

Guided

I learn, I simplify, I share.

A Guide to Cloud YouTube Feedback

© 2026 Sutheesh. All rights reserved.

Guided is an independent study resource and is not affiliated with, endorsed by, or officially connected to Microsoft. Microsoft, Azure, and related trademarks are property of Microsoft Corporation. Always verify information against Microsoft Learn.