offdataai
Banking & Financial Services · data model template

Core Banking Analytics data model

Kimball warehouse for core banking: transaction-grain ledger events, daily account-balance snapshots, an accumulating loan snapshot, and card authorizations over conformed customer/account/branch/product dimensions. KYC and account identifiers are masked.

Retail banking analytics covering customer accounts, ledger transactions, daily balance snapshots, the loan lifecycle, and card authorizations — a Kimball star schema with conformed customer, account, branch, and product dimensions and regulated PII (tax ID, account number) classified and masked. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballBanking & Financial ServicesPCI-DSSSOXGLBA
12
tables
104
columns
18
relationships
10
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

transactionsbalanceslendingconformed_dimensions

Design decisions

  • Daily balance snapshot separate from transactions

    Balances are semi-additive and required daily for regulatory and liquidity reporting independent of transaction volume.

  • Accumulating snapshot for loans

    A loan has well-defined milestones (origination, maturity, payoff) and a slowly-changing outstanding balance — an accumulating snapshot fits.

  • Masking on tax ID and account number

    GLBA and PCI require restricting access to account numbers and SSNs; they are classified restricted and masked.

Tables in the Core Banking 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 (4)

fct_transactions

Grain: one row per account transaction

Transaction-grain fact — the core ledger event.

ColumnTypeKeys
transaction_keybigintPK
date_keybigint
account_keybigint
customer_keybigint
branch_keybigint
transaction_type_keybigint
channel_keybigint
merchant_keybigint
transaction_idvarchar
amountdecimal
balance_afterdecimal
currencyvarchar
is_internationalboolean

fct_account_balance_snapshot

Grain: one row per account per day (periodic snapshot)

Daily balance snapshot — semi-additive.

ColumnTypeKeys
date_keybigint
account_keybigint
customer_keybigint
closing_balancedecimal
available_balancedecimal
interest_accrueddecimal
is_overdrawnboolean
days_overdrawnsmallint

fct_loan

Grain: one row per loan (accumulating snapshot)

Accumulating snapshot tracking the loan lifecycle.

ColumnTypeKeys
loan_keybigintPK
account_keybigint
customer_keybigint
product_keybigint
origination_date_keybigint
maturity_date_keybigint
loan_numbervarchar
principal_amountdecimal
interest_ratedecimal
term_monthssmallint
outstanding_balancedecimal
monthly_paymentdecimal
loan_statusvarchar
days_past_dueinteger

fct_card_authorization

Grain: one row per card authorization

ColumnTypeKeys
authorization_keybigintPK
date_keybigint
account_keybigint
merchant_keybigint
channel_keybigint
authorization_idvarchar
authorization_amountdecimal
is_approvedboolean
decline_reasonvarchar
is_fraud_flaggedboolean

Dimension tables (6)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
month_numbersmallint
quartersmallint
yearsmallint
is_business_dayboolean

dim_customer

Grain: one row per customer per SCD2 version

SCD type 2

ColumnTypeKeys
customer_keybigintPK
customer_idvarcharBK
first_namevarcharPII
last_namevarcharPII
date_of_birthdatePII
tax_idvarcharPII
emailvarcharPII
phonevarcharPII
address_line1varcharPII
cityvarchar
statevarchar
postal_codevarcharPII
customer_segmentvarchar
kyc_statusvarchar
risk_ratingvarchar
onboarding_datedate
is_activeboolean

dim_account

Grain: one row per account per SCD2 version

SCD type 2

ColumnTypeKeys
account_keybigintPK
account_idvarcharBK
account_numbervarcharPII
account_typevarchar
product_keybigint
currencyvarchar
open_datedate
close_datedate
account_statusvarchar

dim_branch

Grain: one row per branch

ColumnTypeKeys
branch_keybigintPK
branch_idvarcharBK
branch_namevarchar
address_line1varchar
cityvarchar
statevarchar
regionvarchar
manager_namevarcharPII

dim_product

Grain: one row per banking product

ColumnTypeKeys
product_keybigintPK
product_idvarcharBK
product_namevarchar
product_categoryvarchar
interest_ratedecimal
monthly_feedecimal

dim_merchant

Grain: one row per card merchant

ColumnTypeKeys
merchant_keybigintPK
merchant_idvarcharBK
merchant_namevarchar
mccvarchar
merchant_categoryvarchar
countryvarchar

Lookup tables (2)

dim_transaction_type

Grain: one row per transaction type

ColumnTypeKeys
transaction_type_keybigintPK
type_codevarcharBK
type_namevarchar
directionvarchar

dim_channel

Grain: one row per channel

ColumnTypeKeys
channel_keybigintPK
channel_codevarcharBK
channel_namevarchar

Relationships

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

  • dim_account.product_key → dim_product (many-to-one)
  • fct_transactions.date_key → dim_date (many-to-one)
  • fct_transactions.account_key → dim_account (many-to-one)
  • fct_transactions.customer_key → dim_customer (many-to-one)
  • fct_transactions.branch_key → dim_branch (many-to-one)
  • fct_transactions.transaction_type_key → dim_transaction_type (many-to-one)
  • fct_transactions.channel_key → dim_channel (many-to-one)
  • fct_transactions.merchant_key → dim_merchant (many-to-one)
  • fct_account_balance_snapshot.date_key → dim_date (many-to-one)
  • fct_account_balance_snapshot.account_key → dim_account (many-to-one)
  • fct_account_balance_snapshot.customer_key → dim_customer (many-to-one)
  • fct_loan.account_key → dim_account (many-to-one)
  • fct_loan.customer_key → dim_customer (many-to-one)
  • fct_loan.product_key → dim_product (many-to-one)
  • fct_card_authorization.date_key → dim_date (many-to-one)
  • fct_card_authorization.account_key → dim_account (many-to-one)
  • fct_card_authorization.merchant_key → dim_merchant (many-to-one)
  • fct_card_authorization.channel_key → dim_channel (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