Data Source Migration: Tableau to Power BI¶
A comprehensive guide for migrating Tableau data connections, extracts, published data sources, and data blending to Power BI semantic models, DirectQuery, and Direct Lake.
Overview¶
Data source migration is the foundation of a Tableau-to-Power BI migration. Get the data layer right and report conversion is straightforward. Get it wrong and every report will carry technical debt. This guide covers every Tableau data connection pattern and maps it to the optimal Power BI approach, with specific guidance for organizations running csa-inabox.
1. Connection type mapping¶
1.1 Tableau connection types to Power BI equivalents¶
| Tableau connection type | Power BI equivalent | When to use | csa-inabox recommendation |
|---|---|---|---|
| Tableau Extract (.hyper) | Import mode (scheduled refresh) | Small-to-medium datasets (< 1 GB) that tolerate refresh latency | Migrate to Direct Lake on Gold tables instead |
| Live connection | DirectQuery | Real-time freshness required; source can handle query load | Use DirectQuery to operational sources; Direct Lake for analytics |
| Published data source | Shared semantic model (Certified) | Governed, reusable data layer shared across reports | One semantic model per data domain, endorsed as Certified |
| Data blending | Composite model or star schema relationships | Cross-source analysis | Consolidate in the semantic model or use composite model |
| Custom SQL | Power Query native query or DirectQuery SQL | Complex queries that cannot be modeled | Prefer dbt views over custom SQL in the semantic model |
| Federated / cross-database join | Composite model (DirectQuery + Import) | Mix sources in one model | Composite models support mixing DirectQuery and Import |
| Tableau Bridge (cloud to on-prem) | On-premises data gateway | Cloud service connecting to on-premises sources | Install and configure the gateway; map to Tableau Bridge function |
| File-based (CSV, Excel, JSON) | Power Query file connectors | Flat file sources | Same files connect through Power Query; schedule refresh |
| Cloud connectors (Snowflake, BigQuery, etc.) | Power BI native connectors | Cloud data warehouses | Power BI has 150+ native connectors |
1.2 Decision tree for connection type selection¶
flowchart TD
START[Source data] --> Q1{Is data in OneLake<br/>Delta format?}
Q1 -->|Yes| DL[Direct Lake<br/>Zero-copy, always fresh]
Q1 -->|No| Q2{Is data < 1 GB and<br/>refresh latency OK?}
Q2 -->|Yes| IMPORT[Import mode<br/>Scheduled refresh]
Q2 -->|No| Q3{Is source fast<br/>enough for live query?}
Q3 -->|Yes| DQ[DirectQuery<br/>Live query at render]
Q3 -->|No| Q4{Can you land data<br/>in OneLake/ADLS?}
Q4 -->|Yes| DL
Q4 -->|No| IMPORT 2. Eliminating extract sprawl with Direct Lake¶
2.1 The extract problem¶
Tableau extracts (.hyper files) are the most common data connection pattern in Tableau deployments. They provide fast performance but create significant operational overhead:
- Data duplication — every extract is a copy of the source data on Tableau Server storage
- Stale data — data is only as fresh as the last extract refresh
- Refresh failures — extract refreshes fail due to timeouts, source connectivity, or server resource pressure
- Storage consumption — large extracts consume significant Tableau Server disk and backgrounder resources
- Governance gap — each workbook can create its own extract with its own SQL, leading to divergent data
2.2 Direct Lake eliminates every extract problem¶
Direct Lake is a Power BI storage mode exclusive to Microsoft Fabric. It connects Power BI semantic models to Delta tables in OneLake and reads the Parquet files directly with Vertipaq-like compression and performance.
| Extract problem | Direct Lake solution |
|---|---|
| Data duplication | Zero copies — Power BI reads the Delta files in place |
| Stale data | Always fresh — reads the latest Delta version automatically |
| Refresh failures | No refresh needed — no extract process to fail |
| Storage consumption | No additional storage — data lives in OneLake only |
| Governance gap | All reports read from the same Gold-layer Delta tables |
2.3 Direct Lake prerequisites¶
- Data must be in Delta format in OneLake (or ADLS Gen2 via shortcut)
- Fabric capacity (F64 or higher recommended for production)
- Lakehouse or Warehouse in Fabric workspace
- Tables must be Delta tables (not CSV, Parquet, or other formats)
2.4 Migration path: Extract to Direct Lake¶
Step 1: Identify the source system the Tableau extract queries
Step 2: Verify the source data lands in csa-inabox Gold layer (Delta format)
Step 3: Create a Fabric Lakehouse with shortcuts to the Gold tables
Step 4: Create a Power BI semantic model with Direct Lake storage mode
Step 5: Define relationships and measures in the semantic model
Step 6: Validate data freshness and row counts against the old extract
Step 7: Decommission the Tableau extract
3. Published data sources to shared semantic models¶
3.1 Concept mapping¶
| Tableau concept | Power BI concept | Notes |
|---|---|---|
| Published data source | Shared semantic model (dataset) | Shared across reports in a workspace or via endorsement |
| Certified data source | Endorsed semantic model (Certified) | Certified label marks the model as trusted |
| Data source permissions | Semantic model permissions + workspace roles | Control who can build on the model |
| Data source revisions | Fabric Git integration (TMDL format) | Version control for model definitions |
| Embedded vs published source | Dedicated vs shared semantic model | Always prefer shared for governance |
| Data source filters | Power Query filters in the model | Filter at the source or in Power Query |
3.2 Semantic model design principles¶
When migrating Tableau published data sources to Power BI shared semantic models:
One semantic model per data domain. Do not create one semantic model per report (Tableau's default pattern). Create one semantic model for Sales, one for Finance, one for HR, etc. Reports connect to these shared models.
Star schema design. Power BI performs best with star schemas: fact tables (transactions, events) surrounded by dimension tables (customers, products, dates). Tableau is forgiving with denormalized tables. Power BI is not. Invest in the star schema.
Measures in the model, not the report. Define all DAX measures in the semantic model. Reports should consume measures, not redefine them. This is the Power BI equivalent of Tableau's calculated fields in published data sources.
Certify the model. Use Power BI endorsement to mark the semantic model as "Certified." This makes it discoverable in the data hub and signals governance approval.
flowchart TD
subgraph Tableau["Tableau Pattern"]
PDS1[Published Data Source A] --> WB1[Workbook 1]
PDS1 --> WB2[Workbook 2]
PDS2[Published Data Source B] --> WB3[Workbook 3]
PDS2 --> WB4[Workbook 4]
end
subgraph PowerBI["Power BI Pattern"]
SM1[Shared Semantic Model A<br/>Star schema, certified<br/>Measures defined here] --> RPT1[Report 1<br/>Thin report, no measures]
SM1 --> RPT2[Report 2]
SM2[Shared Semantic Model B<br/>Star schema, certified] --> RPT3[Report 3]
SM2 --> RPT4[Report 4]
end 3.3 Migration steps for published data sources¶
- Inventory — list all published data sources, their connections, calculated fields, and dependent workbooks
- Group by domain — cluster data sources into data domains (sales, finance, operations, etc.)
- Design star schema — for each domain, design fact and dimension tables
- Build in Power BI Desktop — connect to the source (prefer csa-inabox Gold tables), define relationships, create measures
- Migrate calculated fields — convert Tableau calculated fields to DAX measures (see Calculation Conversion)
- Publish and certify — publish the semantic model to a dedicated workspace, apply "Certified" endorsement
- Connect reports — build reports using live connection to the shared semantic model
4. Data blending migration¶
4.1 The blending problem¶
Tableau data blending allows ad-hoc cross-source analysis by linking a primary data source to a secondary data source on a shared dimension. It is convenient but creates several issues: performance is poor for large datasets, blending is workbook-specific (not reusable), and the linking logic is implicit.
4.2 Power BI alternatives to data blending¶
| Tableau blending pattern | Power BI solution | Recommendation |
|---|---|---|
| Two sources with a shared dimension | Composite model (DirectQuery to source A, Import for source B) | Use when sources must remain separate |
| Two sources that should be consolidated | Single semantic model with both sources joined in Power Query or dbt | Preferred approach: consolidate in the data layer |
| Supplemental lookup table (e.g., budget targets) | Import the lookup table into the semantic model and create a relationship | Simple and performant |
| Cross-database analysis | Composite model with DirectQuery to multiple sources | Supported since 2020; some performance trade-offs |
4.3 Composite model example¶
// Scenario: Sales data in SQL Server, Budget data in Excel
// Tableau: Data blending with Sales as primary, Budget as secondary
// Power BI:
// 1. Create semantic model
// 2. Add Sales connection (DirectQuery to SQL Server)
// 3. Add Budget connection (Import from Excel)
// 4. Create relationship: Sales[Region] → Budget[Region]
// 5. Create measures that reference both tables
// This is a composite model — mixing DirectQuery and Import
5. Custom SQL migration¶
5.1 Tableau custom SQL patterns¶
Tableau allows custom SQL at the data source level. Common patterns:
- Pre-aggregated queries for performance
- Complex joins not possible in the visual join interface
- Parameterized queries
- Stored procedure calls
5.2 Power BI alternatives¶
| Tableau custom SQL pattern | Power BI solution | Recommendation |
|---|---|---|
| Pre-aggregation query | DirectQuery with aggregation tables | Use Power BI aggregation tables for dual-speed models |
| Complex joins | Power Query M (merge queries) | Build joins in Power Query for Import models |
| Parameterized query | Power Query parameters | Create parameters in Power Query and reference in the query |
| Stored procedure | DirectQuery or Import with stored proc | Power BI supports stored procedures via DirectQuery |
| Views | DirectQuery to SQL views | Preferred: create dbt views, connect Power BI via DirectQuery |
Prefer dbt views over custom SQL
With csa-inabox, transformation logic should live in dbt models (Silver and Gold layers), not in Power Query or custom SQL inside the semantic model. Create dbt views or tables that encapsulate the logic, then connect Power BI to those views via Direct Lake or DirectQuery.
6. Tableau Bridge to on-premises data gateway¶
6.1 Concept mapping¶
| Tableau Bridge | On-premises data gateway | Notes |
|---|---|---|
| Bridge client (installed on-prem) | Gateway application (installed on-prem) | Both run as Windows services on a machine with access to on-prem data |
| Bridge pool (multiple clients) | Gateway cluster (multiple nodes) | High availability through multiple gateway instances |
| Live connection through Bridge | DirectQuery through gateway | Real-time query forwarded through the gateway |
| Extract refresh through Bridge | Scheduled refresh through gateway | Refresh triggered by Power BI Service, executed through gateway |
| Bridge connection rules | Gateway data source configuration | Define connections to specific databases/files |
6.2 Gateway migration steps¶
- Install the on-premises data gateway on a server with network access to on-prem data sources
- Configure gateway data sources for each on-prem database the Tableau Bridge connects to
- Map credentials — configure authentication for each data source (Windows, SQL, OAuth)
- Add gateway to workspace — associate the gateway with the Power BI workspace
- Configure semantic model — point the semantic model's data source to the gateway connection
- Test connectivity — validate that Power BI Service can reach on-prem sources through the gateway
- Decommission Tableau Bridge — once all data sources are migrated
7. File-based source migration¶
7.1 Common file patterns¶
| File type | Tableau approach | Power BI approach | Notes |
|---|---|---|---|
| CSV | Connect via file connector | Power Query CSV connector | Identical approach |
| Excel | Connect via Excel connector | Power Query Excel connector | Power BI handles Excel natively |
| JSON | Connect via JSON connector | Power Query JSON connector | Power Query flattens nested JSON |
| Google Sheets | Tableau Cloud connector | Power Query Google Sheets connector or web connector | May need a gateway for scheduled refresh |
| SharePoint Excel/CSV | Tableau Cloud connector | Power Query SharePoint connector | Native integration; auto-refresh supported |
| PDF tables | Not supported natively | Power Query PDF connector | Power BI can extract tables from PDFs |
7.2 File-based refresh considerations¶
For file-based data sources, consider moving files to a governed location:
- SharePoint Online / OneDrive — Power BI connects directly, supports auto-refresh
- ADLS Gen2 / OneLake — best for large files; supports Direct Lake
- SQL database — load files into tables via ADF/Fabric pipeline for better governance
8. Cloud data warehouse connections¶
8.1 Common cloud connections¶
| Cloud source | Tableau connector | Power BI connector | Recommended mode |
|---|---|---|---|
| Azure SQL Database | Native | Native | DirectQuery or Import |
| Azure Synapse Analytics | Native | Native | DirectQuery |
| Snowflake | Native | Native | DirectQuery |
| Google BigQuery | Native | Native | DirectQuery |
| Amazon Redshift | Native | Native | DirectQuery |
| Databricks SQL | Native | Native (via Databricks connector) | DirectQuery or Direct Lake via OneLake shortcuts |
| SAP HANA | Native | Native | DirectQuery |
| PostgreSQL | Native | Native | DirectQuery or Import |
8.2 Databricks-specific guidance¶
For organizations using Databricks (common with csa-inabox), the optimal path is:
- Databricks SQL warehouse → DirectQuery (for real-time)
- Databricks + OneLake shortcuts → Direct Lake (for best performance with zero-copy)
- Databricks Unity Catalog tables → Direct Lake via Fabric Lakehouse shortcuts
9. Union and join migration¶
9.1 Tableau unions to Power Query append¶
// Tableau: Union (append rows from multiple tables/files)
// Drag tables onto each other in the data source pane
// Power BI: Append Queries in Power Query
// Home → Append Queries → select tables to append
// M code equivalent:
= Table.Combine({Table1, Table2, Table3})
9.2 Tableau joins to Power Query merge¶
// Tableau: Join (merge columns from two tables)
// Drag tables side by side, configure join type and keys
// Power BI: Merge Queries in Power Query
// Home → Merge Queries → select tables, join columns, join type
// M code equivalent:
= Table.NestedJoin(
Table1, {"KeyColumn"},
Table2, {"KeyColumn"},
"Table2",
JoinKind.LeftOuter
)
9.3 Tableau relationships to Power BI model relationships¶
Tableau relationships (introduced in 2020.2) map closely to Power BI model relationships:
| Tableau relationship concept | Power BI relationship concept | Notes |
|---|---|---|
| Relationship between tables | Relationship between tables | Both support 1:1, 1:many, many:many |
| Relationship cardinality | Cardinality | Configure in model view |
| Performance options | Cross-filter direction | Single or Both for bi-directional |
| Root table vs related table | Fact table vs dimension table | Star schema: fact in center, dimensions around |
10. Migration validation checklist¶
After migrating each data source:
- Row counts match between Tableau and Power BI at the table level
- Key aggregate measures (SUM, COUNT, AVG) match at the grain level
- Date ranges match (no missing or extra data)
- Null handling is consistent
- Data types match (especially dates, decimals, and text encoding)
- Refresh schedule is configured and tested (for Import mode)
- DirectQuery performance is acceptable (< 5 seconds for typical queries)
- RLS rules produce the same filtered results as Tableau user filters
- Calculated fields are migrated to DAX measures and validated
- Relationships are correctly defined with proper cardinality
Last updated: 2026-04-30 Maintainers: CSA-in-a-Box core team Related: Prep Migration | Server Migration | Calculation Conversion | Migration Playbook