Migrating to Holistics
This is the overview of the migration process from Power BI → Holistics:
- Convert your
.pbixfile to a.pbipproject
By converting to a pbip project, the semantic model is exposed in TMDL and measures are exposed in DAX
In Power BI, go to File > Save As > Power BI Project (*.pbip)
-
Migrate the project one concept at a time:
- (Optional) Move heavy ETL out of Power Query (M) into upstream SQL or dbt
- Convert PBI tables to Holistics models (table or query type)
- Convert relationships to Holistics dataset relationships
- Convert DAX measures to AQL or SQL metrics
- Convert calculated columns to dimensions
- Rebuild reports as Holistics dashboards
- Validation:
- Compare a sample of measure values between PBI and Holistics
- Re-create one report end-to-end and review with a stakeholder before scaling out
A few Power BI features map to Holistics concepts that live outside the .pbip project, so they can't be lifted from TMDL or JSON. Plan to re-create them manually:
| Power BI | Holistics equivalent | Notes |
|---|---|---|
| Data alerts | Alerts | Re-create thresholds and recipients in Holistics. |
| Scheduled refresh / subscription | Schedule & email reports | Holistics schedules send dashboard snapshots; no warehouse refresh job needed. |
| Embed in app / Publish to web | Embedded analytics | Embed tokens and iframe URLs must be reissued. |
| Share link / publish to web link | Shareable link | Generate fresh links in Holistics and update any docs / wikis that point to PBI. |
Each of these has a Holistics REST API you can use to bulk-create them from a CSV or script, which is the fastest path when you have dozens of alerts or embeds to migrate.
Project structure
If you're used to a .pbip folder layout, here's how the same project looks in Holistics:
power-bi-project/ holistics-project/
project.pbip models/
project.Dataset/ tables/
definition/ orders.model.aml
model.tmdl users.model.aml
tables/orders.tmdl queries/
tables/users.tmdl active_users.model.aml
expressions.tmdl (M code)
project.Report/ datasets/
definition.pbir ecommerce.dataset.aml
report.json marketing.dataset.aml
dashboards/
sales.page.aml
performance.page.aml
Agentic migration process
With the above conceptual mapping, a coding agent with the holistics-migrate-power-bi skill can handle migration smoothly.
Prerequisites
Before you run the skill:
- A
.pbipexport of Power BI- In Power BI Desktop, go to
File > Save As > Power BI Project (*.pbip). - Turn off Auto date/time to keep
LocalDateTable_*artifacts out of TMDL.
- In Power BI Desktop, go to
- A warehouse Holistics can connect to
- Holistics project set up for local development
- The
holistics-migrate-power-biskill installed
Run the migration
Open your Holistics project in the IDE, drop the .pbip folder alongside it, and send one prompt:
/holistics-migrate-power-bi migrate this power bi project into holistics
The skill works through the project in seven phases. You can interrupt or redirect at any point.
╭──────────────────────────────────────────────────╮
│ 1. Inventory │
│ Read TMDL, DAX, relationships, report JSON. │
│ List warehouse schemas via MCP. │
╰────────────────────────┬─────────────────────────╯
▼
╭──────────────────────────────────────────────────╮
│ 2. Models │
│ Write one .model.aml per Power BI table. │
│ Run `holistics aml validate` after each file. │
╰────────────────────────┬─────────────────────────╯
▼
╭──────────────────────────────────────────────────╮
│ 3. Dataset │
│ Write .dataset.aml with models and │
│ relationships. USERELATIONSHIP becomes │
│ active + inactive role-playing relationships. │
╰────────────────────────┬─────────────────────────╯
▼
╭──────────────────────────────────────────────────╮
│ 4. Metrics │
│ Convert DAX to AQL via `mcp generate_aql`. │
│ `CALCULATE` + `USERELATIONSHIP` becomes │
│ `with_relationships`. Time-intelligence │
│ becomes AQL period functions. │
╰────────────────────────┬─────────────────────────╯
▼
╭──────────────────────────────────────────────────╮
│ 5. Dashboard │
│ Write .page.aml canvas dashboard with │
│ filters, visuals, and page layout. │
╰────────────────────────┬─────────────────────────╯
▼
╭──────────────────────────────────────────────────╮
│ 6. Parity │
│ Run `mcp execute_aql` on each metric across │
│ several dimension combinations. Print totals │
│ to compare against Power BI. │
╰────────────────────────┬─────────────────────────╯
▼
╭──────────────────────────────────────────────────╮
│ 7. Sync │
│ Run `holistics sync-code` to push the new │
│ project to Holistics Cloud. │
╰──────────────────────────────────────────────────╯
Review results
Open the new dataset in Holistics. The diagram view should show the same star schema as your Power BI semantic model: fact table in the middle, dimensions around it, active and inactive relationships marked. Spot-check each translated metric against the original DAX, then open the dashboard to confirm the pages and visuals look right.
If a measure or visual is off, ask the agent to fix it in the same conversation. It still has the source .pbip and the generated AML in context.
The agent uses
The migration skill calls into other skills from the same repository:
holistics-migrate-power-bi: orchestrates the phases and owns the DAX-to-AQL mapping rules.setup-amql-development: prepares the CLI, MCP, andsync-codeso the agent can validate as it writes.develop-amql: authors.model.aml,.dataset.aml, and.page.amlfiles.write-aql: generates AQL metric definitions from natural language and DAX context.search-docs: looks up Holistics syntax before writing anything unfamiliar.visualize-data: rebuilds report visuals as canvas dashboard blocks.analyze-data: runs parity comparisons and explains deltas.
Validation checklist
After the migration finishes, sanity-check the result before handing it to stakeholders:
- Project compiles cleanly (
holistics aml validate) - Dataset diagram view shows the same star schema as Power BI
- Each DAX measure has a corresponding AQL metric, and totals match for a known date range
- Role-playing date relationships (active vs inactive) resolve the same joins Power BI used
- Dashboard pages mirror the Power BI report's layout and totals
- Row-level security rules produce the same row counts per user