Analytics and Tracking

High Cardinality

Also called cardinality, cardinality limit

A dimension with a very large number of distinct values, which in GA4 pushes report rows into a catch-all (other) line.

Quick facts: High Cardinality

Category
Analytics and Tracking
Also called
cardinality, cardinality limit
Level
Advanced
Affects
GA4 standard reports, custom dimensions, Looker Studio dashboards, the (other) row
Where to see it
GA4 custom definitions, GA4 reports, BigQuery export, Looker Studio
In this article4
  1. How high cardinality works
  2. Why it matters
  3. Common mistakes
  4. How to act on it

High cardinality describes a dimension in your analytics that holds a very large number of different values, such as an order number, a timestamp or a page address with tracking codes attached. In Google Analytics 4 it matters because report tables can only keep so many distinct rows, and once a dimension pushes past that limit, the detail you wanted is folded into a single row labelled (other).

How high cardinality works

Cardinality is simply the number of distinct values a field can take. Device category has a handful: desktop, mobile, tablet and the occasional smart TV. Postcode district has a few thousand. Transaction ID has as many values as you have orders. The first is low cardinality; the last is about as high as it gets.

GA4 processes raw events into aggregated tables so that reports load quickly. Each table can hold a limited number of unique combinations of dimension values for a given day. When a report needs more combinations than the table can hold, GA4 keeps the most common ones and groups everything else under the (other) row. Combining dimensions multiplies the effect: landing page by source by campaign by city can produce hundreds of thousands of combinations even when each dimension on its own looks manageable.

Google’s GA4 documentation describes a dimension as high cardinality when it has more than 500 unique values in a single day (at the time of writing, October 2026). Most trouble starts with custom dimensions. When you register an event parameter as a custom dimension, GA4 starts building it into those tables. If the parameter carries a session ID, a user ID, a timestamp or a phrase typed into your site search, nearly every event creates a new value, and any report that uses it fills with (other) quickly.

Why it matters

There is no error message. Reports simply stop telling you what you need. An online shop looking at revenue by landing page may find its largest row is (other) because every product URL carries a different filter string. A lead-generation site may lose the breakdown of which campaign produced enquiries because campaign names were built with dates and ad IDs inside them. Budget and content decisions then rest on whichever slice of the data happened to survive.

The problem travels. Looker Studio dashboards built on the GA4 connector inherit the same rows, so a monthly board report can carry a large, unexplained (other) line that nobody in the meeting can interpret or act on.

Common mistakes

  • Registering identifiers such as order numbers, session IDs or client IDs as custom dimensions in order to see everything. Identifiers are useful in raw data, not in aggregated reports.
  • Sending full page addresses, including UTM tags, sort orders or internal search terms, in a parameter you report on.
  • Putting dates, times or random codes into campaign names, which turns a dozen campaigns into thousands of values.
  • Collecting free-text form input as a parameter. Apart from the cardinality, it risks sending names or email addresses to Google, which its terms forbid and UK GDPR makes your responsibility.
  • Treating (other) as lost data. Totals are still correct; it is the breakdown that is missing, and that is often recoverable elsewhere.

How to act on it

Start with an inventory. In GA4’s custom definitions, list every custom dimension you have registered and ask, for each one, whether anyone needs to see it as rows in a standard report. If the honest answer is no, archive it. The parameter can still be collected and analysed in raw form.

Where you do need the dimension, reduce its values before they reach GA4. Group product pages into categories, strip query strings from the page paths you report on, and send a basket value band such as £50 to £99 rather than the exact amount when you want to segment by it. Agree a campaign naming convention without dates, write it down in one shared document, and use it across Google Ads, Meta and email.

For genuine row-level questions, such as revenue per order or the path of an individual visitor, use the free BigQuery export, which keeps every event without the aggregation limits. It only collects data from the day you switch it on, so set it up before you need it. Keeping GA4 reports lean and decision-focused, and leaving the fine detail to raw data, is how I design measurement as part of performance marketing work.

Do and do not

Do

  • Register only dimensions someone will read as rows in a report
  • Group detailed values into categories or bands before sending them
  • Use the BigQuery export for order-level or user-level analysis

Do not

  • Register IDs, timestamps or full URLs as custom dimensions
  • Put dates or random codes into campaign names
  • Collect free-text form input as an event parameter

Questions people ask about this

What is the (other) row in GA4?

It is the row GA4 uses when a report has more unique rows than the underlying table can hold for that period. The most common values are shown individually and the rest are grouped together. Totals stay accurate, but the breakdown inside (other) is not visible in that report. A large (other) row usually points to a high-cardinality dimension or to too many dimensions combined in one table.

Can I recover detail that has already gone into (other)?

Sometimes. An exploration over a shorter date range, or with fewer dimensions, may show rows a standard report could not. If you had the BigQuery export switched on at the time, every event is there in full. The export does not work retrospectively for data collected before you set it up, so the real fix is to change what you send from now on.

Is a high-cardinality dimension always a mistake?

No. Page path on a large site is high cardinality and still essential. The aim is to keep values meaningful and consistent, for example by stripping tracking codes from URLs, and to know where to go for row-level detail. Dimensions that exist only to identify individual events or people belong in raw data, not in reports.

Related terms

Found this useful?

Share it, or ask an AI to summarise it

Back to the glossary

Knowing the term is the easy part

Applying it to your own site and budget is the work. Book a call and I will tell you what actually applies to you.