---
title: "Reports that disagree or come back empty"
description: "The six checks for an empty report, and why the dashboard and a report, two reports over the same dates, yesterday's numbers or a colleague's view of the same report disagree — periods, pipelines, caching, freshness, shares and column permissions."
type: "reference"
audience: [network-manager, publisher, advertiser]
keywords: [empty report, report is empty, no data in report, report shows nothing, zero rows, dashboard differs, two reports disagree, numbers changed, freshness, raw log, rollup, cached report, hidden columns, column permissions, sharing scope, view level, report check]
ui_path: "Account → Analytics"
---

Fetch the complete documentation index at: https://epom.com/ad-server/docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Reports that disagree or come back empty

A detail page of [Analytics discrepancies](https://epom.com/ad-server/docs/troubleshooting/analytics-discrepancies.md), which has the 60-second
check, the cause table and what to send support. This page holds the checks where Epom disagrees
with itself: a report with no rows, the dashboard against a report, two reports over the same
dates, numbers that moved after the fact, and a colleague who sees different figures or columns
in the same report. Gaps against a partner's own numbers are on
[Analytics discrepancies against a partner's numbers](https://epom.com/ad-server/docs/troubleshooting/analytics-discrepancies-third-party.md);
what each counter counts and when is on
[What each analytics counter counts and when](https://epom.com/ad-server/docs/troubleshooting/analytics-discrepancies-counting.md).

## Symptom: my report is empty

A report with no rows (or a single row of zeros) has one decisive cause far more often than
"no data was lost". Check in this order — the first one that applies is usually the answer:

1. **The dates.** A period that starts after today has nothing yet. Dates are counted in the
   report's time zone, so "today" early in the morning can still be empty.
2. **Permissions.** The report type (General / Advanced), the time breakdown (Hour, Day…),
   each grouping and each filter has its own reporting permission; the console simply does
   not offer what your role lacks, and over the API the report is refused. A role without
   the **Impressions** column, or without any column set (base / publisher / advertiser),
   gets rows with no delivery figures. A role on the publisher- or advertiser-side column
   set reads those figures only — a period where they were never filled reads as zero for
   it while the network's own report shows traffic.
3. **How far back the data goes.** Hourly General statistics are kept for a shorter time
   than daily ones — an old period broken down by **Hour** is empty while the same days by
   **Day** are not. The Advanced report keeps its event logs for the number of days the
   network is configured for; older periods are empty there but not in General.
4. **The filtered entities.** An advertiser, campaign, banner, site, zone or placement id
   that does not exist or is not shared with you filters everything out; so does one created
   after the period. Filters also have to agree with each other: a campaign of another
   advertiser, a banner of another campaign or a placement of another site next to each
   other match no row.
5. **Advanced only — the data itself.** The Advanced report sees an hour only after its event
   logs have loaded, so today (and, when loading lags, yesterday) can be empty while General already shows delivery. And a filter on a request
   detail that the network's compacted Advanced data does not keep (device format,
   connection type, language, incognito on many networks) matches nothing.
6. **The filters together.** If none of the above applies, run the General report for the
   same dates **without filters**: empty means nothing was delivered at all in the period
   (see [My ad is not serving](https://epom.com/ad-server/docs/troubleshooting/ad-not-serving.md)); if it has impressions, add the filters
   back one at a time — the one that empties the report is the one to question.

> **Ask the assistant:** "why is my report empty?" with the same dates and filters — its
> report check goes through this list and, when the setup explains nothing, runs the General
> report without filters and then without one filter at a time (up to five analytics
> requests, counted against your daily limit) to name the filter that leaves nothing.
> Over the API: `GET /rest-api/analytics/report-check` (it never runs the report itself).

## Symptom: dashboard and a report disagree

- **Different periods.** On the publisher/advertiser dashboards every block reports the window
  in the header's period control, and each card states it on a pill — read that pill first,
  then check the report's own date range covers the same days. A "Today" dashboard still moves
  while a report you ran an hour ago does not.
- **Different report definitions.** Table/chart widgets on the main dashboard render a
  *saved report* each — open the widget's settings to see which report and period it uses;
  the dashboard's global period override can silently reframe every widget.
- **Different source.** A table or chart widget runs a General, Advanced, Header Bidding or
  Targeting Cookie report. Comparing a General widget against an Advanced report mixes two
  pipelines — see the next symptom.

## Symptom: two reports over the same dates disagree

- **General vs Advanced/logs read different data.** General reads aggregated statistics and
  Advanced and the log reports read the event logs; the two are loaded on separate schedules
  (every hour by default, and Epom support or your account manager can shorten them). For recent hours the two can
  therefore disagree, in either direction.
- **Advanced/log results are cached per query.** Rerunning the same query returns the
  cached result until new data has loaded — two runs minutes apart *should* be identical,
  and a run after the next hourly load can differ. See
  [Report types](https://epom.com/ad-server/docs/guides/analytics/report-types.md) for freshness per type.
- **"Today" is always provisional** in Advanced and log reports; the last minutes-to-hours
  of the day arrive with the next hourly loads. For final numbers, report on yesterday or
  earlier.
- **Group-by dimensions can drop rows.** Advanced reports may exclude dimensions that are
  not carried by the compacted analytics data — a filter on such a dimension can legally
  return zero rows while the totals report shows traffic. If a filtered Advanced report
  returns nothing, retry without the exotic dimension before concluding data loss.

## Symptom: numbers changed after the fact

- **Late-arriving data.** All report types backfill the recent past; small upward
  revisions of yesterday are normal until all logs land.

## Symptom: a colleague sees different numbers / columns in the same report

- **Sharing scope.** Reports only include entities you can view. A user with fewer shares
  sees smaller totals — same report, different data slice.
- **Column permissions.** Column families (base / publisher / advertiser) and individual
  columns (revenue, profit, eCPM…) are permission-gated; group-by and filter options are
  too. The report is not "missing data" — your role hides those columns. Compare roles, not
  reports.
- **Different report type or view.** The analytics view level (simple/extended) changes
  available columns in Advanced reports.

## Related

- [Analytics discrepancies](https://epom.com/ad-server/docs/troubleshooting/analytics-discrepancies.md) — the 60-second check, the cause table and what to send support
- [Analytics discrepancies against a partner's numbers](https://epom.com/ad-server/docs/troubleshooting/analytics-discrepancies-third-party.md)
- [What each analytics counter counts and when](https://epom.com/ad-server/docs/troubleshooting/analytics-discrepancies-counting.md)
- [Report types — freshness and gating](https://epom.com/ad-server/docs/guides/analytics/report-types.md)
- [Run a report](https://epom.com/ad-server/docs/guides/analytics/run-report.md)
- [Dashboards](https://epom.com/ad-server/docs/guides/analytics/dashboards.md)
- [A tab, card or permission is missing](https://epom.com/ad-server/docs/troubleshooting/missing-permission.md)