---
title: Convert from Tableau or Power BI
description: Turn an existing Tableau workbook or Power BI report into a Dashies dashboard, and read the report that says exactly what did and did not come across.
updated: 2026-08-04
tier: free
---

Dashies can read a Tableau workbook or a Power BI report and rebuild it as a
dashboard that refreshes from your connected warehouse on a schedule.

The file is parsed **in your browser** and never uploaded.

## Convert a file

:::steps

### 1. Open the converter

Go to [dashies.xyz/app/convert](https://dashies.xyz/app/convert) and pick the tool
your dashboard is in.

If you start from a data source card instead, the converter builds against that
warehouse automatically.

### 2. Choose your file

::::tabs{sync=bitool}

:::tab{label="Tableau"}
Accepts `.twb` or `.twbx`, up to **64 MB**.

Refusals you may see:

```bash
That is not a Tableau workbook. Choose a .twb or .twbx file (got report.pdf).
That workbook is 91 MB - the limit is 64 MB.
```
:::

:::tab{label="Power BI"}
Accepts `.pbix`, or a zipped PBIP project, up to **64 MB**.

Refusals you may see:

```bash
That is not a Power BI report. Choose a .pbix or a zipped PBIP project (got report.pdf).
That report is 91 MB - the limit is 64 MB.
```
:::

::::

Qlik is listed but not available yet.

### 3. Read the conversion report

Every element of the source is classified as **converted**, **approximated**, or
**unsupported**, with a reason.

**Nothing is ever silently dropped.** An unsupported element is reported with its
original preserved, so the report is a complete account of the difference between
the two files.

### 4. Publish, and verify the numbers

Then [set a refresh schedule](/guides/refresh-schedule) and run
[the number cross-check](/guides/verify-your-numbers). A converted dashboard needs
that check as much as an authored one, more so where a measure was approximated.

:::

## What comes across

The target chart vocabulary is deliberately small: bar, horizontal bar, line, and
area, plus metric, table, text, and a single-select filter.

**Converted, meaning a faithful equivalent:**

- Tableau: bar, line, and area marks; text marks become a table; `Automatic` with
  one measure over a dimension becomes a line for a date and a bar for a category.
- Power BI: bar, column, and clustered charts; line; area; cards and multi-row
  cards become one metric per value; a table visual becomes a table; a
  single-select slicer becomes a filter.

**Approximated, meaning it renders but differently:**

- Pie, donut, treemap, funnel, ribbon, and waterfall all become bar charts.
- Tableau Gantt becomes a bar.
- KPI and gauge become a metric, dropping the goal, trend, and target.
- Pivot tables and matrices are flattened to a table.
- Dual-axis, stacked, and multi-measure charts collapse to one series.
- Multi-select filters are downgraded to single-select.
- Layout comes across as relative weights, not absolute geometry.
- Multiple Tableau dashboards, or a story, each become one Dashies page.

**Unsupported, meaning reported rather than rendered:**

- Scatter plots comparing two measures.
- All maps, in both tools.
- Range, relative-date, and top-N filters. There is no range control.
- Parameter controls.
- Colour-by-dimension encoding. The runtime is single-accent by design.
- Conditional formatting.
- Custom marketplace visuals.
- `StdDev`, `Var`, percentile, and `Mode` aggregations.

## Two things worth knowing before you start

:::warning{title="Formulas are never executed and never become cube SQL"}
A simple aggregate such as `SUM([Sales])` maps to a measure. An arithmetic ratio
such as `SUM(a)/SUM(b)` becomes a ratio metric, which is an approximation.

Everything else is preserved as an annotation only, not computed: Tableau
level-of-detail expressions (`{FIXED}`, `{INCLUDE}`, `{EXCLUDE}`), table
calculations (`WINDOW_*`, `RUNNING_*`, `INDEX()`, `RANK()`), and named DAX
measures.

If your report's headline number comes out of one of those, you will need to
express it in cube SQL yourself. See
[Author a dashboard with your AI](/guides/author-a-dashboard).
:::

:::danger{title="Power BI cannot do averages, distinct counts, or medians"}
This is the sharpest difference between the two converters, and it looks
identical in the UI.

A `.pbix` keeps its data in a compressed model the browser-side converter never
unpacks, so there is no readable extract to fall back on. A **non-additive**
Power BI aggregate, meaning `Average`, `DistinctCount`, or `Median`, is therefore
reported as **unsupported**.

The Tableau path can handle the same aggregates, because a `.twbx` can carry a
readable data extract.

Same word, two behaviours. If someone tells you "averages are supported", check
which tool they meant.
:::

## Where the data comes from afterwards

| Source | Result |
|---|---|
| Tableau, bound to a matching Dashies data source | Live. It refreshes from your warehouse. |
| Tableau `.twbx` with a bundled extract, no matching data source | A snapshot of the bundled data, frozen. |
| Power BI, bound to a matching data source | Live. |
| Power BI, no matching data source | Unresolved. There is no snapshot fallback. |
| Either tool, no match found | Unresolved. |

To get a refreshing dashboard rather than a frozen one,
[connect the warehouse first](/guides/connect-warehouse), then convert.

## What is deliberately stripped

Web-page zones and image zones are removed rather than rendered. A published
dashboard that embedded a remote frame or a remote image would be a way to reach
back into networks or to track viewers, so those never make it into the output.

Spreadsheets bundled inside a `.twbx` are not parsed at all, and Tableau's
`.hyper` and `.tde` extract formats are unsupported.

## A known limitation

A converted single-value filter still opens **unfiltered**, because the runtime
has no pre-applied filter default yet. The filter works once you use it; it just
does not start in the state the source file had.

## Check it worked

1. **Read the conversion report before publishing.** Every approximated and
   unsupported item is listed. If a headline number is in that list, the
   dashboard is not yet equivalent to the original.
2. **Compare one figure against the original tool.** Open the source report,
   pick the top-line metric, and check it matches.
3. **Run [the number cross-check](/guides/verify-your-numbers)** on every measure
   a tile displays. An approximated ratio is exactly the shape that check exists
   to catch.
4. **Confirm it refreshes.** Open
   [dashies.xyz/app/schedules](https://dashies.xyz/app/schedules): the dashboard
   should show a cadence and a next run. If it does not, the data binding came
   out unresolved and the page is a snapshot, not a live dashboard.
