Operator guideEN

Players / Game Report

Per-player game or provider report inside the player workspace, filtered by date option and grouped either by game or by provider.

How to use this guide

Start with the main guide

Follow the explanation and examples first. Extra definitions and formulas are available below when you need them.

What this page shows

Player Game Report breaks one player's gaming activity down either by game or by provider for the selected date range.

This is a player-scoped report. The player profile tab sends the current player id to the shared game-report source, so rows describe activity for that one player, not all players.

When to use it

Use this tab when you need to answer:

  • which games or providers drive the player's betting activity
  • how many rounds the player completed
  • how real-money and bonus-money play compare
  • which rows produce the highest GGR

How to read it

The report is controlled by two choices:

  • Date Option
  • Game or Provider tab

Date Option defaults to Custom, with the custom start date initialized to seven days before the current browser date and the custom end date initialized to the current browser date. Custom dates are sent as yyyy-MM-dd; preset options are sent as today, yesterday, monthtodate, last7days, last30days, last90days, weektodate, yeartodate, previousmonth, or previousyear.

The table then shows one row per game or provider with row id, display name, rounds, real-money totals, bonus-money totals, GGR, and HE %.

Key formulas

  • Number of Rounds comes from source roundCount; live SQL counts bet transactions, while analytics SQL uses aggregated bet counts.
  • Real bets and Real wins are source real-money bet and win totals. Live SQL divides transaction amounts by stored transaction conversion_rate; analytics SQL uses base-currency aggregate columns.
  • Bonus bets and Bonus wins are source bonus-money bet and win totals from non_cash_amount in live SQL or bonus aggregate columns in analytics SQL.
  • GGR is the source GGR field for the selected grouping. Game and provider groupings intentionally do not have identical SQL definitions around correction and bonus_payout rows.
  • HE % is returned by the source as payout; helper logic returns 0 % when total bets are zero, otherwise (1 - totalWin / totalBet) * 100.

Known caveats

  • HE % is rendered from the source field named payout, but the helper calculates it as (1 - totalWin / totalBet) * 100.
  • GGR is not fully identical across groupings:
    • game mode includes correction and bonus-payout rows in the aggregated SQL result
    • provider mode excludes correction and bonus_payout rows from the main GGR aggregation
  • The shared game-report source can support live, analytics, and hybrid data modes, but this player tab does not pass dataMode, useNewSchema, or useAggregatedData; the mounted tab uses the live SQL path.
  • playerCount and NGR can exist in the shared response type, but they are not visible columns in this player tab. When userId is present, helper logic removes playerCount from response rows.
  • The component supports only visible table rendering; CSV support exists in the shared hook but is not exposed as a visible button in this tab today.
More details

Definitions and formulas

Open only the section you need. The relevant section opens automatically when you request help for a specific item on screen.

Calculations7 topicsOpen details

Player scope

How It Works
The player profile component sends `userId = player.userId`; the source treats any non-empty/non-`1` value as a player filter and passes that user id to SQL.
What To Check
This tab is not the all-player Game Report. It shows one player's game/provider rows.

Date option resolution

How It Works
The tab sends `dateOptions` plus optional `customStartDate` and `customEndDate`; the source resolves the final `startDate` and `endDate` through `getKpiReportDates` before loading report rows.
What To Check
`Custom` requires both custom dates. Presets such as Today, Last 7 Days, Month To Date, and Previous Year are source-resolved ranges.

Player tab data source

How It Works
The shared service supports live, analytics, and hybrid modes, but `PlayerGameReport` does not pass `dataMode`, `useNewSchema`, or `useAggregatedData`; the traced player tab resolves to live SQL.
What To Check
Do not describe this player tab as an aggregated analytics report unless the tab starts passing an analytics/hybrid flag.

GGR

How It Works
In game mode live SQL returns `GGR` by game identifier alongside separate `correction` and `bonus_payout` columns; in provider mode live SQL calculates main `GGR` only from non-`correction` and non-`bonus_payout` real-money bets and wins.
What To Check
Treat `GGR` as authoritative for the selected grouping, but do not assume game-mode and provider-mode rows are mathematically identical.

NGR response field

How It Works
`createGameReport2` computes `NGR = GGR + bonus_payout + correction` and includes it in response rows.
What To Check
The current player tab type includes `NGR`, but the mounted table does not show an NGR column.

HE %

How It Works
Helper formula `HE % = (1 - totalWin / totalBet) * 100`; when total bets are zero or undefined, helper returns `0 %`.
What To Check
The tab does not calculate this metric; it formats the source helper output.

User-filtered response shape

How It Works
When `userId` is present, `createGameReport2` deletes `playerCount`, sorts rows by descending `roundCount`, and slices to source `limit`.
What To Check
The player tab should not describe `playerCount` as a visible field. Its row ordering is rounds-based after helper formatting, not GGR-based all-player ordering.
Columns9 topicsOpen details

ID

Source row identifier. In provider mode this is the provider id; in game mode it is the resolved game id when available.

Visual Type
identity
Data Type
string_or_number

Name

Game identifier or provider name, depending on the active tab.

Visual Type
grid-column
Data Type
string

Number of Rounds

Number of rounds included for that row in the selected period.

Visual Type
number
Data Type
formatted_number

Real bets

Real-money bet amount for the row. The tab renders it through the shared `Currency` component.

Visual Type
amount
Data Type
formatted_amount

Real wins

Real-money win amount for the row. The tab renders it through the shared `Currency` component.

Visual Type
amount
Data Type
formatted_amount

Bonus bets

Bonus-money bet amount for the row. Live SQL uses `non_cash_amount`; analytics SQL uses bonus aggregate columns.

Visual Type
amount
Data Type
formatted_amount

Bonus wins

Bonus-money win amount for the row. Live SQL uses `non_cash_amount`; analytics SQL uses bonus aggregate columns.

Visual Type
amount
Data Type
formatted_amount

GGR

Gross gaming revenue value for the row returned by the source report. Game and provider groupings do not use an identical SQL definition.

Visual Type
amount
Data Type
formatted_amount

HE %

House-edge percentage derived by source helpers from total wins relative to total bets for the row.

Visual Type
ratio
Data Type
formatted_percent
Filters4 topicsOpen details

Date Option

Chooses the reporting period. `Custom` unlocks manual start and end dates; preset modes are resolved by the source date helper.

Type
preset-range
Source Query Param
dateOptions
Default
custom
Options
custom, today, yesterday, monthtodate, last7days, last30days, last90days, weektodate, yeartodate, previousmonth, previousyear

Start date

Lower bound for custom date mode. The tab sends it as `yyyy-MM-dd`.

Type
date
Source Query Param
customStartDate
Default
browser date minus 7 days
Visible When
date_option == custom

End date

Upper bound for custom date mode. The tab sends it as `yyyy-MM-dd`.

Type
date
Source Query Param
customEndDate
Default
current browser date
Visible When
date_option == custom

Game / Provider

Switches the grouping level between game rows and provider rows.

Type
tab
Source Query Param
tab
Default
game
Options
game, provider
Metrics7 topicsOpen details

Number of Rounds

Count of bet rounds included for the selected player and grouping row.

Aliases
number of rounds, round count, player game rounds
Source Basis
Live SQL counts casino transactions where `action_type = 'bet'`; analytics SQL sums aggregated `bet_count`. The source normalizes the result to `roundCount`, and `createGameReport2` returns it formatted with `Intl.NumberFormat('en-EU')`.

Real bets

Real-money wager total for the selected player and grouping row.

Aliases
real bets, total bet, player real wager
Source Basis
Live SQL sums real-money bet `cash_amount` divided by the stored transaction conversion rate. Analytics SQL uses `bet_amount_base`. The helper rounds to 2 decimals before number formatting.
Currency Basis
Reporting Basis: Source-normalized base amount, not a browser-side currency conversion. | Live Sql Basis: Transaction `cash_amount / conversion_rate` style expressions from `casino_system.casino_transactions`. | Analytics Sql Basis: Pre-aggregated base-currency amount columns such as `bet_amount_base`. | Rounding: Helper uses Decimal `toFixed(2)` before `Intl.NumberFormat('en-EU')`. | Missing Rate Note: Live SQL fallback differs by expression; do not treat the displayed value as a current exchange-rate conversion.

Real wins

Real-money win total for the selected player and grouping row.

Aliases
real wins, total win, player real win
Source Basis
Live SQL sums real-money win `cash_amount` divided by the stored transaction conversion rate. Analytics SQL uses `win_amount_base`. The helper rounds to 2 decimals before number formatting.
Currency Basis
Reporting Basis: Source-normalized base amount, not a browser-side currency conversion. | Live Sql Basis: Transaction `cash_amount / conversion_rate` style expressions from `casino_system.casino_transactions`. | Analytics Sql Basis: Pre-aggregated base-currency amount columns such as `win_amount_base`. | Rounding: Helper uses Decimal `toFixed(2)` before `Intl.NumberFormat('en-EU')`. | Missing Rate Note: Live SQL fallback differs by expression; do not treat the displayed value as a current exchange-rate conversion.

Bonus bets

Bonus-money wager total for the selected player and grouping row.

Aliases
bonus bets, total bonus bet
Source Basis
Live SQL sums bet-side `non_cash_amount` divided by the stored transaction conversion rate. Analytics SQL uses `bonus_bet_amount_base`. The helper exposes this as `totalBonusBet`.
Currency Basis
Reporting Basis: Source-normalized base amount from bonus/non-cash transaction values. | Rounding: Helper uses Decimal `toFixed(2)` before `Intl.NumberFormat('en-EU')`.

Bonus wins

Bonus-money win total for the selected player and grouping row.

Aliases
bonus wins, total bonus win
Source Basis
Live SQL sums win-side `non_cash_amount` divided by the stored transaction conversion rate. Analytics SQL uses `bonus_win_amount_base`. The helper exposes this as `totalBonusWin`.
Currency Basis
Reporting Basis: Source-normalized base amount from bonus/non-cash transaction values. | Rounding: Helper uses Decimal `toFixed(2)` before `Intl.NumberFormat('en-EU')`.

GGR

Source-owned row-level gross gaming revenue for the selected grouping.

Aliases
gross gaming revenue, player ggr
Source Basis
Game live SQL calculates real-money bets minus wins by game identifier; provider live SQL excludes `correction` and `bonus_payout` rows from the main GGR calculation. Analytics SQL uses aggregate `ggr_base` with similar grouping-specific treatment. The helper formats the returned `GGR` to two decimals.
Currency Basis
Reporting Basis: Source-normalized base amount. | Rounding: Helper formats `GGR` with `Number(GGR).toFixed(2)` and `Intl.NumberFormat('en-EU')`. | Grouping Caveat: Game and provider mode are not interchangeable because correction and bonus-payout handling differs.

HE %

House-edge percentage for the row, despite the source field being named `payout`.

Aliases
house edge, he percent, payout field
Source Basis
`getHEPercentage` returns `0 %` when total bets are zero or undefined. Otherwise it strips thousand separators, divides `totalWin` by `totalBet`, subtracts from 1, multiplies by 100, rounds to two decimals, and appends `%`.
Formula
HE % = (1 - totalWin / totalBet) * 100
More help

Related pages

Players / Banking

Banking tab inside the player workspace with transaction filters, a paginated banking grid, analytics cards, CSV export, and automatic-withdrawal availability.

Players / Detail Workspace

Main player workbench at `/player/[playerId]` with tabbed sections, player-level actions, and modal-based operator workflows.

Players / Fraud Detection

Fraud-detection tab inside the player workspace with MaxMind risk assessment, related fraud-account reports, IP analysis, and Identity Graph filtering.

Players / Inbox

Inbox tab inside the player workspace for reviewing delivered notifications, filtering by read state or notification type, and resending or soft-deleting message deliveries.

Players / KPI Summary

Grouped player-level KPI snapshot inside the player workspace, covering player info, deposits, withdrawals, casino totals, bonus cost, and predictive metrics.

Players / KYC Status

KYC tab inside the player workspace for browsing user documents, checking third-party verification state, and approving, rejecting, or re-requesting documents.