---
title: "Run a report reference"
description: "The companion to Run a report — every control of the Analytics Filter tab in full (date range, time granularity, group by, split columns by, the Columns settings matrix, value filters including labels, templates and custom parameters, the Publishers and Advertisers trees and the Grids view), reading the report tab, report tabs and the row actions."
type: "reference"
audience: [network-manager, publisher, advertiser]
keywords: [run report reference, columns settings, split columns by, conversion action split, label filter match all, banner template filter, custom parameter filter, entity trees, grids view, add to report, query details, KPI tiles, report tabs, row actions, set banners off, block site, block placement]
ui_path: "Account → Analytics → Filter"
---

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.

# Run a report reference

The companion to [Run a report](https://epom.com/ad-server/docs/guides/analytics/run-report.md): that page walks the main path and lists the
caveats; this page describes every control of the Filter tab and the report tab in full.

## Date range

The control is a calendar popover with the preset list down its side — Today, Yesterday, Current
week, Last week, Last 2 weeks, Current month, Last 7 days, Last 30 days, Last month, Last 3
months, Last 6 months, Current year, Last year, and **Custom range**. Clicking two dates in the
two-month calendar beside the list is what makes a Custom range, and it applies as soon as the
second date lands. A preset stays relative: a saved "Last 7 days" still means the last seven days
next month. In a General report the presets follow the network's calendar — the network's time
zone (UTC unless your network has been set to another zone), weeks starting on Monday; an Advanced
report reads them in its own **Time zone**. *Last 7 days* and *Last 30 days* include today in
both. A range your role may not use stays in the list, greyed out with a padlock, rather than
disappearing; each range is its own *Analytics Report Time Range …* permission.

## Time granularity

The control that splits your rows over time. **None** (the default) means the whole window
collapses into one figure per row; **Day** gives one row per day, and **Hour**, **Week**,
**Month**, **Year** and **24 Hours** the obvious equivalents. *24 Hours* is an hour-of-day
profile: every day in the window folded onto a single 24-hour clock. Which steps you can pick
depends on the report type:

| Report type | Time granularity offered |
|---|---|
| General | None, Hour, Day, Week, Month, Year, 24 Hours |
| Advanced | None, Hour, Day, 24 Hours |
| Header Bidding | None, Hour, Day, Week, Month, Year |
| Targeting Cookie | None, Day, Week |
| Impressions / Clicks / Conversions Log | *(no control — a log is a list of events)* |

The list holds only the steps your role may use. If **24 Hours** is missing, ask your network
admin for *Analytics Report Breakdown By 24 Hour*.

**Hour** and **24 Hours** read the hourly aggregates, while every other granularity reads the
daily ones. If the hourly data is behind, switching granularity can change the totals or empty
the report on a network where the daily one is fine.

## Group by

The dimensions that become the rows of your report. The list is grouped under the same headings
the Add filter menu uses (Publishers, Advertisers, Geo & inventory, Device & browser, Traffic
quality, Conversion actions, Attribution, Custom tracking, Labels and templates), and which
entries appear depends on the report type. **The order you tick them in is the order their
columns appear in** — Site then Placement reads as a drill-down, the other way round does not.

There is no **Date** among the Group by dimensions. Bucketing by time is **Time granularity**, a
separate control — and the two combine: Group by *Country* with granularity *Day* gives you one
row per country per day.

Removing **Action** from Group by silently clears the action-custom-parameter split and its filter
values — they only mean anything with an Action grouping. Grouping by **Attribution type** blanks
the delivery metrics rather than repeating them on every row (every non-conversion column comes
back empty): one ad-log row is spread across the attribution types present, so summing them would
multiply each figure by the number of rows it is spread over. The figures stay available in the
un-split report and in the column split.

## Split columns by

What runs *across* the columns instead of down the rows. Group by shapes the rows; this shapes
the columns. It is a multi-select, and the list arrives in four groups:

| Group | Options |
|---|---|
| Your funnels | each conversion funnel you have saved, by name — see [Funnels](https://epom.com/ad-server/docs/guides/conversions/funnels.md) |
| Conversion actions | **Conversion action** (one column per action), **VAST quartiles**, **Viewability**, **Video player interactions** (the same per-action split, with that family's actions picked and ordered for you) |
| Attribution | **Attribution type** (the post-click and post-view arms), **Expired windows** (conversions that arrived after their action's window had closed, and were never credited) |
| Other dimension | **Custom parameter** — the Parameter / Value / Count trio; takes the columns alone, and only once **Action** is in your Group by |

Every one of these splits divides *conversions*, so picking one ticks the column it needs for
you. A per-action split — a funnel, **Conversion action**, or one of the three families — needs
the **Conversions** column itself, in each perspective your columns already use, and the report
comes back without its per-action columns if that tick is missing. The attribution pair is
satisfied by any metric that grows post-click / post-view arms, Revenue included, and only ticks
Conversions when your columns have none. An option that cannot apply right now stays in the
list, greyed, with the reason underneath — *"Group by conversion action first"* on Custom
parameter, for example.

A per-action split reads its columns from the **Conversion Action Filter**: a family or a funnel
writes its actions there, and **Conversion action** waits for you to pick them. Whatever the
filter held before is set aside. Turning the split back to **Off** undoes what the split did:
the filter you had before comes back, so the next report is not filtered by the split's actions,
and the **Conversions** column it ticked for you is unticked. Columns a per-action split has no
room for — **Requests**, **Fill rate**, **Conv. fraud** — drop out of the matrix while it is on
and come back ticked when it goes.

The **Conversion action** split refuses to run with zero or more than 25 actions selected — you
get *"Please select up to 25 conversion actions for the breakdown"* instead of a report. Past 20
columns (actions × attribution arms) the form warns; past 40 it refuses and suggests moving
attribution into Group by. The VAST quartile / viewability / interaction presets pick their own
actions, so they never trip the first rule.

## Columns settings

The collapsible section at the top of the form. It is a matrix: one row per metric, one
tick-column per perspective (**Base**, **Advertiser**, **Publisher**). Tick a row label to take
every perspective of that metric at once, tick a perspective heading to take every metric in it.
The rows sit in the same families the result grid bands its columns by — *Delivery*,
*Conversions*, *Attribution*, *Expired windows*, *Custom parameters*, *Money*, *Uniques*, and
*Other* last — so the section you pick a metric from is the band it arrives under.

Preset chips (**Traffic**, **Revenue**, **Conversions**, **Advertiser charges**,
**Publisher payout**) pick a whole set at once; touching any checkbox flips the chips to
*Custom*. A chip is hidden when the perspective it needs is not yours, and Header Bidding shows
no chips at all. **Show IDs** adds the entity-ID columns. A line under the matrix reads
*"Report will have N columns"* and lists them as chips in the order they will appear. At least
one metric must stay ticked — emptying the matrix raises *"At least one option must be
selected"* and the change is refused. Your picks stick **per report type**: this browser
remembers them, and every run also saves them to your account. If what your account has saved
for a report type is an empty set, the matrix opens with every column ticked rather than none,
and **Run report** never sends a report without a column — it says *"Choose at least one column
in Columns settings, then run the report."* instead. A pick the current shape of the report does
not offer — a column a split or a group-by leaves out — stays remembered and is ticked again as
soon as the column is back; only a preset chip, another report type or a saved report replaces
the picks outright.

The **Columns settings** section and the **Column preset** dropdown in the Advanced row are two
different controls. The section picks *which metrics*; the Advanced dropdown picks a named preset
of Advanced columns.

The **Conversions** column, and I2C, CCR and Conv. fraud with it, counts only conversions of your
own conversion actions. Playback telemetry — the system actions behind VAST quartiles,
viewability and player interactions — is left out of it, so one video impression does not
inflate the count by the number of events it fired; the money those events carry still lands in
Gross and Net. To see the events themselves, pick them in the **Conversion Action Filter** (an
action you pick is counted, whatever it is), group by **Action**, or split columns by *VAST
quartiles*, *Viewability* or *Video player interactions*. Days before release 149 still count
them: the events were not marked as system ones until then. On a network whose Advanced report
runs on compacted logs the count comes from a pre-aggregated figure that still includes them.

## Filters

Active filters show as chips carrying their values; everything else hides behind **Add filter**,
which opens a searchable menu grouped into *Geo & inventory*, *Device & browser*, *Traffic
quality*, *Conversion actions*, *Custom tracking* and *Labels and templates*. **Which groups and
entries appear depends on the report type** — a General report offers Country, Placement Type,
Placement Size, OpenRTB Publisher ID, Conversion Action Filter, Channel, Placement Label, Banner
Label, Banner Template and ISCI / Ad-ID — each only if your role holds its permission. Advanced
adds the whole device, browser and traffic-quality range and keeps Placement Label, Banner Label
and Banner Template, but drops the ISCI / Ad-ID filter; Header Bidding offers only Country and
**Fill Source**. Click a chip to re-open its editor (with **Clear** and **Done**), or its **✕**
to remove it. **An empty filter means "All"** — it is not sent to the server at all. **Placement
Size** takes several sizes at once, like Country and Placement Type: rows of any of the chosen
sizes are kept.

- A filter you open from the menu keeps its chip on the bar even before you give it a value, so
  you can swap one value for another without the chip vanishing under you. The **✕** is what
  removes it.
- Once a **Placement Label** or **Banner Label** filter holds two or more labels, its editor
  shows **Match Any Label** (the default: carrying *any one* of them is enough) and **Match All
  Labels** (the entity must carry *every* label you selected) under the label picker. The two
  label filters share this one setting — switching it in either changes both — and with *Match
  All Labels* on, the chip adds *"· match all"* after the labels. General and Advanced filter
  labels the same way, and both use the labels the placements and banners carry **now**. A
  placement that lost a label last week also drops out of the days before. Grouped by the same
  label field, the report has rows only for the labels you filtered on: a placement that also
  carries another label is not reported under that one too. A placement carrying two of the
  labels still sits in both rows, but the totals count it once, as they would without the label
  group-by — on the Advanced report as on the General one. The Advanced report works those
  totals out in the same run as its rows, so it reports ready only when both are; if that part of
  the run fails, the totals fall back to the sum of the rows, which counts such a placement in
  each of its rows.
- **Banner Template** works the same way on both reports: it keeps the banners built from the
  chosen templates **now**, whatever template they had on the day.
- On the Advanced report, a label or Banner Template filter (or a Banner Template grouping) that
  covers more placements or banners than your network allows (20,000 by default) inside your
  other filters is refused: narrow it by site, zone, placement, advertiser, campaign, banner,
  label or template and run it again. A dashboard widget built that way shows the same message,
  and a scheduled mailing of it is not sent.
- **Conversion action custom parameter** (a Parameter name / Parameter value pair) is offered
  only while **Action** is in your Group by and your role may use custom parameters.
- **Custom parameter**, on the Advanced report, is a row per parameter: a name, and the values
  it may hold. Several values of one parameter count a request holding any of them; a row left
  without a value counts every request that carried the parameter. **Add parameter** adds a row,
  and from two rows up a switch asks whether a request must carry *all of these* (the default,
  the way Country and Browser narrow each other) or *any of these*. The name field suggests the
  parameters registered under [Admin → Custom parameters](https://epom.com/ad-server/docs/guides/admin/custom-parameters.md); for a
  parameter registered with a list of values, the values field offers that list, and takes a
  typed value only if the list accepts values outside it. A list that accepts nothing else also
  offers **Other (not in list)** — the value such a list records for anything outside it — once
  custom parameters are recorded from [Admin → Custom parameters](https://epom.com/ad-server/docs/guides/admin/custom-parameters.md#what-reaches-analytics);
  the filter chip, Query details and the report rows all show it by that name. On a parameter
  registered as a list (*The request can carry several values*), a value counts a request when it
  is **one of the items** the request sent, split as targeting splits them: `18+` counts `18+`
  alone and `news,18+` — recorded as `~other,18+` when the list takes no other value — and
  *Other (not in list)* counts that request too. Grouping by Custom parameter still shows the whole
  recorded value, `~other,18+`, and that whole value, copied from a row or kept in a saved report,
  still counts the requests that recorded it.

Filters you cannot see do not apply. A colleague's saved report that uses a filter you do not
have on screen runs for you *without* that filter, which is enough to make your numbers differ
from theirs.

## Publishers and Advertisers filters

Check-trees — sites, zones and placements on one side; advertisers, campaigns and banners on the
other. **Only the checkboxes reach the report.** Everything else in each panel is a way to find
the entity you want to tick:

| Control | What it does |
|---|---|
| **Search** | narrows the tree to nodes whose name matches |
| **Filter in** | limits the tree to one level — Sites / Zones / Placements, or Advertisers / Campaigns / Banners |
| **Category** | limits it to one publisher or advertiser category — shown only if your role uses categories |
| **Label** + **Matching type** | limits it to entities carrying the chosen labels; *Match Any Label* (the default) or *Match All Labels* — shown only if your role uses labels |
| **Sharing type** + **Username** | limits it to what a given user owns (*Is owner*) or has been shared (*Can edit* / *Can view*) |
| **Expand all** / **Collapse all** | open or close every loaded level |
| **Select all** / **Deselect all** | tick every root node, or clear the whole selection |
| eye button (top right) | **Hide inactive** — pressed by default, so the trees start with active entities only |

**Ticking nothing means every entity**, not none: the report's *Query details* will read
*Site(s): All*, *Advertiser(s): All*, and so on. Tick a parent and only that parent's traffic is
counted, at whatever depth your Group by asks for. Both panels share one open/closed state.

A **Header Bidding** report shows the Publishers tree alone: it counts auction rounds on a
publisher's page and has no demand dimension to filter on.

### The Grids view

If your account is set to the **Grids** view, each panel is instead a flat list of the entities
you sent here with **Add to report** on the Publishers and Advertisers grids; the checkboxes and
the empty-means-all rule work the same way. You can also add to the list right here: the row
above it has **Site** / **Zone** / **Placement** fields on the Publishers side and
**Advertiser** / **Campaign** / **Banner** on the Advertisers side, plus **Reset** and **Add**.

- **Any one field is enough.** Pick only an advertiser and **Add** adds the advertiser; pick a
  banner on its own and it adds that banner. When several fields are filled, the deepest one is
  added — an advertiser plus a campaign adds the campaign. A parent you pick narrows the
  suggestions in the fields below it.
- The added row arrives ticked and the report filter updates at once; an entity already in the
  list is just ticked, not listed twice. **Reset** empties the fields.
- **The other panel narrows the suggestions.** Once the Advertisers list has ticked entries, the
  Publishers fields offer only sites, zones and placements linked to those banners (a ticked
  advertiser or campaign stands for its banners), and the other way round; a line under the
  fields says so. With the other panel empty, they offer everything you may view.
- Zone and Placement (Campaign and Banner) appear only if your role may filter reports at that
  depth.

### Jumping in from an entity

Hover any entity in the Advertisers or Publishers tree and choose **Analytics** on its hover card.
The Filter tab opens pre-filled with that single entity over the last 7 days — review it and press
**Run report**. The deep link applies once and then strips itself from the address bar, so
refreshing will not re-apply the entity over edits you have made since.

## Reading the report tab

**Run report** — in the page header, or the copy at the bottom of the form — opens a new tab next
to **Filter**, named after the report rather than numbered: *Totals · Today*, *Country · Last 7
days*, *Impressions Log · Yesterday*. Advanced and the three event logs run as background jobs and
show a **wait N%** progress bar first.

- The **title line** carries the report's subject and period, plus a **Query details** link that
  opens the exact question that was asked: dates and hours of the day, time granularity,
  group-by, time zone (the network's, when the report did not pick one), every entity filter,
  and every other filter the report ran with — labels, banner template, placement type, custom
  parameters, risk, country and the rest — with each value by name.
- **KPI tiles** — the summary totals, one tile per metric, as many as fit the width. Grouping
  columns never become tiles: grouped by **Custom parameter**, the parameter name and value stay
  in the grid. The star on a tile pins it so it always ranks first; **All totals (N)** expands
  the full metric × perspective matrix underneath. A report that comes back without totals — an
  Advanced report with no rows, for one — shows **—** on every tile.
- The toolbar on the right holds the view switch with three states — **Report in details**
  (the grid alone), **Graph and report** (the graph above the grid) and **Graph** (the graph
  alone). It is only offered once the report has a Group by or a time granularity — a
  totals-only report has nothing to plot — and the browser remembers your choice for the next
  report. Then come the **comfortable / compact** row-density pair (shown whenever the grid is),
  **Export** (see [Export reports](https://epom.com/ad-server/docs/guides/analytics/exports-and-ai.md)), **Columns**, and **Refresh**.
- The **detail grid** is banded by metric family, in the same order **Columns settings** listed
  them. **Columns** hides a whole band at a time — that is a display toggle local to this tab,
  not a re-query. Click a header to sort: **first click ascending**, second descending, third
  back to unsorted. 50 rows per page.

A report with **Group by** empty and **Time granularity** *None* has nothing to break rows on, so
it returns exactly one row — the totals for the whole window — and offers no graph. That is the
default state of the form, so a first report looks empty of detail even when the numbers are
right.

A report run without a single column from **Columns settings** has nothing to draw, so its tab
shows *"This report has no columns to show"* in place of the tiles and the grid — also when it is
grouped or broken down by time, whose own columns only name the rows. Tick a column in **Columns
settings** and run it again. The form itself never sends such a report, so this only meets one
started some other way. Event logs are the exception: their columns are the fields of each event,
so they draw whatever was picked.

To refine, click back to the **Filter** tab. The form keeps everything you set — including the
tree selections — so you can adjust one thing and run again.

## Working with report tabs

- Tabs are named by the report, and a second run that reads the same gets the technical index
  appended: *Totals · Today #1*, *Totals · Today #2*. Close one and the survivor drops its suffix.
- There is **no limit** on how many can be open at once.
- The forms live in your **server session**, so a browser refresh restores every tab and the one you
  were on — the `?reports=[1,2]&tab=2` in the address bar is that state, and `tab` is the report's
  session index, not its position in the strip.
- **✕** closes the tab server-side too, cancelling a background job that is still running.
- A sign-out, a session timeout or a server restart does not restore tabs — the strip silently
  drops every tab the server no longer holds, and the reports have to be run again. Save a
  template to keep the *question*; see [Saved and scheduled reports](https://epom.com/ad-server/docs/guides/analytics/saved-and-scheduled.md). A
  tab whose filter or grouping your role has lost a permission for since the report ran shows the
  refusal, naming the permission (*Your role lacks the PLACEMENT_LABELS permission.*), instead of
  the report.
- You can only have so many reports running at once. A report holds a database connection or a
  Spark job for its whole run, so a network caps how many one user may have in flight (a hundred
  by default). Past that the next one is refused with *"You already have N reports running"*
  instead of waiting — waiting would hold the connection too. Let one finish, or close the tabs
  you no longer need. The cap counts each user's reports separately, and Epom support can raise or remove it.
  Only the reports you run count — the report grid and its chart, an export, a report over the
  API; dashboard widgets, the statistics in the entity trees and scheduled reports do not.

## Row actions on the detail grid

When your Group by allows it, selecting rows enables toolbar actions (in the **Report in details**
and **Graph and report** views — the graph-only view has no rows to select):

| Action | Appears when |
|---|---|
| **Set banners OFF** | grouped by Banner; also needs update rights on the campaigns |
| **Block channel** | grouped by Banner **and** Channel |
| **Block / Unblock site** | grouped by Site plus Campaign or Banner |
| **Block / Unblock placement** | grouped by Placement plus Campaign or Banner |
| **Preliminary confirm / Confirm / Finalize** | grouped by Advertiser alone (or Advertiser + Advertiser Owner) — see [Finances & billing](https://epom.com/ad-server/docs/guides/admin/finances-and-billing.md) |

Each action also needs its own permission — see [User roles](https://epom.com/ad-server/docs/guides/admin/users-and-roles.md). On a
**Can View** share the row actions stay hidden.

## Per-role notes

- **Publisher and advertiser** — the Columns settings matrix shows one perspective (Publisher or
  Advertiser), so the only preset chip is *Publisher payout* or *Advertiser charges*; the trees
  offer no Category or Label pickers.
- **Network manager** — perspectives, report types, tree pickers and filters follow what your
  network administrator granted the role.
- **Share-limited user** — reports cover only the entities shared with you; on a **Can View**
  share the row actions stay hidden.

## Related

- [Run a report](https://epom.com/ad-server/docs/guides/analytics/run-report.md)
- [Report types](https://epom.com/ad-server/docs/guides/analytics/report-types.md) and [Report types reference](https://epom.com/ad-server/docs/guides/analytics/report-types-reference.md)
- [Saved and scheduled reports](https://epom.com/ad-server/docs/guides/analytics/saved-and-scheduled.md)
- [Export reports](https://epom.com/ad-server/docs/guides/analytics/exports-and-ai.md)
- [Save a conversion funnel and report on it](https://epom.com/ad-server/docs/guides/conversions/funnels.md)
- [Analytics metrics reference](https://epom.com/ad-server/docs/reference/metrics.md)
- [Analytics dimensions reference](https://epom.com/ad-server/docs/reference/analytics-dimensions.md)