Operator guideENreportinggamingstatistics

Reporting / Game Statistics

Detailed game analytics by title, type, country, and category with wagering, revenue, and session metrics.

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

Game Statistics is the per-game analytics report for wagering, revenue, and activity. It breaks game performance down by title, provider, country, and backend-derived game type.

When to use it

  • inspect per-game wagering and revenue
  • compare game types or countries
  • review session and RTP metrics at row level

How to read it

The summary cards show headline totals for the current query:

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

The table is row-based by game and visible dimension values. Important reading rules:

  • Game Type is backend-derived from category and name heuristics
  • Actual RTP is a row-level return percentage from actual won versus actual wagered
  • Total Wagered, Total Won, GGR, and NGR are all normalized report values from the backend query
  • the current FE does not render Category as a visible filter or table column even though the backend still accepts categoryId

Known caveats

  • Interval can synthesize ranges such as MTD, YTD, and LTD
  • without an explicit range, the backend can default to a very broad history window
  • the current FE does not expose categoryId, even though the backend still accepts it
  • summary SQL returns overall_rtp, but the current FE does not render it as a headline card
  • CSV export includes standalone columns that are not rendered as standalone table columns, including Game Identifier, Category, Marketing Bet, Marketing Win, and Total Rounds
  • deleted users and streamer accounts are excluded in backend aggregation

Filters that change the result

  • start date
  • end date
  • interval
  • game ID
  • provider
  • country
  • game type
  • order by

Verification status

  • status: verified_backend
  • FE route, summary cards, table columns, and export flow are mapped
  • gs-admin-backend owns interval expansion, game-type derivation, aggregation, and RTP calculations
  • nx-workspace is not required for the current operator meaning
Operator actions

Screen actions

action

Refresh

Applies the current FE filter state and re-runs the report query.

action

Export CSV

Downloads the current report dataset as CSV through the same backend route with `exportCsv=true`.

action

Reset Filters

Clears the current FE filters and restores the default ordering before the next refresh.

Operational notes

Notes

item

The standalone page has no separate `Apply Filters` button; `Refresh` is the action that applies the current FE state.

Calculation notes

Calculations

calculation

GGR

Gross gaming revenue per game row.

Source Fields
pgds.ggr_base
Transform
Backend returns `GGR` by aggregating `SUM(pgds.ggr_base)` in base currency.
calculation

NGR

Net gaming revenue for the row after backend deductions.

Source Fields
pgds.ngr_base
Transform
Backend returns `NGR` by aggregating `SUM(pgds.ngr_base)`. The current analytics migration defines `ngr_base` as `(bet_amount_base - win_amount_base) + (marketing_bet_amount_base - marketing_win_amount_base) + (adjustment_bet_amount_base - adjustment_win_amount_base)`.
calculation

Actual RTP

Real return-to-player percentage for the filtered row.

Source Fields
total_won, total_wagered
Transform
Actual RTP is calculated as `ROUND((SUM(pgds.win_amount_base) / SUM(pgds.bet_amount_base)) * 100, 2)` with a zero guard when wagered is `0`.
calculation

Game type heuristic

Explains why the type chip can differ from a simple FE label expectation.

Source Fields
category_name, game_name
Transform
Backend classifies `game_type` heuristically from category and name text into `crash`, `slots`, or `other`.
calculation

Interval range

Explains why the effective date window can change even when no visible custom dates are entered.

Source Fields
interval, startDate, endDate
Transform
`MTD`, `YTD`, and `LTD` are expanded by the backend into concrete date ranges before the query runs.
calculation

Hidden summary overall RTP

Explains why a backend summary value exists even though operators only see row-level `Actual RTP`.

Source Fields
summary.overall_rtp
Transform
Backend summary SQL returns `overall_rtp`, but the current FE does not render it as a visible headline card.
Grid columns

Columns

field

Game Name

field

Provider

field

Country

field

Type

field

Total Wagered

field

Total Won

field

GGR

field

NGR

field

Bonus Wagered

field

Bonus Won

field

Active Players

field

Total Bets

field

Sessions

field

Actual RTP

Filter dictionary

Filters

field

Start date

Type
date
field

End date

Type
date
field

Interval

Type
select
field

Game ID

Type
text
field

Provider

Type
select
field

Country

Type
select
field

Game type

Type
select
field

Category

Accepted by the backend service but not rendered by the current standalone FE page.

Type
select
Visibility
backend_only
Note
Accepted by the backend service but not rendered by the current standalone FE page.
field

Order by

Type
select
Options
GGR, NGR, Total Wagered, Total Won, Unique Players, Total Bets
Summary cards

Summary cards

field

Total GGR

field

Total NGR

field

Total Wagered

field

Total Games

field

Active Players

field

Countries

Widget map

Widgets

item

Statistics table

item

CSV export

Metric dictionary

Metrics

metric

Total GGR

Total gross gaming revenue for the current game-statistics query.

Aliases
game statistics ggr, reporting game statistics total ggr
Backend Formula
SUM(pgds.ggr_base)
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Total NGR

Total net gaming revenue for the current query.

Aliases
game statistics ngr, reporting game statistics total ngr
Backend Formula
SUM(pgds.ngr_base)
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Total Wagered

Total wager amount for the filtered report window.

Aliases
game statistics total wagered
Backend Formula
SUM(pgds.bet_amount_base)
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Total Games

Number of distinct game identifiers in the current result set.

Aliases
game statistics total games, distinct games
Backend Formula
COUNT(DISTINCT pgds.game_identifier)
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Active Players

Distinct players represented by the current filtered result.

Aliases
game statistics active players
Backend Formula
COUNT(DISTINCT pgds.user_id)
Verification Status
verified_backend
Last Verified At
2026-04-18
metric

Actual RTP

Return-to-player percentage from actual won versus wagered.

Aliases
game statistics actual rtp
Backend Formula
CASE WHEN SUM(pgds.bet_amount_base) > 0 THEN ROUND((SUM(pgds.win_amount_base) / SUM(pgds.bet_amount_base)) * 100, 2) ELSE 0 END
Verification Status
verified_backend
Last Verified At
2026-04-18
Operational notes

Notes

item

The current FE does not surface `categoryId`, even though the backend accepts it.

item

CSV export is returned by the same route with `exportCsv=true` and the controller responds with a direct CSV attachment.

item

CSV contains standalone columns not all visible as standalone table columns, including `Game Identifier`, `Category`, `Marketing Bet`, `Marketing Win`, and `Total Rounds`.

item

`game_type` is backend-derived and should not be treated as a pure FE label.

item

The FE unwraps the standard `{ data, message }` envelope via `result?.data?.data || result?.data || result`.

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.