Server Migration: Tableau Server to Power BI Service¶
A comprehensive guide for migrating Tableau Server (or Tableau Cloud) infrastructure — sites, projects, workbooks, permissions, schedules, subscriptions, and monitoring — to Power BI Service.
Overview¶
Server migration covers the infrastructure and administration layer: how content is organized, who has access, how data refreshes, and how administrators monitor the environment. This guide maps every Tableau Server concept to its Power BI Service equivalent and provides step-by-step migration procedures.
1. Architecture comparison¶
1.1 Tableau Server vs Power BI Service¶
| Aspect | Tableau Server | Power BI Service |
|---|---|---|
| Deployment | On-premises VMs or Tableau Cloud (SaaS) | SaaS only (cloud); Report Server for on-prem |
| Infrastructure management | Customer-managed (patching, backups, scaling) | Microsoft-managed |
| Scalability | Add nodes manually | Automatic (within capacity SKU) |
| High availability | Multi-node cluster configuration | Built-in (SaaS) |
| Disaster recovery | Customer-managed (backup/restore) | Built-in with geo-redundancy |
| Upgrades | Scheduled maintenance windows | Rolling updates by Microsoft |
| Multi-tenancy | Sites (isolated environments) | Tenants + Fabric capacities |
1.2 Content hierarchy mapping¶
flowchart LR
subgraph Tableau["Tableau Server"]
SITE[Site] --> PROJECT[Project]
PROJECT --> SUB[Sub-Project]
SUB --> WB[Workbook]
SUB --> DS[Data Source]
PROJECT --> WB2[Workbook]
PROJECT --> DS2[Data Source]
end
subgraph PowerBI["Power BI Service"]
TENANT[Tenant] --> WS[Workspace]
WS --> RPT[Report]
WS --> SM[Semantic Model]
WS --> DF[Dataflow]
WS --> DASH[Dashboard]
TENANT --> WS2[Workspace 2]
WS2 --> APP[App]
end 2. Sites to workspaces¶
2.1 Concept mapping¶
| Tableau concept | Power BI concept | Migration guidance |
|---|---|---|
| Site (isolated content boundary) | Workspace or separate Fabric capacity | Use separate capacities for strict isolation; workspaces for team separation |
| Default site | Default workspace ("My workspace") | My workspace is personal; do not use for shared content |
| Project (folder structure) | Workspace | Create one workspace per project or team |
| Sub-project (nested folders) | Workspace + naming convention | Power BI workspaces are flat; use naming: Team - Project |
| Personal space | "My workspace" | Each user has a personal workspace |
2.2 Workspace design patterns¶
Pattern 1: Workspace per team (most common)
Workspace: "Sales Analytics"
- Sales Semantic Model (shared)
- Sales Dashboard Report
- Sales Detail Report
- Sales Monthly Report
Workspace: "Finance Analytics"
- Finance Semantic Model (shared)
- Budget vs Actual Report
- P&L Report
Pattern 2: Workspace per lifecycle stage (for ALM)
Workspace: "Sales Analytics [Dev]"
Workspace: "Sales Analytics [Test]"
Workspace: "Sales Analytics [Prod]"
// Use deployment pipelines to promote content
Pattern 3: Shared semantic model workspace (for governance)
Workspace: "Enterprise Semantic Models"
- Sales Semantic Model (Certified)
- Finance Semantic Model (Certified)
- HR Semantic Model (Certified)
Workspace: "Sales Reports"
- Sales Dashboard (live connection to Sales Semantic Model)
- Sales Detail (live connection to Sales Semantic Model)
Separate semantic models from reports
For large organizations, consider separating semantic models into dedicated workspaces with restricted access. Reports in other workspaces connect via live connection. This mirrors Tableau's published data source pattern and provides better governance.
2.3 Workspace naming conventions¶
| Tableau hierarchy | Power BI workspace name | Example |
|---|---|---|
| Site: Default, Project: Sales | Sales or Sales Analytics | Sales Analytics |
| Site: Default, Project: Finance, Sub: Budget | Finance - Budget | Finance - Budget |
| Site: Marketing, Project: Campaign Analytics | Marketing - Campaign Analytics | Marketing - Campaign Analytics |
| Site: Executive, Project: Board Reports | Executive - Board Reports | Executive - Board Reports |
3. Groups and permissions¶
3.1 Tableau groups to Entra ID security groups¶
| Tableau concept | Power BI concept | Migration steps |
|---|---|---|
| Local group | Entra ID security group | Create security groups in Entra ID matching Tableau groups |
| Active Directory group | Entra ID security group | Existing AD groups sync to Entra ID automatically |
| Group membership | Entra ID group membership | Add users to groups; groups assigned to workspace roles |
| Guest users | Entra ID B2B guests | Invite external users via Entra B2B; assign to groups |
3.2 Tableau site roles to Power BI workspace roles¶
| Tableau site role | Power BI workspace role | Capabilities |
|---|---|---|
| Site Administrator / Creator | Admin | Full control: settings, membership, delete workspace |
| Creator | Member | Publish, manage, share content; manage refresh; cannot delete workspace |
| Explorer (Can Publish) | Contributor | Publish and update content; cannot manage membership |
| Explorer | Viewer (via App) | View and interact with published App content |
| Viewer | Viewer (via App or shared link) | View-only access |
3.3 Content-level permissions¶
| Tableau permission | Power BI equivalent | How to configure |
|---|---|---|
| Project permissions (default for contents) | Workspace role | Workspace role applies to all content in the workspace |
| Workbook permissions (override project) | App audience + per-item sharing | Share specific reports via links or Apps with audiences |
| Data source permissions | Semantic model permissions + Build permission | Grant "Build" permission for users who need to create reports on the model |
| View permission | Viewer role or App access | Viewers access through Apps or direct sharing |
| Download/export | Export settings in admin portal | Admin can control export formats globally |
3.4 Permission migration steps¶
- Export Tableau groups — use Tableau REST API to list all groups and members
- Create Entra ID security groups — mirror Tableau groups in Entra ID
- Map members — ensure Tableau users exist in Entra ID (usually already the case for AD-synced environments)
- Assign workspace roles — add security groups to workspaces with appropriate roles
- Configure App audiences — for consumer-facing content, create Apps with audience groups
- Test access — validate that each user group can access the same content they had in Tableau
4. Row-level security (RLS)¶
4.1 Tableau user filters to Power BI RLS¶
Tableau user filters (e.g., [Region] = USERNAME()) map to Power BI row-level security (RLS) roles.
Tableau approach:
// Data source filter: [Region] = USERNAME()
// Or calculated field: IF ISMEMBEROF("East Team") THEN "East" END
Power BI approach:
// Step 1: Create RLS role in Power BI Desktop
// Modeling → Manage Roles → New Role
// Role name: "RegionFilter"
// Table: Sales
// DAX filter expression:
[Region] = USERPRINCIPALNAME()
4.2 Group-based RLS with mapping table¶
For organizations with complex security (users see data for multiple regions), use a security mapping table:
// Security mapping table (in the semantic model):
// UserEmail | Region
// user1@company.com | East
// user1@company.com | Central
// user2@company.com | West
// RLS role DAX expression on the Sales table:
CONTAINS(
SecurityMapping,
SecurityMapping[UserEmail], USERPRINCIPALNAME(),
SecurityMapping[Region], Sales[Region]
)
4.3 Dynamic RLS patterns¶
| RLS pattern | DAX implementation | Use case |
|---|---|---|
| User-to-dimension mapping | USERPRINCIPALNAME() matched to mapping table | Users see their assigned regions/departments |
| Manager hierarchy | PATH function with parent-child hierarchy | Managers see their direct reports' data |
| Data-driven roles | Mapping table maintained by business users | Self-service security assignment |
| Cross-filter RLS | RLS on dimension table, cross-filters to fact | Single security table controls all fact tables |
4.4 RLS migration validation¶
After configuring RLS:
- Test with "View as" role — in Power BI Desktop, Modeling → View as → select role
- Test with specific users — in Power BI Service, use "Test as" with real user identities
- Compare results — validate that the same user sees the same data in both Tableau and Power BI
- Test edge cases — users with multiple roles, users with no mapping, new users
5. Subscriptions and alerts¶
5.1 Subscriptions¶
| Tableau subscription | Power BI subscription | Notes |
|---|---|---|
| Email subscription (PNG/PDF of view) | Email subscription (PNG/PDF of page) | Similar capability; configure per-report or per-page |
| Subscription schedule (daily, weekly) | Subscription schedule (daily, weekly, after refresh) | Power BI adds "after data refresh" trigger |
| Subscription to specific view | Subscription to specific page | Select pages within a report |
| Subscription with filters | Subscription with slicer state | Subscriber can save filter state before subscribing |
| Custom email message | Subject line customization | Limited customization in Power BI |
5.2 Data alerts¶
| Tableau alert | Power BI alert | Notes |
|---|---|---|
| Conditional alert on dashboard | Data alert on dashboard tile | Set threshold on a KPI card or gauge |
| Alert notification | Email + mobile notification | Power BI sends to email and mobile app |
| Alert frequency | Configurable (hourly, daily) | Configure check frequency |
5.3 Data Activator (advanced alerting)¶
Power BI Data Activator extends basic alerts with automated actions:
- Trigger Power Automate flows when data conditions are met
- Send Teams messages to specific channels
- Create ServiceNow tickets automatically
- Trigger Azure Functions for custom logic
- Monitor data in real-time, not just on refresh
Tableau has no equivalent to Data Activator.
6. Scheduled refresh¶
6.1 Tableau extract schedules to Power BI refresh schedules¶
| Tableau schedule concept | Power BI concept | Notes |
|---|---|---|
| Extract refresh schedule | Dataset refresh schedule | Configure in dataset settings |
| Full extract refresh | Full refresh (default) | Replaces all data |
| Incremental extract refresh | Incremental refresh policy | Define partition key (date column), rolling window |
| Background task (extract) | Refresh history | Monitor in dataset settings |
| Refresh frequency | Up to 48/day (Premium) or 8/day (Pro) | Premium/Fabric capacity unlocks higher frequency |
| Subscription-triggered refresh | "After data refresh" subscription | Emails sent only after successful refresh |
6.2 Configuring scheduled refresh¶
Step 1: Publish semantic model to Power BI Service
Step 2: Navigate to Dataset Settings
Step 3: Expand "Scheduled refresh"
Step 4: Set refresh frequency (daily, weekly) and times
Step 5: Configure data source credentials (if not already set)
Step 6: Configure gateway connection (for on-prem sources)
Step 7: Enable "Send refresh failure notification"
Step 8: Test with "Refresh now"
6.3 Incremental refresh (for large datasets)¶
// Power BI incremental refresh replaces Tableau incremental extract:
// 1. Create Power Query parameters: RangeStart and RangeEnd (DateTime type)
// 2. Filter source table by date column between RangeStart and RangeEnd
// 3. In Power BI Desktop: right-click table → Incremental refresh
// 4. Configure:
// - Archive data starting: 3 years ago
// - Incrementally refresh data starting: 30 days ago
// - Only refresh complete days: checked
7. Admin monitoring and governance¶
7.1 Tableau Server admin tools to Power BI admin¶
| Tableau admin tool | Power BI equivalent | Notes |
|---|---|---|
| Admin views (background tasks, traffic) | Admin portal + Usage metrics | Admin portal for tenant-wide; Usage metrics per workspace |
| Status page (server health) | Fabric Capacity Metrics App | Monitor capacity utilization, throttling, performance |
| Resource Monitoring Tool (RMT) | Capacity Metrics App + Log Analytics | Detailed performance monitoring |
| Content Migration Tool | Deployment pipelines | Promote content across Dev/Test/Prod |
| User activity log | Activity log + Audit log | Track user actions; integrate with Sentinel for security |
| Site settings | Tenant settings (Admin portal) | Global policies for the Power BI tenant |
| Tableau Metadata API | Scanner API + XMLA endpoints | Programmatic metadata access |
7.2 Usage metrics migration¶
Tableau Server tracks views, users, and data source usage. Power BI provides similar telemetry:
| Metric | Tableau source | Power BI source |
|---|---|---|
| Report views | Admin views → traffic | Usage metrics report (per workspace) |
| Unique users | Admin views → users | Usage metrics or Activity log |
| Last accessed date | Admin views → content | Usage metrics or Scanner API |
| Data source usage | Admin views → data sources | Dataset usage in Admin portal |
| Performance (render time) | Admin views → performance | Performance analyzer (Desktop) + Capacity metrics |
| Stale content | Last accessed > 90 days | Usage metrics → filter by date range |
7.3 Admin portal key settings¶
After migration, configure these tenant settings in the Power BI Admin portal:
| Setting | Recommended value | Why |
|---|---|---|
| Allow users to create workspaces | Specific security groups | Prevent workspace sprawl |
| Export to Excel | Enabled for all (or specific groups) | Match Tableau export permissions |
| Embed content in apps | Enabled for specific groups | Control embedded analytics access |
| Publish to web (public) | Disabled | Prevent accidental public exposure |
| Allow XMLA endpoints | Premium/Fabric only | Enable external tools (DAX Studio, Tabular Editor) |
| Certification | Specific groups (data stewards) | Control who can certify semantic models |
| Featured content | Enabled | Highlight important reports on the Power BI Home |
8. Tableau REST API to Power BI REST API¶
8.1 API mapping¶
| Tableau REST API operation | Power BI REST API | Endpoint |
|---|---|---|
| Sign in | OAuth 2.0 / service principal | Entra ID token acquisition |
| List sites | N/A (single tenant) | Tenant-level operations |
| List workbooks | List reports in workspace | GET /groups/{groupId}/reports |
| Get workbook | Get report | GET /reports/{reportId} |
| Download .twbx | Export .pbix | POST /reports/{reportId}/Export |
| Publish workbook | Import .pbix | POST /groups/{groupId}/imports |
| List data sources | List datasets | GET /groups/{groupId}/datasets |
| Refresh extract | Trigger refresh | POST /datasets/{datasetId}/refreshes |
| List users | Microsoft Graph API | GET /users |
| List groups | List workspaces | GET /groups |
| Add user to group | Add user to workspace | POST /groups/{groupId}/users |
| Query views | Get pages | GET /reports/{reportId}/pages |
| Metadata API | Scanner API | POST /admin/workspaces/getInfo |
8.2 Automation migration¶
For organizations with Tableau REST API automation:
- Inventory all API calls — document every automated process that uses the Tableau REST API
- Map to Power BI API — use the table above to find equivalent endpoints
- Update authentication — replace Tableau PAT/credentials with Entra ID service principal
- Update scripts — rewrite automation scripts to use Power BI REST API
- Test thoroughly — validate that automated processes produce the same results
9. Migration execution checklist¶
Phase 1: Workspace setup¶
- Design workspace hierarchy (based on Tableau site/project structure)
- Create workspaces in Power BI Service
- Create Entra ID security groups matching Tableau groups
- Assign workspace roles to security groups
- Configure tenant settings in Admin portal
Phase 2: Security configuration¶
- Implement RLS roles in semantic models
- Create security mapping tables (for dynamic RLS)
- Test RLS with representative users
- Configure data source credentials in Power BI Service
- Set up on-premises data gateway (if replacing Tableau Bridge)
Phase 3: Refresh and automation¶
- Configure scheduled refresh for all Import-mode datasets
- Set up incremental refresh for large datasets
- Recreate subscriptions
- Configure data alerts
- Migrate API automation scripts
Phase 4: Monitoring and governance¶
- Deploy Capacity Metrics App
- Set up usage metrics reports per workspace
- Configure audit log integration (Sentinel or Log Analytics)
- Enable deployment pipelines for Dev/Test/Prod promotion
- Document admin procedures and runbooks
Last updated: 2026-04-30 Maintainers: CSA-in-a-Box core team Related: Data Source Migration | Embedding Migration | Migration Playbook