offdataai
Travel & Hospitality · data model template

Casino Gaming Analytics data model

Kimball warehouse for casino gaming: transaction-grain gaming sessions and atomic wagers (with CTR/AML flags), plus a daily player-worth periodic snapshot (coin-in, theoretical win, comps) over conformed player/game/machine/property/promotion dimensions. Player PII is classified and masked, with self-exclusion and loss-limit tracking for responsible gaming.

Casino gaming analytics covering carded gaming sessions, individual wagers, and a daily player-worth snapshot over conformed player, game, machine, property, and promotion dimensions — a Kimball star schema with SCD2 player history, regulated PII (tax ID, loyalty card) masked, and responsible-gaming and AML signals. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballTravel & HospitalityAMLBSAGDPRResponsible-Gaming
10
tables
116
columns
16
relationships
9
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Snowflake). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

gaming_activityplayer_worthconformed_dimensions

Design decisions

  • Session and wager facts at two transaction grains

    A wager is the atomic bet/win event needed for AML and game-math analysis; the session summarizes carded play for player tracking. Both are transaction grains at different levels of detail.

  • Daily player snapshot for worth and comps

    Theoretical worth, comps, and free-play are semi-additive daily metrics that drive host decisions and reinvestment; a periodic snapshot avoids scanning every wager.

  • AML and CTR flags on the wager fact

    Bank Secrecy Act requires currency-transaction reporting above thresholds; a per-wager CTR-reportable flag plus the player AML risk rating supports suspicious-activity monitoring.

  • Responsible-gaming attributes on dim_player

    Self-exclusion status and daily loss limits must be enforced and audited; carrying them on the SCD2 player dimension preserves the limits in effect at each session.

  • Masking on tax ID and loyalty card

    GDPR and gaming-jurisdiction rules require restricting access to personal identifiers; tax IDs are fully masked and loyalty card numbers partially masked.

Tables in the Casino Gaming Analytics model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (3)

fct_gaming_session

Grain: one row per carded gaming session (transaction)

Transaction-grain gaming session summarizing carded play.

ColumnTypeKeys
gaming_session_keybigintPK
date_keybigint
player_keybigint
game_keybigint
machine_keybigint
property_keybigint
session_idvarchar
start_timestamptimestamp
end_timestamptimestamp
duration_minutesinteger
coin_indecimal
coin_outdecimal
theoretical_windecimal
actual_windecimal
games_playedinteger
average_betdecimal

fct_wager

Grain: one row per individual wager (transaction)

Transaction-grain wager — the atomic bet/win event.

ColumnTypeKeys
wager_keybigintPK
date_keybigint
player_keybigint
game_keybigint
machine_keybigint
property_keybigint
transaction_type_keybigint
gaming_session_keybigint
wager_idvarchar
wager_timestamptimestamp
wager_amountdecimal
payout_amountdecimal
net_amountdecimal
is_jackpotboolean
is_ctr_reportableboolean

fct_player_daily_snapshot

Grain: one row per player per property per gaming day (periodic snapshot)

Daily player snapshot — theoretical worth is semi-additive.

ColumnTypeKeys
date_keybigint
player_keybigint
property_keybigint
promotion_keybigint
total_coin_indecimal
total_coin_outdecimal
theoretical_windecimal
actual_windecimal
comps_earneddecimal
free_play_redeemeddecimal
session_countinteger
tripssmallint
loyalty_points_earnedinteger
avg_daily_theodecimal
exceeded_loss_limitboolean

Dimension tables (6)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
day_of_weekvarchar
month_numbersmallint
quartersmallint
yearsmallint
is_weekendboolean
is_holidayboolean
gaming_daydate

dim_player

Grain: one row per player per SCD2 version

SCD type 2

ColumnTypeKeys
player_keybigintPK
player_idvarcharBK
first_namevarcharPII
last_namevarcharPII
emailvarcharPII
phonevarcharPII
date_of_birthdatePII
tax_idvarcharPII
address_line1varcharPII
cityvarchar
statevarchar
postal_codevarcharPII
countryvarchar
loyalty_tiervarchar
loyalty_card_numbervarcharPII
host_namevarchar
self_exclusion_flagboolean
daily_loss_limitdecimal
kyc_statusvarchar
aml_risk_ratingvarchar
enrollment_datedate

dim_game

Grain: one row per game

ColumnTypeKeys
game_keybigintPK
game_idvarcharBK
game_namevarchar
game_categoryvarchar
game_subtypevarchar
providervarchar
theoretical_hold_percentdecimal
min_betdecimal
max_betdecimal
is_progressiveboolean

dim_machine

Grain: one row per machine/table position

ColumnTypeKeys
machine_keybigintPK
machine_idvarcharBK
asset_numbervarchar
machine_typevarchar
manufacturervarchar
denominationdecimal
floor_zonevarchar
bank_namevarchar
is_activeboolean

dim_property

Grain: one row per casino property

ColumnTypeKeys
property_keybigintPK
property_idvarcharBK
property_namevarchar
jurisdictionvarchar
regulatorvarchar
cityvarchar
statevarchar
countryvarchar
license_numbervarchar

dim_promotion

Grain: one row per promotion/offer

ColumnTypeKeys
promotion_keybigintPK
promotion_idvarcharBK
promotion_namevarchar
promotion_typevarchar
offer_valuedecimal
start_datedate
end_datedate
is_targetedboolean

Lookup tables (1)

dim_transaction_type

Grain: one row per wager transaction type

ColumnTypeKeys
transaction_type_keybigintPK
transaction_type_codevarcharBK
transaction_type_namevarchar
directionvarchar

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • fct_gaming_session.date_key → dim_date (many-to-one)
  • fct_gaming_session.player_key → dim_player (many-to-one)
  • fct_gaming_session.game_key → dim_game (many-to-one)
  • fct_gaming_session.machine_key → dim_machine (many-to-one)
  • fct_gaming_session.property_key → dim_property (many-to-one)
  • fct_wager.date_key → dim_date (many-to-one)
  • fct_wager.player_key → dim_player (many-to-one)
  • fct_wager.game_key → dim_game (many-to-one)
  • fct_wager.machine_key → dim_machine (many-to-one)
  • fct_wager.property_key → dim_property (many-to-one)
  • fct_wager.transaction_type_key → dim_transaction_type (many-to-one)
  • fct_wager.gaming_session_key → fct_gaming_session (many-to-one)
  • fct_player_daily_snapshot.date_key → dim_date (many-to-one)
  • fct_player_daily_snapshot.player_key → dim_player (many-to-one)
  • fct_player_daily_snapshot.property_key → dim_property (many-to-one)
  • fct_player_daily_snapshot.promotion_key → dim_promotion (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time