How to build a dashboard across multiple data sources: pull numbers from systems that do not talk to each other and keep the view current every week.
By Kris Newlin | Updated October 27, 2026 |
|---|
Key Takeaways
These points are for an operations lead whose numbers sit in four systems that do not share data:
- Most multi-source dashboards fail because they go stale. A refresh breaks, nobody notices, and leadership stops trusting the numbers.
- Name one source of truth for each metric before you connect anything. That is how you break up data silos without a new argument every week.
- Choose an integration pattern on purpose: connect sources directly in the BI tool, consolidate them upstream in a warehouse or Power BI Dataflows, or pin visuals from separate reports.
- Store dates in UTC, convert currency with one named rate source, and keep a crosswalk table for customer and record IDs.
- Put a last-refreshed time next to every source, and decide in advance what the view shows when a source fails.
- Post the summary in Slack or Microsoft Teams on a schedule, so people read it without having to remember the dashboard exists.
How to build a multi-source dashboard: the short answer
To build a dashboard across multiple data sources, list each metric and the system it comes from, pick one source of truth per metric, choose how to connect those systems, normalize dates, currencies and IDs, and model the relationships between tables. Then build the view, schedule the refresh, flag stale data and post a summary where the team already works. The last three steps decide whether the dashboard is still in use in month three.
This guide covers only the multi-source problem: getting numbers out of systems that do not share data and keeping them current. For how the dashboard itself gets built, see the guide on building dashboards and internal tools. For which metrics belong on the screen, see the executive KPI dashboard guide.
There are three ways to own this job: a spreadsheet, a BI tool, or an AI employee. Viktor is the AI employee who lives in Slack and Microsoft Teams, connects to 9,800+ tools (most through one-click OAuth), and does the work.
Why multi-source dashboards go stale
Dashboards stop working because nobody keeps them refreshed, and the design is rarely the problem. The work of keeping them current is also expensive: the FP and A Trends Survey 2025 found that 46% of FP and A time still goes to data collection and validation. In dbt Labs’ 2026 research, 71% of data professionals said they were concerned about incorrect data reaching stakeholders.
Vendor documentation describes five common ways a multi-source view goes stale. Each has one fix:
- Expired credentials: Power BI refreshes stop when a data source password expires or changes. Google OAuth projects left in Testing status issue refresh tokens that expire after 7 days. Fix: connect through a Google Cloud service account rather than one person’s login.
- Renamed columns: Power BI service refresh fails when a source column or table is renamed or removed, because the service does not refresh the schema. Fix: run a schema refresh in Power BI Desktop and republish the model.
- Silent suspension: Power BI turns off a refresh schedule after four consecutive failures. Tableau Cloud suspends after five. Fix: have a site admin enable the email that goes to the data source owner when a scheduled refresh fails.
- Inactivity pause: Power BI pauses scheduled refresh after two months with no views. Any view by any user resets that counter. Fix: send a recurring summary that links back to the report, so someone opens it.
- Manual exports: A daily CSV pasted into a report goes stale between the export and the review. Fix: pull the data on a schedule from the source itself.
Step 1. List the numbers and where each one lives
Start with an inventory before you build anything. Each metric gets one row with the system that holds it, the person who answers for it, and how often that system changes. A typical ops inventory looks like this:
Metric | System | Owner | How often it changes |
|---|---|---|---|
Pipeline value | HubSpot | Sales lead | Hourly |
Recognized revenue | Stripe | Finance | Daily |
Ad spend | Meta Ads, Google Ads | Marketing | Daily |
Open support tickets | Help desk | Support lead | Continuously |
The last column matters more than it looks. It sets the fastest refresh that can show anything new, which comes up again in Step 6.
Step 2. Pick one source of truth per metric
Data silos are the reason multi-source dashboards exist, and also the reason they disagree. Teams may report the same metric from different systems, so choose a single source of truth for each metric. Revenue may appear in Stripe, QuickBooks and the CRM, and if the dashboard reads all three, the totals will disagree and every meeting starts with an argument about which one is right. ClicData describes a typical case: two reports drew from the same source, but one filtered on created date and the other on closed date.
Write the rule down for each metric: which system to use, which field to read, and which date to filter on. dbt Labs’ example stores revenue as “revenue - cost” in code, which keeps people from building their own versions. Locally Optimistic recommends giving each metric a business owner and a technical owner who recertify the definition at least quarterly.
Step 3. Choose an integration pattern and connect the systems
Before you connect anything, decide where the data gets combined. There are three common patterns in BI tools, plus the option of having an AI employee read each tool directly:
Pattern | Freshness | Setup effort | Filters across sources | Typical cost |
|---|---|---|---|---|
AI employee (Viktor) reads each tool through its connector | As often as the scheduled task runs | Low: describe the report in plain language | Viktor joins the data in the report he writes | Credits per run |
Direct connect in the BI tool (Import mode, DirectQuery or a composite model) | Import: up to the refresh limit. DirectQuery: live at query time | Medium: one model, several connections | Yes, through model relationships | BI licenses only |
Consolidate upstream (warehouse, pipelines or Power BI Dataflows) | As fresh as the pipeline schedule | High: a warehouse plus sync tools | Yes, and every report reuses the same tables | Warehouse and connector fees |
Pin visuals from separate reports onto one dashboard | Each tile keeps its own report’s refresh | Lowest: no data merging | No: the tiles do not filter each other | BI licenses only |
Direct connect suits a handful of sources and one team. In Power BI, Import mode copies the data into the model and needs scheduled refresh, while DirectQuery mode stores only metadata and queries the source each time someone opens or filters the report. Microsoft lists two reasons to choose DirectQuery: data too large to import, or a need for fresher data than scheduled refresh allows. A model that mixes storage modes, such as Import tables plus a DirectQuery connection to another semantic model, becomes a composite model.
Consolidate upstream when several reports need the same cleaned tables, or when one source is too slow to query live. Sync pipelines land each system in a warehouse, and Power BI Dataflows hold reusable transformation logic that many semantic models and reports can share, so nobody rebuilds the same connection. This costs the most to run, so start with direct connect unless more than one team reports from the same data.
Pin visuals when you need one screen quickly and the numbers do not have to interact. Microsoft notes that you can pin visuals from different reports or datasets to one dashboard, but you can’t create a new visual on the dashboard that combines data from different datasets. Use it for a status wall, not for analysis.
Whichever pattern you pick, connect the systems through supported connectors, not copy and paste. Sync tools publish their own connector counts: Fivetran lists 700+ managed connectors and Zapier lists more than 9,000 apps in its own directory. Each plan tier sets how fresh the data can be: Coupler.io refreshes manually on its free plan and daily on Starter, and Airbyte Standard syncs at most hourly.
Viktor connects to 9,800+ tools. If a tool is missing but has an API or MCP server, he can usually build the connection himself. Each connection can be shared with the workspace or kept private to the person who connected it and the people or groups they invite.
Step 4. Normalize dates, currencies and IDs
Numbers from separate systems will not add up until they share a date format, a currency and an identifier. Handle each one this way:
- Dates: Use the ISO 8601 order (YYYY-MM-DD) and store timestamps in UTC. PostgreSQL, for example, converts
timestamp with time zonevalues to UTC on input and converts them back for each session on output. Without this, Sigma notes, a sale recorded in UTC can show up on the following day for a manager in another time zone. - Currency: Pick one rate source and name it on the dashboard. The ECB publishes euro reference rates around 16:00 CET on working days, for information purposes. The Federal Reserve’s H.10 release gives noon buying rates in New York. PwC notes that an average rate for the period can stand in for transaction-date rates, but it becomes inappropriate when rates swing significantly.
- IDs: Keep a crosswalk table that maps each system’s ID to one master ID. Domo’s example links CRM-1847, BILL-9923 and SUP-4421 to master ID CUST-00042891. Match exactly on a shared email or customer ID first. Use probabilistic matching only for the records left over.
- Grain: Bring every table to the same level of detail before you join it. If billing is daily and the budget sheet is monthly, sum the daily rows to month before comparing, or the monthly number repeats on every day and totals inflate.
In Power BI or Excel, Power Query does this consolidation. Merge Queries joins two tables on one or more matching columns. Left outer keeps every row from the first table, inner keeps only matches, and left anti returns the rows with no match, which is a quick way to find customers missing from the crosswalk. When you match on several columns, select them in the same order in both tables.
Step 5. Model the relationships, then build the view
If you used direct connect, the model decides whether one filter works across every source. Microsoft recommends a star schema: fact tables hold events and numbers (deals, invoices, tickets), and dimension tables describe the things you report on (customer, date, region). Each fact table should load at a consistent grain. Relationship cardinality sets how tables filter each other. One-to-many is the common case, such as one customer in the crosswalk to many invoices. Many-to-many is available with composite models, but a shared dimension table such as the customer crosswalk or a date table is easier to trust.
Building the layout is the familiar part, but a multi-source view needs one more rule: every source shows its own last-refreshed time. ClicData recommends timestamping each dataset load and showing a “last refreshed” time on every dashboard. Tools handle this differently: Looker Studio prints the last refresh in the bottom-left corner of the report, and in Power BI a Power Query query and a card can show it, with DateTime.LocalNow returning UTC in Power Query Online.
Viktor can build the view as a live report he writes from the connected data and keeps current at the same link, with access controls. Hampton’s customer story describes the reporting work: in 44 days Viktor connected 24 tools, took over reporting and produced 12 dashboards.
Step 6. Schedule the refresh and flag stale data
Set the refresh to match how often decisions get made, not as fast as the tool allows. Domo’s guidance puts operational dashboards at near-real-time or hourly, tactical ones at daily, and strategic ones at daily or weekly. Microsoft says to match the interval to how often new data arrives: if data lands every 20 minutes, a faster refresh shows nothing new.
Tool limits also apply:
- Power BI Pro allows up to 8 scheduled refreshes a day, and Premium Per User allows 48.
- Looker Studio refreshes Google Ads and Google Analytics data every 12 hours, and that rate cannot be changed.
- IMPORTRANGE in Google Sheets checks for updates every hour while the file is open.
Two Power BI features help when sources update at different rates. Incremental refresh reloads only recent data in large tables and works on Power BI Pro, Premium Per User, Premium and Embedded. Adding real-time DirectQuery data to it requires Premium or Premium Per User. Sources inside your own network, such as an on-premises SQL Server or ERP, need the on-premises data gateway, a Windows app that acts as a bridge and needs only outbound ports. Keep it on the latest release, because Microsoft supports only the last six.
Flag stale data with two thresholds. dbt’s source freshness example warns after 12 hours and errors after 24. Give each source a warning age and a failure age, and show both on the view.
With Viktor, the schedule is a plain-language scheduled task, and the stale-data rule goes into the same brief: “If Stripe has not updated since Friday, say so at the top.” His tasks can run at most once every 5 minutes, so for a weekly revenue number choose a refresh interval that supports the decision, since more runs cost credits, and a task cannot resume while one of its integrations needs reconnecting. Start your first reporting task free with up to $100 in credits and no credit card.
Step 7. Post the summary where the team works
A dashboard nobody opens goes stale the same way as one that never refreshes. Power BI subscriptions email a snapshot and a link on a schedule, and Tableau subscriptions email an image or PDF snapshot. Looker Studio can deliver to Slack on Looker Studio Pro.
Viktor posts in the channel itself. A typical instruction: “Every Monday, pull the pipeline from HubSpot, combine it with billing in Stripe and post the summary in #ops.” Viktor posts internal summaries on his own. Viktor waits for approval through approval cards in Slack or Microsoft Teams before changing an account, such as updating a CRM record. He never runs a rejected action.
If the current process lives in someone’s head, they can screen-record it once with narration. Viktor turns the recording into an editable skill and proposes a scheduled task that stays paused until someone approves it. Activity shows credit use by person and task, and spend limits cap the total. See how shared credits work on the pricing page.
Worked example: CRM, ERP, ticketing and a spreadsheet in one view
Take an ops lead with HubSpot for deals, an ERP for invoices, a help desk for tickets and a Google Sheet with the monthly budget. A working setup looks like this:
- Sources of truth: Pipeline from HubSpot, booked revenue from the ERP’s invoice table, open tickets from the help desk, budget from the sheet.
- Pattern: Direct connect, because one team uses it and all four systems have connectors.
- Keys: A crosswalk table maps the HubSpot company ID, the ERP customer number and the help desk organization ID to one master customer ID. A date table covers every day in the reporting range.
- Grain: Invoices and tickets are summed to month before they meet the monthly budget. Daily views use only the daily tables.
- Model: The crosswalk and the date table are dimensions. Deals, invoices and tickets are fact tables, each one-to-many from the crosswalk and the date table, so filtering one customer filters all three.
- Refresh: The ERP refreshes nightly through the gateway, HubSpot and the help desk every few hours, the sheet daily. Each source shows its own last-refreshed time.
- Delivery: A Monday summary goes to #ops with a link to the full view.
With Viktor, the same job is one instruction: “Every Monday, combine HubSpot pipeline, ERP invoices, open tickets and the budget sheet by customer and month, and post the summary in #ops.” He can keep the crosswalk as a table and flag any customer he cannot match.
Cost, licensing, time and security
Licensing: Power BI Pro costs $14 per user per month and Premium Per User $24, both paid yearly. Pro caps scheduled refresh at 8 a day, Premium Per User at 48. Warehouse and connector fees come on top if you consolidate upstream. Viktor runs on shared workspace credits, so a weekly report costs what its runs use.
Time: A direct-connect dashboard over four sources is mostly Steps 1, 2 and 4. Agreeing on definitions and building the crosswalk take longer than the layout. Budget ongoing time too, since credentials, renamed columns and failed refreshes need someone to watch them.
Security: Putting data from several systems in one place widens who can see it, so plan access before you share the link. In Power BI, row-level security restricts which rows each viewer sees, but it applies only to users with Viewer permissions, not to workspace Admins, Members or Contributors. Connect through service accounts with read-only scopes rather than one person’s login. In Viktor, each connection can stay private to the person who connected it, and any change to an account waits for an approval card.
Spreadsheet, BI tool or AI employee: which to use
The right choice depends on who will keep the refresh running in month three. Here is how the three options compare:
Option | Best fit | How refresh happens | Who keeps it running |
|---|---|---|---|
AI employee (Viktor) | Recurring cross-tool reporting delivered in Slack or Teams | Scheduled tasks across 9,800+ connected tools | Viktor, with approvals for account changes |
BI tool (Power BI, Tableau, Looker Studio) | Governed analytics on modeled data | Scheduled refresh within plan limits | An analyst or BI admin |
Spreadsheet (Google Sheets, Excel) | Small, stable sets of numbers | Import functions or Power Query | Whoever built the file |
Viktor is the default for an ops team that needs four systems in one view every week without assigning someone to assemble it. A team with a data warehouse and an analyst who wants governed semantic models may get more from a BI tool built for that work. Viktor can still own the weekly summary on top of it. Hand Viktor the Monday report free, with up to $100 in credits and no credit card. For the basics of the category, read what an AI employee is.
FAQ
These answers cover combining sources, refresh cadence, DirectQuery versus Import mode, warehouses, pinned visuals and failed refreshes.
Can I combine data from multiple sources in one dashboard?
Yes. Connect each system through a supported connector, assign each metric one source of truth, and normalize dates, currencies and IDs before blending. In Looker Studio, a blended source refreshes at the shortest interval among its inputs. A Sheets source at 15 minutes blended with a BigQuery source at 4 hours refreshes every 15 minutes.
How often should a dashboard refresh?
Refresh as often as the decision the dashboard supports, and no faster than new data arrives. Operational metrics often need hourly updates or faster. Weekly business reviews do fine on a daily refresh. Plan limits also cap the rate: Power BI Pro allows 8 scheduled refreshes a day.
Should I use DirectQuery or Import mode?
Use Import mode by default: it is fast and works on every Power BI plan, within the scheduled refresh limits. Use DirectQuery when the data is too large to import or the dashboard needs fresher numbers than 8 or 48 refreshes a day allow. Mixing both in one model makes it a composite model.
Should I connect sources directly or build a warehouse first?
Connect directly when one team reports from a few sources. Consolidate into a warehouse or Power BI Dataflows when several teams need the same cleaned tables, or when a source is too slow to query live.
Can I pin visuals from different reports onto one dashboard?
Yes, in Power BI you can pin visuals from different reports or datasets to one dashboard. The tiles keep their own data, so you cannot build one visual that combines them, and they do not filter each other.
What if one source fails on refresh day?
Keep the last good numbers and label them with their age, so nobody reads stale data as current. Power BI’s REST API preserves previous data on failure when commitMode is set to transactional. Fivetran adds nothing to the destination when a sync fails but loses no data. Fix the connection, then let the next scheduled run catch up.
Hire your first AI employee: sign up with up to $100 in credits and no credit card, connect your four systems, and assign the Monday report.