Skip to main content

Migrating to Holistics

This is the overview of the migration process from Power BI → Holistics:

power-bi-to-holistics
  1. Convert your .pbix file to a .pbip project

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)

  1. Connect Holistics to your data warehouse

  2. 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
  1. 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
Items that need manual migration

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 BIHolistics equivalentNotes
Data alertsAlertsRe-create thresholds and recipients in Holistics.
Scheduled refresh / subscriptionSchedule & email reportsHolistics schedules send dashboard snapshots; no warehouse refresh job needed.
Embed in app / Publish to webEmbedded analyticsEmbed tokens and iframe URLs must be reissued.
Share link / publish to web linkShareable linkGenerate 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 .pbip export 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.
  • A warehouse Holistics can connect to
  • Holistics project set up for local development
  • The holistics-migrate-power-bi skill 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, and sync-code so the agent can validate as it writes.
  • develop-amql: authors .model.aml, .dataset.aml, and .page.aml files.
  • 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

Additional resources


Open Markdown
Let us know what you think about this document :)