Power BI Course
The Power BI Service
Power BI Desktop is where you build. The Power BI Service — app.powerbi.com — is where you publish, share, schedule, and manage. Everything that happens after "I've finished my report" happens in the Service: publishing to a workspace, sharing with colleagues, configuring scheduled refresh, setting up row-level security, and packaging reports into an App for the organisation. This lesson covers the full lifecycle from Desktop to deployed.
The Power BI Service Architecture
Publishing a Report
Publishing uploads your .pbix file to the Power BI Service. It creates three items in the target workspace: a Report (the visuals and pages), a Dataset (the data model and all its tables, relationships, and DAX), and optionally a Dashboard (a single-page pinned view). The Report and Dataset are separate objects — one Dataset can power multiple Reports.
// Publishing from Power BI Desktop
// Home tab → Publish → select workspace → Publish
// What gets published:
// 1. Report — all pages, visuals, and formatting
// 2. Dataset — data model: tables, relationships, measures, columns
// NOTE: the actual data is included in Import mode
// In DirectQuery mode, only the connection info is published
// What does NOT get published:
// - Local data sources (Excel files on your C:\ drive)
// These must be moved to SharePoint, OneDrive, or a gateway
// before scheduled refresh will work
// - Power Query Editor scratch queries (load disabled queries)
// These are included but do not load data
// Re-publishing (updating an existing report):
// Publish again with the same name to the same workspace
// Power BI asks: "Replace this dataset?" → Yes
// The Report pages update
// The Dataset (data model) is replaced
// Any Dashboards built from pinned visuals update automatically
// Personal bookmarks that users saved in Service are preserved
// Publishing to "My Workspace" vs a team workspace:
// My Workspace: personal space, visible only to you
// → not suitable for sharing with others
// Team Workspace: collaborative, controlled by workspace admins
// → the right destination for shared reports
Workspaces
Workspaces are containers in the Service that hold reports, datasets, dashboards, and dataflows. Access is controlled at the workspace level. The right workspace structure is the foundation of good governance.
| Workspace role | Permissions | Assign to |
|---|---|---|
| Admin | Full control — manage membership, delete workspace, publish and update all content, configure settings | Workspace owner, IT admin, report owner |
| Member | Publish and update reports and datasets, add other members (not admins), create Apps | Report developers on the team |
| Contributor | Publish and update reports and datasets. Cannot manage membership or create Apps. | Junior developers, data analysts who build reports but do not manage the workspace |
| Viewer | View and interact with reports and dashboards. Cannot edit or publish anything. | End users, executives, report consumers — anyone who just reads the reports |
Sharing Methods — The Three Tiers
Three distinct sharing methods exist, each appropriate for different audiences and governance requirements. Using the wrong method either over-shares (giving people edit access they should not have) or creates friction (requiring recipients to have a Pro licence when they do not).
Scheduled Refresh
A published dataset does not update automatically. Scheduled refresh tells the Service to re-run all Power Query queries on a defined schedule — daily, hourly, or up to eight times per day on Pro, or 48 times per day on Premium. The data in the Service is updated with the latest values from the source.
// Setting up scheduled refresh — in Power BI Service
// Step 1 — Configure data source credentials
// Service → Dataset → Settings → Data source credentials
// Click "Edit credentials" next to each source
// Enter username/password or OAuth as appropriate
// For local files: must use the On-premises data gateway
// Step 2 — Set the refresh schedule
// Service → Dataset → Settings → Scheduled refresh
// Toggle "Keep your data up to date" → ON
// Set frequency: Daily, Weekly, or specific days
// Add up to 8 time slots (Pro) or 48 time slots (Premium)
// Set the time zone
// Step 3 — Configure failure notifications
// "Send refresh failure notifications to" → dataset owner email
// Always enable this — silent refresh failures mean stale data
// that no one notices until an executive asks why numbers are wrong
// On-premises data gateway:
// Required when the source is a local file, SQL Server,
// or any resource not accessible from the internet
// Install on a machine that is always on
// Register with the Service under Settings → Manage gateways
// The gateway acts as a secure relay between the Service
// and your private data sources
Row-Level Security (RLS)
Row-Level Security restricts which rows of data each user can see — without creating separate reports for each user. A salesperson sees only their own region's orders. A manager sees their team's data. An executive sees everything. RLS is defined in the Desktop with DAX rules, then assigned to users in the Service.
// Step 1 — Define RLS roles in Power BI Desktop
// Modelling tab → Manage roles → New role
// Role: "North Region"
// Table: Orders
// DAX filter: [Region] = "North"
// This role restricts Orders to North rows only
// Role: "Own Region"
// Table: Employees (has columns: Email, Region)
// DAX filter:
[Email] = USERPRINCIPALNAME()
// USERPRINCIPALNAME() returns the email of the logged-in user
// This dynamically restricts each user to their own row in Employees
// Combined with a relationship, this flows to all related tables
// Dynamic RLS pattern — relationship-based
// Employees table: Email | Region | EmployeeID
// Orders table: EmployeeID | Revenue | ...
// Relationship: Employees[EmployeeID] → Orders[EmployeeID]
// RLS on Employees: [Email] = USERPRINCIPALNAME()
// Result: each user sees only orders from their own EmployeeID
// No per-region roles needed — one rule handles all users
// Step 2 — Test RLS in Desktop
// Modelling tab → View as → select a role
// The report now shows only data visible to that role
// Check every page and visual to confirm correct filtering
// Step 3 — Assign users to roles in the Service
// Service → Dataset → Security
// Find the role → add user email addresses or security groups
// Users in "North Region" role see only North data
// Users in no role see all data (admins/owners bypass RLS)
| User | USERPRINCIPALNAME() | Their Region | Revenue they see |
|---|---|---|---|
| Alice Brown | alice@company.com | North | $65,000 |
| Bob Singh | bob@company.com | South | $39,400 |
| Carol Lee (manager) | carol@company.com | All (no RLS) | $130,400 |
Licences — Which Do You Need?
| Licence | What you can do | Limitations |
|---|---|---|
| Free | Build in Desktop, publish to My Workspace, view reports shared from Premium capacity workspaces | Cannot share with others or publish to team workspaces. No scheduled refresh via shared capacity. |
| Pro ($10/user/mo) | Publish to team workspaces, share reports, schedule refresh (8×/day), build and consume Apps | Both the sharer AND the recipient need Pro licences. 1GB dataset size limit. |
| Premium Per User ($20/user/mo) | All Pro features plus: larger datasets (up to 100GB), 48 refreshes/day, deployment pipelines, paginated reports | Still per-user — everyone interacting needs a PPU licence |
| Premium Capacity (P SKU) | Dedicated capacity — Free users can view reports published to Premium workspaces. Very large datasets, advanced AI features, unlimited API access | Expensive ($4,995+/month) — for organisations with large user bases or enterprise-scale requirements |
Teacher's Note: The most common Service mistake is publishing to My Workspace and then trying to share reports from there. My Workspace is personal — it does not support team collaboration, App publishing, or stable URLs. The moment you intend for someone else to view a report, publish it to a team workspace. Create the workspace first, configure the correct membership roles, then publish. This order — workspace first, publish second — prevents the scramble of moving content after the fact, which sometimes breaks scheduled refresh connections and dashboard pins.
Practice
Practice 1 of 3
When a dataset uses data from a file on a local machine or a private SQL Server not accessible from the internet, scheduled refresh in the Service requires installing an On-premises data ___ on a machine that is always running.
Practice 2 of 3
The DAX function ___ returns the email address of the currently logged-in user, making it the foundation of dynamic Row-Level Security where each user automatically sees only their own data.
Practice 3 of 3
To give a broad audience access to a polished, branded collection of reports without granting them access to the underlying workspace, you package the content into an ___ and publish it to specific users or the entire organisation.
Lesson Quiz
Quiz 1 of 3
You publish a report to the Power BI Service and share the link with a colleague. They click the link and receive an error: "You need a Power BI Pro or Premium Per User licence to view this content." You have a Pro licence. What is the cause?
Quiz 2 of 3
A dataset's scheduled refresh fails every night at 2am with the error "Credentials are required for the data source." The refresh worked for the first two weeks. What is the most likely cause?
Quiz 3 of 3
You implement dynamic RLS using [Email] = USERPRINCIPALNAME() on the Employees table. A workspace Admin opens the report and sees all data, not just their own employee data. Is this correct?
Next up — Lesson 47 covers Workspaces and Collaboration in depth, including deployment pipelines for dev/test/prod promotion, workspace governance, and how teams work together on shared reports without overwriting each other's changes.