> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adriel.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FAQs

> Common questions about custom breakdowns and custom metrics — why totals differ, why labels or formulas return nothing, and how totals are computed.

This page answers the questions that come up most often about [custom breakdowns](/widgets/breakdowns-and-metrics/custom-breakdowns) and [custom metrics](/widgets/breakdowns-and-metrics/custom-metrics) — usually when a widget is producing numbers that don't line up with what the source data says.

## Custom breakdowns

<AccordionGroup>
  <Accordion title="Why does a custom breakdown total differ from the ad-account total?">
    A custom breakdown only sums the campaigns that match a defined label condition. Any campaign not caught by any label — an unlabeled campaign — is excluded from the breakdown total, which is why the breakdown total is lower than the ad-account total. The **Unlabeled Campaigns** panel on the custom breakdown shows which campaigns are missing from the labels so they can be added.
  </Accordion>

  <Accordion title="Why doesn't a label catch a campaign that looks like it should match?">
    Label conditions are exact string matches, and capitalization counts. A label named `google` does not group under the same bucket as a Google Sheets `Channel` value of `Google` — the two are treated as separate rows and the widget can appear to double up. Update the label value so it exactly matches (including capitalization) the value in the source column being grouped on.
  </Accordion>

  <Accordion title="A label with a substring condition returns empty on a GA4 or blended source">
    A label condition like "campaign name contains 'Meta'" only fires against the field the source actually populates. On a GA4 data source where campaign name is mapped to `sessionCampaignName`, no rows contain the string `Meta` (only `sessionSource` does). The condition looks correct but never matches, so the row stays empty. Point the condition at the field where the value actually lives, or add a separate condition for that source.
  </Accordion>

  <Accordion title="Why does an Ad-level condition return nothing on a Creative-level source?">
    Label conditions have to be defined at the level where the underlying source has data. A widget filter that combines a Campaign Name condition with an Ad Name condition against a source that only exposes Creatives (for example, Campaign Manager 360's Creatives table) returns no matches, because there is no Ad-level row to test. Move the condition to the level the source actually has (for example, from Ad to Creative), and the rows come back.
  </Accordion>

  <Accordion title="A label's total is 0 even though the source has spend">
    If a label returns 0 spend, the campaigns with meaningful spend are almost certainly not tagged with the value the label is filtering on. For example, a `CTV` label filtering on Campaign Type only picks up campaigns whose Campaign Type field says `CTV` — Peacock or other CTV campaigns that aren't tagged that way get filtered out. Adjust the label conditions to include the campaigns that should be counted.
  </Accordion>

  <Accordion title="A custom breakdown built on a spreadsheet source returns no rows for a valid label">
    Custom breakdowns run against the values in the mapped source column. If a Google Sheet or CSV has no rows matching the condition — for example, a Storygize Spend sheet with no rows tagged `Destination > Planning` — the breakdown label returns nothing. Verify the value exists in the source, and check that the impressions or spend field on the source is actually mapped so the widget has a metric to sum.
  </Accordion>

  <Accordion title="Why do auto-generated labels stop appearing past a certain count?">
    Auto-generated custom breakdown labels are capped at **200 entries by default**. Workspaces with much larger ad-set counts — for example, thousands of ad sets across DV360 or Meta — will hit the cap and miss the trailing labels. The cap can be raised to 10,000 by an Adriel workspace flag; once raised, re-run the auto-label generation to pick up the additional labels.
  </Accordion>
</AccordionGroup>

## Custom metrics

<AccordionGroup>
  <Accordion title="A custom metric returns 0 even though the referenced source has data">
    A custom metric only resolves when every data source referenced in its formula is added to the widget. A formula that references a GA4 field returns 0 when the widget doesn't include GA4 as a source — the numerator or denominator is missing and the KPI resolves to 0 while other visuals on the same widget render normally. Add the missing source to the widget's source list and the metric evaluates.
  </Accordion>

  <Accordion title="The formula references the wrong variant of a metric">
    Some platforms expose more than one variant of the same conversion concept, and Adriel exposes each variant separately. On Google Search Ads 360, conversion metrics whose names end in `(conv time)` are different from the asterisked non-conv-time versions — a formula pointing at the asterisked version when the intended metric is the `(conv time)` version resolves to 0. On Meta, `Lead` and `Lead (Grouped)` are separate metrics. Update the formula to reference the intended variant.
  </Accordion>

  <Accordion title="A cross-channel formula double-counts across sources">
    A custom metric formula is not automatically scoped to one channel. A formula that uses a cross-channel input like `All Conversion (Google)` will pull values on non-Google channels too (for example, TikTok), producing an inflated total. Add a per-source filter on each single-metric condition inside the custom metric so each source contributes only its own values.
  </Accordion>

  <Accordion title="A custom metric formula collides with a renamed raw metric">
    Renaming a raw metric to the same name as another metric in the formula causes collisions. For example, renaming a Meta `Conversion Value` field to `Revenue` and then writing a formula `Revenue + Reddit: Conversion Purchase Total Value` will sum both the renamed Meta field and the Reddit value on Reddit rows, inflating the result. Rename the metric back or remove one of the two references from the formula.
  </Accordion>

  <Accordion title="A formula references the same field twice or points at the wrong sheet column">
    A custom metric formula that adds the same source metric twice — for example, `gss:D2C New Customer One-Time Revenue + gss:D2C New Customer Subscription Revenue` where both are mapped to the same underlying source column — will produce the wrong total. Verify each formula term points at a distinct source field and, for spreadsheet sources, at the correct tab and column.
  </Accordion>

  <Accordion title="Can a custom metric switch behavior between two date periods?">
    Custom metrics do not currently support date-based conditions. A rule like "only count these events for campaigns whose name contains 'June'" fires whenever the campaign name matches — even when the event date is in a later month. To scope behavior to a specific period, split the metric into two period-scoped versions and use them separately.
  </Accordion>

  <Accordion title="Why does a custom metric display a raw numeric ID instead of a name?">
    Once a custom metric is deleted, widgets that still reference it display the raw numeric ID, because the UI's name map falls back to the metric key when no display name resolves. Recovery requires either restoring the metric from a database backup or recreating the metric and re-linking it by ID.
  </Accordion>

  <Accordion title="A custom metric shows stale values after the underlying source refreshes">
    Occasionally a custom metric's cached value doesn't automatically reflect a recent refresh of its underlying source, even though the raw data collected fine. Clicking the refresh button at the top of the dashboard re-runs the metric against the latest cache and displays the correct value.
  </Accordion>

  <Accordion title="The tooltip shows more decimals than the widget itself">
    The custom-metric precision setting only applies to the value shown on the widget itself. The hover tooltip on Overview and Single metric widgets intentionally shows the raw, unrounded value so users can inspect the underlying data. This is designed behavior, not a precision bug.
  </Accordion>

  <Accordion title="Why doesn't the custom metric total equal the sum of the breakdown rows?">
    The total row of a custom metric is computed by applying the formula to the aggregated inputs, not by summing the per-row results. For a multiplication-based custom metric — or for a formula like frequency, where the numerator and denominator both aggregate independently — the total will never equal the sum of the breakdown rows. To scope the total to only certain channels, apply a channel filter to the widget instead of expecting the total to match a row sum.
  </Accordion>
</AccordionGroup>

Related: [Custom breakdowns](/widgets/breakdowns-and-metrics/custom-breakdowns) · [Custom metrics](/widgets/breakdowns-and-metrics/custom-metrics) · [Breakdowns](/widgets/breakdowns-and-metrics/breakdowns) · [Metrics](/widgets/breakdowns-and-metrics/metrics)
