{"id":50335598,"url":"https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator","last_synced_at":"2026-05-29T13:30:24.781Z","repository":{"id":360033697,"uuid":"1243566091","full_name":"databricks-solutions/powerbi-on-databricks-migration-accelerator","owner":"databricks-solutions","description":"This accelerator aids repointing existing Power BI semantic models to Databricks SQL at scale","archived":false,"fork":false,"pushed_at":"2026-05-24T17:23:07.000Z","size":22630,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-24T18:33:07.989Z","etag":null,"topics":["databricks","databricks-sql","dbsql","migration","powerbi","unitycatalog"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/databricks-solutions.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.md","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-19T13:09:15.000Z","updated_at":"2026-05-24T17:24:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator","commit_stats":null,"previous_names":["databricks-solutions/powerbi-on-databricks-migration-accelerator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/databricks-solutions/powerbi-on-databricks-migration-accelerator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/databricks-solutions%2Fpowerbi-on-databricks-migration-accelerator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/databricks-solutions%2Fpowerbi-on-databricks-migration-accelerator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/databricks-solutions%2Fpowerbi-on-databricks-migration-accelerator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/databricks-solutions%2Fpowerbi-on-databricks-migration-accelerator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/databricks-solutions","download_url":"https://codeload.github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/databricks-solutions%2Fpowerbi-on-databricks-migration-accelerator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33655440,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["databricks","databricks-sql","dbsql","migration","powerbi","unitycatalog"],"created_at":"2026-05-29T13:30:23.362Z","updated_at":"2026-05-29T13:30:24.776Z","avatar_url":"https://github.com/databricks-solutions.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# :rocket: Power BI on Databricks Migration Accelerator\n\n[![Databricks](https://img.shields.io/badge/databricks-000000?logo=databricks\u0026logoColor=red)](https://www.databricks.com)\n[![License](https://img.shields.io/badge/license-Databricks-orange.svg)](./LICENSE.md)\n[![PowerShell](https://img.shields.io/badge/PowerShell-7.4%2B-5391FE?logo=powershell\u0026logoColor=white)](https://learn.microsoft.com/en-us/powershell/)\n[![Power BI](https://img.shields.io/badge/Power%20BI-PBIP-F2C811?logo=powerbi\u0026logoColor=black)](https://learn.microsoft.com/en-us/power-bi/developer/projects/projects-overview)\n[![build](https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator/actions/workflows/ci.yml/badge.svg)](https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator/actions/workflows/ci.yml)\n![GitHub Release](https://img.shields.io/github/v/release/databricks-solutions/powerbi-on-databricks-migration-accelerator)\n\nRepoint Power BI semantic models from Snowflake / Redshift / SQL Server / Synapse / HMS to Databricks SQL + Unity Catalog - without rebuilding reports.\n\n- **Bulk** - process hundreds of `.pbip` files or whole Power BI workspaces from one CLI.\n- **Configuration-driven** - every transformation lives in a single JSON configuration file validated by [Configuration.schema.json](./Configuration.schema.json).\n- **Safe** - `-WhatIf` previews, optional dataset backups, transcript logs, and a Pester test suite gating every change.\n\n\u003e [!IMPORTANT]\n\u003e This tool does **NOT** implement a conversion of Power BI semantic models and reports to Unity Catalog Metric Views and AI/BI dashboards.\n\n\n## Contents\n- [Why it exists](#bulb-why-it-exists)\n- [How it works](#gear-how-it-works)\n- [Prerequisites](#clipboard-prerequisites)\n- [Quick start](#computer-quick-start)\n- [Migration scenarios](#hammer_and_wrench-migration-scenarios)\n- [Known limitations](#warning-known-limitations)\n- [FAQ](#faq)\n- [Contributing](#contributing)\n- [Support](#support)\n- [License](#license)\n\n\n## :bulb: Why it exists\n\nMigrating dozens or hundreds of Power BI reports from a legacy warehouse to Databricks SQL is repetitive, error-prone work - every model has near-identical Power Query M code that needs the same edits. This accelerator automates that mechanical layer so you keep your existing Power BI investment and only the data source changes.\n\nIt is implemented as a PowerShell module under [src](./src/) and exposed via the [PowerBI-migration-accelerator.ps1](./PowerBI-migration-accelerator.ps1) CLI wrapper. It automates the following at scale:\n\n- creating common semantic model parameters\n- modifying Power Query M code by updating data source connections\n\nThe accelerator is configuration-driven: the changes applied are defined declaratively in a JSON configuration file.\n\n\n## :gear: How it works\n\n![Accelerator workflow](images/accelerator-workflow.png)\n\n1. Load prerequisites / libraries required to load and change Power BI files / semantic models.\n2. Load configuration file.\n3. Iterate through folders / files defined in the configuration file (or Power BI workspaces).\n4. Load Power BI Project file (`*.pbip`) or semantic model.\n5. Configure semantic model settings as defined in the configuration file.\n6. Create parameters as defined in the configuration file.\n7. Iterate through tables/partitions in the semantic model.\n8. For every partition, apply a set of update rules — regular expressions that update partition M code.\n9. Save Power BI Project file or semantic model.\n\n![How it works](images/how-it-works.gif)\n\nFor a deeper dive into runtime flow, configuration precedence, and module layout, see [docs/architecture.md](./docs/architecture.md).\n\n\n## :clipboard: Prerequisites\n\n- [PowerShell Core](https://learn.microsoft.com/en-us/powershell/?view=powershell-7.5) 7.4.0 or above\n- Power BI Premium workspaces - when updating published semantic models\n    - Premium / PPU / Embedded / Fabric\n    - Contributor, Member, or Admin role\n    - XMLA read/write enabled\n- [Power BI Desktop](https://www.microsoft.com/de-de/download/details.aspx?id=58494) Nov 2025 or later\n    - [Power BI Project + TMDL preview enabled](/images/powerbi-desktop-settings.png)\n- Databricks workspace\n    - Unity Catalog enabled\n    - SQL Warehouse\n\n\n## :computer: Quick start\n\n```powershell\n# 1. Clone the repository\ngit clone https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator.git\ncd powerbi-on-databricks-migration-accelerator\n\n# 2. Pick (or modify) a sample config — see ./docs/configuration.md\n# 3. Preview every change without writing anything\n./PowerBI-migration-accelerator.ps1 -WhatIf -Verbose\n\n# 4. Run for real, optionally pointing at a custom configuration file\n./PowerBI-migration-accelerator.ps1 -ConfigFilePath './configurations/Snowflake.json'\n```\n\n\u003e [!IMPORTANT]\n\u003e **Windows:** right-click [PowerBI-migration-accelerator.ps1](./PowerBI-migration-accelerator.ps1) → Properties → **Unblock** before first run. See [unblock PowerShell script](/images/Unblock-PowerShell-script.png).\n\u003e\n\u003e **macOS / Linux:** run `chmod +x PowerBI-migration-accelerator.ps1` to grant execute permissions.\n\n\u003cdetails\u003e\n\u003csummary\u003eSample script output\u003c/summary\u003e\n\n```console\n2026-05-11T18:28:36 Loading TOM library ...\n2026-05-11T18:28:36 Analyzing local folder \"./_demo\"...\n2026-05-11T18:28:36 Skipped file: \"Databricks\"\n2026-05-11T18:28:37 Skipped file: \"HMS-incremental-refresh\"\n2026-05-11T18:28:37 Skipped file: \"HMS\"\n2026-05-11T18:28:37 Skipped file: \"Redshift\"\n2026-05-11T18:28:37 Dataset name: \"Snowflake.pbip\"\n2026-05-11T18:28:37 Dataset ID: \"\"\n2026-05-11T18:28:37 CompatibilityMode:  \"Unknown\"\n2026-05-11T18:28:37 CompatibilityLevel: \"1600\"\n2026-05-11T18:28:37 EstimatedSize:      \"0\"\n2026-05-11T18:28:38 LastUpdated:        \"01/01/0001 00:00:00\"\n2026-05-11T18:28:38 LastProcessed:      \"01/01/0001 00:00:00\"\n2026-05-11T18:28:38 LastSchemaUpdate:   \"01/01/0001 00:00:00\"\n2026-05-11T18:28:38 Updated dataset \"Snowflake.pbip\" : Data Source Default Max Connections = 20\n2026-05-11T18:28:38 Updating dataset \"Snowflake.pbip\" : adding parameter ServerHostname=adb-2219810816778143.3.azuredatabricks.net\n2026-05-11T18:28:38 Updating dataset \"Snowflake.pbip\" : adding parameter HTTPPath=/sql/1.0/warehouses/a5ad4687dadae274\n2026-05-11T18:28:38 Updating dataset \"Snowflake.pbip\" : adding parameter Catalog=tpch\n2026-05-11T18:28:38 Updating dataset \"Snowflake.pbip\" : adding parameter Schema=sf1\n2026-05-11T18:28:38 Analyzing table \"MeasuresTable\"...\n2026-05-11T18:28:39 Analyzing table \"orders\"...\n2026-05-11T18:28:39 Updating table \"orders\" partition \"orders\"...\n2026-05-11T18:28:39 Analyzing table \"lineitem\"...\n2026-05-11T18:28:39 Updating table \"lineitem\" partition \"lineitem\"...\n2026-05-11T18:28:39 Analyzing table \"part\"...\n2026-05-11T18:28:39 Updating table \"part\" partition \"part\"...\n2026-05-11T18:28:39 Analyzing table \"customer\"...\n2026-05-11T18:28:39 Updating table \"customer\" partition \"customer\"...\n2026-05-11T18:28:39 Analyzing table \"region\"...\n2026-05-11T18:28:39 Updating table \"region\" partition \"region\"...\n2026-05-11T18:28:40 Analyzing table \"nation\"...\n2026-05-11T18:28:40 Updating table \"nation\" partition \"nation\"...\n2026-05-11T18:28:40 Analyzing table \"orders_with_role\"...\n2026-05-11T18:28:40 Updating table \"orders_with_role\" partition \"orders_with_role\"...\n2026-05-11T18:28:40 Saving changes to file \"Snowflake.pbip\"...\n2026-05-11T18:28:40 Saving changes to file \"Snowflake.pbip\" completed\n2026-05-11T18:28:40 Skipped file: \"SqlServer\"\n2026-05-11T18:28:40 Skipped file: \"Synapse\"\n2026-05-11T18:28:40 Analyzing local folder \"./_demo\" completed\nStart Time:   2026-05-11T18:28:36\nFinish Time:  2026-05-11T18:28:41\nElapsed Time: 00:00:04.1904580\n  TotalWorkspaces: 0\n  TotalFolders: 1\n  TotalFiles: 1\n  UpdatedFiles: 1\n  TotalDatasets: 0\n  UpdatedDatasets: 0\n  CreatedParameters: 4\n  TotalTables: 8\n  UpdatedTables: 7\n  TotalPartitions: 7\n  UpdatedPartitions: 7\n\nStartTime           EndTime             Elapsed          Stats\n---------           -------             -------          -----\n11.05.2026 18:28:36 11.05.2026 18:28:41 00:00:04.1904580 {[TotalWorkspaces, 0], [TotalFolders, 1], [TotalFiles, 1], [Upda…\n```\n\u003c/details\u003e\n\n\n## :hammer_and_wrench: Migration scenarios\n\nFor the configuration structure, see the [Configuration](./docs/configuration.md) page.\n\nThe repository ships sample configurations for the following source platforms:\n\n| Source                                         | Config                                              | Power BI template                                  | Notable rules                                             |\n|------------------------------------------------|-----------------------------------------------------|----------------------------------------------------|-----------------------------------------------------------|\n| [Hive Metastore](./configurations/HMS.md)      | [HMS.json](./configurations/HMS.json)               | [HMS.pbit](./samples-pbit/HMS.pbit)                | Catalog/schema parameterization, native queries support   |\n| [Redshift](./configurations/Redshift.md)       | [Redshift.json](./configurations/Redshift.json)     | [Redshift.pbit](./samples-pbit/Redshift.pbit)      | Catalog/schema parameterization, lower-case table names   |\n| [Snowflake](./configurations/Snowflake.md)     | [Snowflake.json](./configurations/Snowflake.json)   | [Snowflake.pbit](./samples-pbit/Snowflake.pbit)    | Catalog/schema parameterization, lower-case table names   |\n| [SqlServer](./configurations/SqlServer.md)     | [SqlServer.json](./configurations/SqlServer.json)   | [SqlServer.pbit](./samples-pbit/SqlServer.pbit)    | Catalog/schema parameterization, native queries           |\n| [Synapse](./configurations/Synapse.md)         | [Synapse.json](./configurations/Synapse.json)       | [Synapse.pbit](./samples-pbit/Synapse.pbit)        | Catalog/schema parameterization, native queries           |\n| [Databricks](./configurations/Databricks.md)   | [Databricks.json](./configurations/Databricks.json) | [Databricks.pbit](./samples-pbit/Databricks.pbit)  | Re-parameterization of existing Databricks connections    |\n\nTwo additional reference configurations demonstrate alternative orchestration modes:\n\n| Mode                | Walkthrough                                  | Config                                              | Description                                                                |\n|---------------------|----------------------------------------------|-----------------------------------------------------|----------------------------------------------------------------------------|\n| Local folder        | [Files](./configurations/Files.md)           | [Files.json](./configurations/Files.json)           | Iterate `*.pbip` projects in a local folder, with per-dataset overrides.   |\n| Power BI workspace  | [Workspaces](./configurations/Workspaces.md) | [Workspaces.json](./configurations/Workspaces.json) | Iterate semantic models in a Power BI workspace via the XMLA endpoint.     |\n\n\n## :warning: Known limitations\n\nPlease see the [Known limitations](./docs/limitations.md) page for more details.\n\n\n## FAQ\n\nPlease see the [Frequently Asked Questions](./docs/FAQ.md) page for more details.\n\n\n## Contributing\n\nThis repository is maintained by Databricks; external pull requests are not currently accepted, but issues and suggestions are very welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup, coding conventions, and the regex-rule workflow.\n\n- Bug reports \u0026 feature requests: [open a GitHub issue](https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator/issues/new/choose)\n- Security disclosures: see [SECURITY.md](./SECURITY.md)\n- CI runs PSScriptAnalyzer + Pester via [.github/workflows/ci.yml](./.github/workflows/ci.yml)\n- The release history lives in [CHANGELOG.md](./CHANGELOG.md)\n\n\n## Support\n\nDatabricks support does not cover this content. For questions or bugs, please [open a GitHub issue](https://github.com/databricks-solutions/powerbi-on-databricks-migration-accelerator/issues) and the team will help on a best-effort basis. For private security disclosures, follow the process in [SECURITY.md](./SECURITY.md).\n\n\n## License\n\n\u0026copy; 2026 Databricks, Inc. All rights reserved. The source code in this repository is provided subject to the [Databricks License](https://databricks.com/db-license-source). All included or referenced third-party libraries are subject to the licenses set forth below.\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eThird-Party Licenses\u003c/strong\u003e\u003c/summary\u003e\n\n| Library                                | Description               | License    | Source                                                            |\n|----------------------------------------|----------------------------|------------|-------------------------------------------------------------------|\n| Microsoft.AnalysisServices              | Analysis Management Objects (AMO) | [License](https://go.microsoft.com/fwlink/?linkid=852989)        | [NuGet](https://www.nuget.org/packages/Microsoft.AnalysisServices) |\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatabricks-solutions%2Fpowerbi-on-databricks-migration-accelerator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatabricks-solutions%2Fpowerbi-on-databricks-migration-accelerator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatabricks-solutions%2Fpowerbi-on-databricks-migration-accelerator/lists"}