Operator guideENreportinggamingperformance

Reporting / Gaming Performance

Grouped gaming analytics report for wagered, won, GGR, NGR, RTP, and player activity by game, game type, or country.

Reader view

Clean portal guidance

This page keeps the operator explanation, field and action descriptions, and screenshots visible without exposing repo paths, raw sidecars, or editorial-only implementation details.

Narrative content

Page body

What this page shows

Gaming Performance is the grouped gameplay analytics report. It aggregates gaming activity by dimensions such as:

  • game
  • game type
  • country

The report is used to compare gameplay quality and revenue behavior rather than banking movement.

When to use it

  • compare game or provider performance over the same date window
  • inspect grouped GGR and NGR by gaming dimension
  • review RTP, house edge, sessions, and player activity
  • compare legacy and analytics-backed views when schema mode matters

How to read it

The summary cards give the headline report totals for the current query:

  • Distinct Games
  • Active Players
  • Total Wagered
  • Total GGR
  • Total NGR

The main table is grouped according to the selected Group By dimensions. Operators can combine more than one grouping dimension at the same time, for example Game Title + Country or Game Type + Country. Important reading rules:

  • Game Type is backend category-based grouping, not only the FE crash/slot label
  • Actual RTP is calculated from grouped won versus grouped wagered
  • Theoretical RTP is a weighted average using wagered volume only where a configured RTP exists

Filters that change the result

  • start date
  • end date
  • interval
  • game identifier
  • provider
  • country
  • game type
  • group by
  • order by
  • show only active
  • use new schema

Country and Game Type are immediately applied when the selector changes. The remaining filters are applied through Refresh or by pressing Enter in the text inputs.

Order By is also immediately applied when the selector changes. Provider, Group By, the date range, Active Only, and Use New Schema stay staged until Refresh is used.

Action and filter behavior

  • Refresh applies the staged filter state and resets pagination to page 1.
  • Reset Filters restores the default grouped query: Group By = Game Title, Order By = Total Wagered, Active Only = OFF, and Use New Schema = ON.
  • Export CSV / Excel is only a CSV action in the current FE despite the mixed label. The button calls the CSV export hook only.
  • The date pickers stay visible until an interval value has been applied. Choosing MTD, YTD, or LTD in the UI does not immediately hide the custom date inputs until Refresh updates the active interval.

Why this page can differ from other gaming reports

This page is gameplay-performance focused. It groups wagering and win data by game-facing dimensions. It is not the same as Gaming Revenue, which combines banking movement and gaming totals on a time axis.

Known caveats

  • A custom range that starts and ends on today forces the legacy path even when Use New Schema is enabled.
  • The visible New Schema or Legacy Schema chip mirrors the current FE toggle state; it is not an independent backend source badge.
  • Game Type grouping is driven by backend category and sub-category mapping, not only by text labels.
  • The standalone page does not expose a Sub-categories control even though the shared hook and dashboard consumer can still pass subCategoryIds.
  • Progressive Contribution is an estimated derived value based on identifiers containing progressive.
  • Funds in Incomplete Games is currently hardcoded to 0 in the grouped output.
  • The table can show No data found while the summary cards still reflect the last successful query if a new request fails and the hook keeps previous data until the next successful response.

Verification status

  • status: verified_backend
  • FE route, filters, grouping, export, and summary cards are mapped
  • gs-admin-backend owns the grouping, aggregation, and schema-selection logic
  • no explicit nx-workspace dependency is required for the current report semantics
Calculation notes

Calculations

calculation

Actual RTP

Shows the real return percentage for the currently grouped data slice.

Source Fields
total_won, total_wagered
Transform
The backend calculates `Actual RTP` as grouped won divided by grouped wagered, multiplied by 100 and rounded to two decimals.
calculation

Theoretical RTP

Avoids over-weighting low-volume rows when a configured RTP exists.

Source Fields
theoretical_rtp, total_wagered
Transform
The backend calculates a wagered-weighted average RTP using only rows that have a configured theoretical RTP value.
calculation

Schema selection

Explains why grouped output can drop back to the legacy dataset even when the toggle is enabled.

Source Fields
useNewSchema, startDate, endDate, interval
Transform
The service uses the analytics-backed schema when allowed, but forces the legacy path for a custom range that starts and ends on today.
calculation

Mixed filter apply model

The filter card mixes immediate selectors with staged controls, so some changes update the report instantly while others wait for `Refresh`.

Source Fields
country, gameType, orderBy, providerId, groupBy, startDate, endDate, showOnlyActive, useNewSchema
Transform
`Country`, `Game Type`, and `Order By` call `applyFilters` immediately when changed. Provider, grouping, date range, `Active Only`, and `Use New Schema` remain staged until `Refresh` or an Enter key press applies them.
calculation

Interval and date-input visibility

The filter card can temporarily show both a staged interval choice and the custom date inputs.

Source Fields
interval, activeInterval
Transform
The date pickers are hidden only when the active interval is non-empty. Selecting an interval in the UI does not immediately hide custom-date controls until the interval is applied.
calculation

Progressive Contribution

Heuristic progressive-cost estimate, not a dedicated upstream field.

Source Fields
game_identifier, total_wagered
Transform
The backend estimates progressive contribution as 1% of wagered for identifiers that contain `progressive`; all other rows return 0.
calculation

Funds in Incomplete Games

Placeholder metric until an incomplete-games calculation is introduced.

Transform
Backend currently returns `0` for this field in grouped output.
Grid columns

Columns

field

Game Identifier

field

Game Name

field

Provider

field

Game Type

field

Country

field

Total Wagered

field

Total Won

field

Bet Count

field

Win Count

field

GGR

field

NGR

field

Refunded

field

Active Players

field

Actual RTP

field

Theoretical RTP

Filter dictionary

Filters

field

Start date

Custom range start date. This control stays staged until `Refresh` or `Enter`.

Type
date
field

End date

Custom range end date. This control stays staged until `Refresh` or `Enter`.

Type
date
field

Interval

Preset range selector with `Custom`, `Month to Date`, `Year to Date`, and `Life to Date`.

Type
select
field

Game identifier

Type
text
field

Provider

Type
select
field

Country

Immediately-applied selector.

Type
select
field

Game type

Immediately-applied selector.

Type
select
field

Group By

Type
multi-select
field

Order by

Immediately-applied ranking selector.

Type
select
field

Active Only

Type
boolean
field

Use new schema

Type
boolean
Summary cards

Summary cards

field

Distinct Games

field

Active Players

field

Total Wagered

field

Total GGR

field

Total NGR

Widget map

Widgets

item

Filter Gaming Performance

Filter card with mixed immediate and staged controls.

item

Grouped performance table

Grouped analytics table for the active query.

item

CSV export

CSV export for the active query, despite the mixed `CSV / Excel` button label.

Metric dictionary

Metrics

metric

Distinct Games

Number of unique game identifiers returned by the filtered report.

Aliases
gaming performance distinct games, unique games
Backend Formula
count(distinct game_identifier) in filtered_data
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Active Players

Number of distinct users represented by the filtered grouped result.

Aliases
gaming performance active players, report active players
Backend Formula
count(distinct user_id) in filtered_data
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Total Wagered

Sum of wagered base amounts for the filtered report window.

Aliases
gaming performance total wagered, total wagered eur
Backend Formula
sum(total_wagered) in filtered_data
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Total GGR

Grouped gross gaming revenue for the filtered report window.

Aliases
gaming performance ggr, report total ggr
Backend Formula
sum(ggr) in filtered_data
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Total NGR

Grouped net gaming revenue for the filtered report window.

Aliases
gaming performance ngr, report total ngr
Backend Formula
sum(ngr) in filtered_data
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Actual RTP

Return-to-player percentage calculated from grouped won versus grouped wagered.

Aliases
gaming performance rtp, actual rtp
Backend Formula
(sum(total_won) / sum(total_wagered)) * 100
Verification Status
verified_backend
Last Verified At
2026-04-18
Operational notes

Notes

item

The live product flow builds the grouped query inside `GetGamingPerformanceReportService`; the `.sql` files are reference artifacts, not the only executed path.

item

The report can switch between legacy and analytics-backed schemas through `useNewSchema`, but today's custom range forces the legacy path.

item

`groupBy=gameType` is backend category grouping derived from master game category/sub-category mapping.

item

The standalone page does not render a `Sub-categories` control even though the shared hook and dashboard consumer can still pass `subCategoryIds`.

item

The FE unwraps the backend success envelope as `result?.data?.data || result?.data || result`; the JSON response shape is `{ data, message }` unless CSV export is requested.

item

The FE mixes immediate and staged filters: `country`, `gameType`, and `orderBy` apply immediately; provider, dates, groupBy, and toggles are staged until `Refresh`.

item

The current export path is CSV-only even though the button label says `Export CSV / Excel`.

Related references

Related pages

pageReporting

Canonical entrypoint for standalone reporting pages outside the main Dashboard widgets.

pageReporting / Affiliate Events Report

Audit log of the events and saved amounts the platform sent to the affiliate system, with per-currency successful totals and a CSV export.

pageReporting / Bonus Performance

Grouped bonus performance report for activations, amounts, deposits, withdrawals, GGR, and NGR by bonus item.

pageReporting / Card Approval Rates

Snapshot report of card deposit approval rates for NetworxPay, Paydex, and Carouseller, split by Trusted and NonTrusted players, with today versus the previous 30 days and today top decline reasons.

pageReporting / Change Notification Detail

Detail page for one audit entry, including actor metadata, description, and before/after comparison views.

pageReporting / Change Notifications

Audit list for recorded configuration, administrator, and system change entries with filters for actor, entity, and change type.