Looker Studio’s data blending feature queries each data source separately and joins the results client-side. Several failure modes can silently inflate costs and produce incorrect results.
What Blending Does
Looker Studio’s data blending queries each source separately and joins the results client-side — within Looker Studio’s own infrastructure, not inside BigQuery. Each source gets its own BigQuery query; results are joined in memory.
This architecture has two consequences:
1. Each source query runs independently, which means you lose the query optimization benefits of joining inside BigQuery. BigQuery can push filters down, use partition pruning, and optimize join order when the join happens in SQL. Looker Studio can’t.
2. Missing or mismatched join keys create cartesian products. If source A has 10,000 rows and source B has 5,000 rows, and the join key doesn’t match correctly, Looker Studio creates 50,000,000 result rows (10,000 × 5,000). This is a cross join — every row from the left multiplied by every row from the right. It’s the definition of “This chart requested too much data,” which is the exact error message you’ll see when this happens.
Identifying the Problem
Three signs that blending is causing your performance issues:
-
“This chart requested too much data” error on charts using blended data sources. This almost always indicates a cross join or an unintentionally large result set from blending.
-
Query volume explodes with filter changes. With blended sources, changing a filter triggers one query per source, plus potentially a very expensive client-side join. On a dashboard with 3 blended sources and 4 filter controls, a single filter change can trigger 12+ queries.
-
BigQuery spend attributed to your credential spikes without a corresponding change in data volume. Check
INFORMATION_SCHEMA.JOBSfiltered torequestor = 'looker_studio'and compare bytes processed before and after you added blended sources to a report.
Why Join Keys Break
The most common cause of silent cross joins is a join key that looks like it should match but doesn’t:
- Type mismatches: One source has a date field stored as a string (
'2026-01-15'), the other as a DATE type. Looker Studio’s comparison fails silently and falls back to a cross join. - Case differences:
'GOOGLE'doesn’t match'google'. Simple case-sensitivity issues cause cascading cross joins. - Null values: If the join key contains nulls in either source, those rows don’t match any key from the other source. Depending on how Looker Studio handles this, you can get unexpected duplicate rows or dropped rows.
- Grain mismatches: Source A is at the daily grain, source B is at the session grain. Unless you aggregate one of them before the blend, the join multiplies rows.
The Fix: Pre-Join in BigQuery
The right solution for almost every blending use case is to pre-join the data in BigQuery using SQL, then connect Looker Studio to a single data source.
Instead of this (two Looker Studio data sources, blended):
- Source 1: GA4 sessions by date + campaign
- Source 2: Google Ads spend by date + campaign
- Blended on: date + campaign
Do this in BigQuery (a single SQL view or dbt model):
CREATE OR REPLACE VIEW `project.analytics.dashboard_acquisition` ASSELECT ga.date, ga.campaign, ga.sessions, ga.conversions, ads.impressions, ads.clicks, ads.cost_usdFROM analytics.ga4_sessions_daily gaLEFT JOIN ads.google_ads_daily ads ON ga.date = ads.date AND ga.campaign = ads.campaign_name -- Explicit alias to ensure type matchConnect Looker Studio to dashboard_acquisition. One query per chart. No client-side joins. No cross join risk. And you can validate the join logic in SQL before deploying it.
This is the same reason partitioning and clustering work better than Looker Studio filters for cost control: the optimization happens in BigQuery’s query engine, which is designed for it, rather than in the reporting layer, which isn’t.
When You Must Blend
Sometimes blending is genuinely necessary — usually when you need to combine data from different Google products (Search Console + GA4, for example) where a shared BigQuery representation doesn’t exist, or where the pipeline to create one isn’t worth the effort.
If you must blend:
-
Limit to 5 or fewer sources. Looker Studio supports up to 5 sources in a blend, but performance degrades quickly beyond 2-3. Each additional source is another round-trip query and another in-memory join.
-
Verify join keys match exactly. Check data types, case, and grain before publishing. Add a test chart that shows row counts from each source and the blended result — if the blended count is significantly higher than either source, you have a cross join.
-
Aggregate before blending. If source A is at the event level and source B is at the session level, create a Looker Studio calculated field or use a custom query that aggregates source A to session level before the blend.
-
Use extract mode for stable blended sources. If one of your blended sources is a reference table that changes monthly (a campaign taxonomy, a country mapping), put it in extract mode. This reduces the live query load and limits the blast radius of cross join mistakes.
The Semantic Layer Alternative
The underlying problem with Looker Studio blending is the absence of a semantic layer. Looker (Enterprise) solves this with LookML’s join syntax, which defines relationships once and enforces them across all explores. Lightdash reads join definitions from dbt YAML. Looker Studio has neither — it puts the join logic burden on each report author, who may not understand the grain implications.
If you find yourself maintaining more than 2-3 blended data sources across multiple reports, the overhead of managing those blends — debugging cross joins, fixing broken reports when source schemas change, re-explaining the join logic to every new analyst — is usually enough to justify moving the joins into BigQuery proper, or evaluating a BI tool with first-class join semantics. The BI tool selection framework covers the trade-offs.