Business Intelligence & Reporting
Build dashboards, track KPIs, and automate recurring reports.
Describe what you want and your AI builds it: dashboards, KPI reports, recurring summaries. No data model setup, no visual editor, no maintenance when schemas change.
From question to dashboard
MarcoPolo dashboards come in two shapes:
- Live dashboards re-query data each time they load. The dashboard calls the
data_queryMCP tool with a saved query file fromconnections/<name>/queries/and amax_rowsbound. In Claude, this is an artifact that calls your MarcoPolo connection; elsewhere, your AI generates a small app whose server-side code callsdata_querywith a MarcoPolo developer API token. - Snapshots embed data your AI has already queried. Use these for one-off reports where live refresh doesn't matter.
Your workspace's skill library includes a build-dashboard skill that walks your AI through both. You can view and edit it on the Skills page of the web app.
Install the Snowflake demo, then:
Break down orders by product category and status, then build me a live dashboard.
AI runs workspace_shell("connection describe snowflake-demo --database ANALYTICS --table ORDERS --json")
→ 8 columns including ORDER_STATUS, PRODUCT_CATEGORY, ORDER_AMOUNT
AI writes connections/snowflake-demo/queries/orders_breakdown.sql
AI calls data_query(connection_name="snowflake-demo",
query_file="connections/snowflake-demo/queries/orders_breakdown.sql",
max_rows=500)
→ 17 orders across 5 categories, 4 statuses
AI builds the dashboard, bound to the same data_query call
AI: Orders breakdown:
- DELIVERED: 11 orders, $9,833 (72%)
- SHIPPED: 3 orders, $2,586 (19%)
- PENDING: 2 orders, $1,195 (9%)
- CANCELLED: 1 order, $123 (<1%)
The dashboard re-runs orders_breakdown.sql through data_query
each time it loads, so it always shows current data.Add a breakdown by country.
AI updates connections/snowflake-demo/queries/orders_breakdown.sql to add SHIPPING_COUNTRY
AI re-runs data_query to confirm the new column
AI updates the dashboard to render the country dimension
→ Top countries: USA (4 orders), UK (3), Germany (2)Because the query lives in a file in your workspace, changing the dashboard's data means editing that file — the dashboard picks up the change on its next load.
Recurring reports
Once you've built a useful query or dashboard, save it for reuse. Query files already persist under connections/<name>/queries/ — re-run or modify them in any future session. Live dashboards refresh themselves on load. For reports that should be produced on a schedule — a weekly CSV, a summary written to artifacts/ — schedule a script in your workspace's crontab:
Write the orders breakdown to a CSV every Monday at 8am UTC.
AI writes scripts/orders_breakdown_report.py
AI runs workspace_shell("mkdir -p logs && (crontab -l 2>/dev/null; echo '0 8 * * 1 cd /workspace && /usr/local/bin/python scripts/orders_breakdown_report.py >> logs/orders-breakdown.log 2>&1') | crontab -")
AI runs workspace_shell("crontab -l")MarcoPolo starts your workspace shortly before a job is due, so scheduled reports run even when you're not in a session. Your skill library's build-scheduled-pipeline skill covers the full pattern; see also Pipelines.
How real teams use this
HubSpot deal pipeline. A RevOps lead at a gaming company tracks all open deals broken down by stage, with line items, product SKUs, and revenue by deal. They combine HubSpot with Google Sheets and Jira data, running 349 commands across 10 active days to build a comprehensive pipeline view.
Weekly board metrics. An ops team combines Snowflake revenue data with Salesforce pipeline data and generates a weekly summary: new ARR, net retention, pipeline coverage, churn rate.
Spend management. A finance team queries invoices and orders from Snowflake, generates quarterly summaries, and flags orders not yet invoiced. The queries persist in the workspace for monthly re-runs.
Best practices
Move data shaping upstream. Put aggregation, filters, and LIMIT in the saved query file, not in dashboard code. Bounded queries keep data_query results small enough to render.
Keep credentials out of dashboards. Dashboards get data only through MarcoPolo MCP tools. Never paste database credentials or API tokens into dashboard code; generated apps read their MarcoPolo token from server-side configuration.
Start simple, then layer. Ask for a basic chart first, then add dimensions, filters, or data from other sources.
Ask for the format you need. If you need a chart for a slide deck, say so. A CSV for a spreadsheet? Ask for that. Your AI exports in whatever format is useful.