Data Studio blending limits expose your real data model problems
When a report starts depending on heroic Data Studio blending, the issue is usually upstream structure, not dashboard craftsmanship.
A blend is reasonable when it combines a few compatible sources for one local report. It becomes a model defect when the report must reconcile grain, identity, time, and business meaning on every query.
Data Studio is now Looker Studio. The failure mode survived the rename.
Start by writing the grain of every input
Most broken blends join tables that are individually valid and collectively incompatible.
orders one row per order
order_lines one row per order and product line
web_sessions one row per session
ad_spend one row per campaign and day
crm_opportunities one row per opportunity snapshotJoining these directly on date, campaign name, customer, or another convenient field can multiply measures. An order with five lines joined to three sessions is no longer one order. Summing revenue afterward produces a number with excellent confidence and no defensible meaning.
Before touching the report, state the desired output grain. If the chart is campaign by day, aggregate every source to campaign by day before joining. If attribution needs order-level identity, build that relationship upstream rather than asking a chart blend to infer it from labels.
Keys must be shared, not merely similar
Names are poor join keys. Campaign, product, branch, salesperson, and customer labels change, collide, and arrive with source-specific formatting.
Create conformed identifiers or mapping tables upstream. Preserve unmatched values and mapping versions so the team can see coverage and repair it. Don’t silently coalesce unknown labels into “Other” before measuring how much data disappeared there.
A blend that joins campaign_name to another platform’s campaign field isn’t integration. It’s a string comparison with marketing consequences.
Time needs one declared contract
External platforms report on different clocks and restatement schedules. One source uses account timezone, another UTC, another the business timezone. Conversions may be attributed to click date while revenue follows order date. Yesterday may remain provisional for several days.
Choose the semantic date for the decision and retain the source dates needed for reconciliation. Document when each source becomes complete enough for the report.
Don’t repair date disagreement through chart-level offsets and filters. Those calculations are hard to reuse and nearly impossible to audit when a platform restates history.
Blend limits are useful evidence
Looker Studio’s blend constraints, supported joins, field behavior, and performance limits aren’t necessarily the root problem. They expose that the report is trying to become a transformation engine.
Warning signs include:
- the same blend copied across several charts
- calculated fields recreating keys or date logic
- filters producing unexpected totals
- measures changing when another dimension is added
- one report acting as the source for another manual export
- editors afraid to touch the blend because nobody can reproduce its result
- query latency and cost rising with every tile
At that point, the logic has acquired shared semantic weight. It belongs somewhere versioned and testable.
Move the stable result upstream
Build a reporting model at the grain the dashboard uses.
For a cross-channel performance view, that may mean:
mart.marketing_performance_daily
report_date
market_id
channel_id
campaign_id
spend
sessions
qualified_leads
orders
revenue
source_completeness_statusEach input is normalized and aggregated before the final join. Mapping, attribution, currency, timezone, and restatement policy become reviewable transformation logic. The dashboard reads one governed surface and focuses on filtering and presentation.
Use several marts when decisions require different grains. Forcing executive daily performance, order-level attribution, and campaign diagnostics into one universal table merely moves the blend upstream without improving the model.
Keep local blends local
Not every blend deserves warehouse work.
A temporary analysis, prototype, or one-off management view can combine two small compatible sources in the report. State the caveat and avoid presenting it as a reusable KPI contract. If the view survives, gains consumers, or starts driving decisions, promote the logic.
The threshold is reuse and consequence, not technical purity. A warehouse model with ownership, tests, and refresh cost is wasteful for a question asked once. A dashboard blend is wasteful when the organization asks the same question every Monday and rebuilds the answer in six charts.
Test totals at each boundary
When moving a blend upstream, reconcile each source before and after aggregation. Check row counts, distinct keys, unmatched mappings, measure totals, and join cardinality.
Use queries that make multiplication visible:
select
campaign_id,
report_date,
count(*) as rows
from mart.marketing_performance_daily
group by campaign_id, report_date
having count(*) > 1;Compare the new model with the existing report over known periods, but don’t assume the old result is truth. The migration may expose that the dashboard had been wrong consistently, which is still wrong despite the admirable consistency.
Let BI return to presentation
Keep formatting, sorting, optional display groupings, and report-specific interaction in the BI layer. Move reusable joins, keys, classifications, denominators, attribution, and time policy upstream.
The broader boundary is described in When reporting logic belongs upstream instead of in the BI layer.
Heavy blending usually means an ordinary business question lacks a stable data product. Fix the grain and identity once, then let every report consume the same answer.
More in this domain: Reporting
Browse allBI Engine: when it matters, when it's a trap
BI Engine can be useful, but only after you prove it is actually accelerating the workload you care about. Otherwise it turns into configuration thrashing around the wrong problem.
Precompute ladder: cache -> scheduled tables -> MVs -> extracts
Precompute is not mainly a feature choice. It is a freshness budget decision: use the cheapest mechanism that meets the reporting need, then stop paying live query cost out of habit.
Why your BI dashboards melt BigQuery
Dashboards do not passively read data. They generate repeated, variable workload, and that behavior is often the real source of BigQuery cost and latency pain.
A dashboard is not an operating system
Dashboards are good at showing state. They are bad at routing action, assigning ownership, and closing operational loops once a metric requires intervention.
How we decide which metrics deserve a dashboard and which deserve a workflow
Some metrics are for observation. Others need ownership, thresholds, timing, and structured action. We decide explicitly which system shape each metric actually deserves.
Related patterns
When reporting logic belongs upstream instead of in the BI layer
If reporting logic affects business meaning, reuse, or trust, it usually belongs upstream where it can be reviewed, reused, and kept consistent across reports.
What makes a KPI trustworthy enough to automate around
A KPI is not ready to drive action just because it exists on a dashboard. It needs stable meaning, reliable updates, and failure behavior that will not create new chaos.
Why freshness matters less than trust in most reporting systems
A slightly delayed metric that people trust is usually more valuable than a real-time metric nobody believes.
Partitioning defaults for event tables that don't lie
Partitioning is not just a performance tweak. It is one of the cheapest ways to control scan blast radius, but only if the partition contract matches how the table is actually queried.