Workbook to Streamlit app
Dashboards to Streamlit apps
The dashboard's layout, marks, colors, sort and number formats become a Streamlit in Snowflake app, with its filters as live selectors.
Boreon MCP Layer · Migrations
The Boreon MCP Layer sits between your Tableau Server or Tableau Cloud site and Snowflake. Ask for a workbook and the agent reads it, turns the Prep flow underneath into a dynamic table, rebuilds the dashboard as a Streamlit in Snowflake app, and checks every number against Tableau before publishing. Nobody writes a script or a line of SQL.

Migrate Sales Pipeline Review to Snowflake
CREATE DYNAMIC TABLE sales.pipeline_dt
TARGET_LAG = '1 hour'
WAREHOUSE = compute_wh AS
WITH clean AS (…),
joined AS (…)
SELECT … FROM joined
created
Published, with a fidelity report for every sheet.
The layer reads each side through its own APIs and keeps a map of how Tableau fields line up with warehouse columns. It only writes when you ask, and it logs every write.
Tableau
Boreon MCP Layer
Behind the Data & AI Portal
Snowflake
Workbook to Streamlit app
The dashboard's layout, marks, colors, sort and number formats become a Streamlit in Snowflake app, with its filters as live selectors.
.tfl to dynamic table
Each flow step becomes a CTE in one SQL statement, created as a Snowflake dynamic table, or a materialized view where Snowflake allows one.
Flow, table, app
A workbook fed by a Prep flow moves as one job. The table is created and verified first, then the app is built on it.
A dashboard is only rebuilt on the Snowflake tables its data already lives in. If a single sheet can't be matched, nothing is published, and you get the reason.
Averages, distinct counts and medians stay exact under dashboard filters, and every result is checked against Tableau's answer.
Every sheet's query runs on Snowflake before publishing, so the app opens without SQL errors.
It signs in with a key pair or OAuth, or as each person through Snowflake OAuth, so their own roles apply.
It only writes what you ask for, a published app or a new table, and logs each one.
Start there. It becomes the first thing we move, checked number by number against Tableau, and the portal it lands in stays yours.