10.2 Subscriptions, Alerts, and Semantic Model Refresh
Key Takeaways
- Subscriptions deliver report snapshots or PDF attachments via email on a schedule — configurable per page with filters.
- Data alerts trigger notifications when dashboard tile values cross a threshold — available on cards, gauges, and KPIs only.
- Scheduled refresh can run up to 8 times per day with Pro and up to 48 times per day with Premium.
- Incremental refresh partitions data so only new/changed rows are refreshed, dramatically reducing refresh duration.
- Refresh failure notifications can be sent to dataset owners and specified email addresses.
Subscriptions, Alerts, and Semantic Model Refresh
Quick Answer: Subscriptions email report snapshots on a schedule. Data alerts notify when dashboard values cross thresholds. Scheduled refresh keeps data current (8x/day Pro, 48x/day Premium). Incremental refresh only refreshes new/changed data for faster, more efficient refresh cycles.
Email Subscriptions
Creating a Subscription
Open report → Subscribe (envelope icon)
→ Configure: Name, recipients, frequency, page, format
Subscription Settings
| Setting | Options |
|---|---|
| Recipients | Self, other users, distribution groups, external emails (with admin approval) |
| Frequency | Daily, Weekly (specific days), Monthly, After data refresh |
| Time | Specific time of day |
| Start/End date | Subscription active period |
| Page | Specific report page |
| Filters | Apply pre-set filters to the subscription |
| Format | PDF attachment, PowerPoint, link only |
| Subject | Custom email subject line |
| Message | Custom email body text |
Subscription Behavior
- Emails are sent even if data hasn't changed (unless configured after refresh only)
- "After data refresh" trigger sends the email only when the dataset has refreshed
- Filters applied to the subscription persist in the delivered snapshot
- Each subscription is independent — one report can have multiple subscriptions with different filters
Data Alerts
Creating Data Alerts
Data alerts are available on dashboard tiles (not reports) for card, gauge, and KPI visuals:
Dashboard → Hover over tile → More options (...) → Manage Alerts
→ Add Alert Rule:
- Condition: Above / Below
- Threshold value
- Notification frequency: At most once an hour / At most once a day / At most every 24 hours
Alert Behavior
- Alerts check values only when data refreshes
- Notifications sent via email and the Power BI notification center
- Optional: Trigger a Power Automate flow when an alert fires
- Maximum 250 alerts per user
Alerts vs. Subscriptions
| Feature | Alerts | Subscriptions |
|---|---|---|
| Trigger | Value crosses threshold | Schedule or after refresh |
| Content | Notification message | Report snapshot |
| Location | Dashboard tiles only | Reports and dashboards |
| Visual types | Cards, gauges, KPIs | Any report page |
Scheduled Refresh
Configuring Scheduled Refresh
Power BI Service → Workspace → Dataset → Settings → Scheduled Refresh
→ Configure: Frequency, time slots, time zone, notifications
Refresh Limits
| License | Max Refreshes/Day | Max Duration |
|---|---|---|
| Power BI Pro | 8 | 2 hours |
| Power BI Premium Per User | 48 | 5 hours |
| Power BI Premium Capacity | 48 | 5 hours |
| Fabric Capacity | 48+ | Configurable |
Refresh Types
| Type | Description |
|---|---|
| Full refresh | Drops and reloads all data from source (default) |
| Incremental refresh | Only refreshes new/changed data partitions |
| On-demand | Manual refresh triggered by user or API |
| API-triggered | Refresh initiated via REST API or Power Automate |
Monitoring Refresh
Workspace → Dataset → Refresh History
Shows:
- Start/end time of each refresh
- Duration
- Status (success, failure, cancelled)
- Error details for failures
- Rows transferred
Incremental Refresh
Why Incremental Refresh?
| Full Refresh | Incremental Refresh |
|---|---|
| Drops ALL data and reloads | Only refreshes recent partitions |
| Duration grows with data size | Duration stays constant |
| Heavy source load | Minimal source impact |
| Simple to configure | Requires RangeStart/RangeEnd parameters |
Setting Up Incremental Refresh
Step 1: Create RangeStart and RangeEnd parameters
In Power Query Editor, create two parameters:
- RangeStart: Type = Date/Time, Default = earliest date
- RangeEnd: Type = Date/Time, Default = latest date
Step 2: Filter data using the parameters
Table.SelectRows(Source, each [OrderDate] >= RangeStart and [OrderDate] < RangeEnd)
Step 3: Configure the policy
Right-click table in Model view → Incremental Refresh
→ Archive data: Store data for the last N years/months
→ Incrementally refresh: Refresh data in the last N days/months
→ Optional: Detect data changes (only refresh if source changed)
→ Optional: Only refresh complete days/months
How It Works in Production
After publishing to the Power BI Service:
- Power BI creates date-based partitions automatically
- During refresh, only partitions in the "incremental" window are refreshed
- Older partitions in the "archive" window are NOT refreshed (already loaded)
- New partitions are created as time progresses
Exam Tip: Incremental refresh is configured in Power BI Desktop but only activated after publishing to the Power BI Service. In Desktop, the parameters filter normally — partitioning happens in the Service.
On the Exam
The PL-300 frequently tests:
- Configuring subscriptions with filters and schedules
- Setting up data alerts on dashboard tiles
- Understanding refresh limits by license type
- Configuring incremental refresh with RangeStart/RangeEnd
- Troubleshooting refresh failures (credentials, gateway, timeout)
A manager wants to receive an email every Monday morning with a PDF of the weekly sales report showing only their region. What should you configure?
Data alerts in Power BI are available on:
What are the two parameters required for incremental refresh, and what data type must they be?