• Finance
  • 3 tables
  • 56,148 rows
  • 7 formats
  • Power BI edition
  • synthetic data

Banking Dataset for Power BI

This ready-made banking dataset is perfect for analysts looking to practice Power BI dashboard creation. Analyze financial data with a sample of 1,000 customers, 5,000 accounts, and 50,148 transactions.

  • last updated 6 Oct 2026
  • by GoMask
  • Dataset includes 1,000 customers, 5,000 accounts, and 50,148 transactions.
  • Covers transactions from 2022-01-01 to 2024-12-31.
  • Contains customer details, account information, and transaction records.
  • Account types include Checking, Savings, Credit Card, and Loan.
  • Transaction types include Deposit, Withdrawal, Payment, and Transfer.

At a glance

  • 3tables
  • 56,148rows
  • 14columns
  • Jan 2022 – Dec 2024date range

The 3 tables

preview and data dictionary per table

Customers customers · dimension table · 1,000 rows

Contains information about individual bank customers.

Preview

First 10 of 1,000 rows of the Customers table
customer_iduuidfirst_namestringlast_namestringcitystringcountrystring
7944174a-8c4f-4ed6-bf73-3f800f494eb2EleanorArmstrongMontrealCanada
8884672d-73bf-4002-a007-e15ec1676109ArthurNewtonMontrealCanada
decb4112-1abe-4d22-a77a-e05953bacd93WalterAdamsTorontoCanada
9d948eb4-7c45-478e-bec4-1c044d1b5304ArthurNelsonMontrealCanada
e8f6192a-36fc-49de-90e6-5dfe3f2463eaGeorgeArmstrongVancouverCanada
1c1b6d81-a3b5-4167-a9f3-7e1da1a4102bAgnesNewtonVancouverCanada
cf88e080-1591-4d00-9e2c-da279eb58708HaroldAdamsVancouverCanada
e7055632-83b1-4323-8f0c-9efbc0a782abArthurNelsonMontrealCanada
e71219d5-06b8-4f83-b269-4dc8988a1f90ClarenceArmstrongMontrealCanada
212c3e10-1eda-4cd9-ba08-f90fcd5d8288ArthurNewtonMontrealCanada
10 of 1,000 rows · 5 columns

Data dictionary

Data dictionary for the Customers table
columntypedescriptionexamplenull %
customer_iduuidUnique identifier for each bank customer.unique7944174a-8c4f-4ed6-bf73-3f800f494eb20%
first_namestringCustomer legal first name.Eleanor0%
last_namestringCustomer legal last name or surname.Armstrong0%
citystringResidential city of the customer.Montreal0%
countrystringCountry of residence where banking activity is registered.Canada0%

Accounts accounts · table · 5,000 rows

Details of bank accounts held by customers.

Preview

First 10 of 5,000 rows of the Accounts table
account_iduuidaccount_typestringbalancedecimalcustomer_iduuid
462e5b11-b7d9-4881-b680-6b2b7c1808b3Checking3433.54c2eb7675-69d4-4153-a544-c2ecaccb74ac
93a34d7a-33a9-4d50-a8dc-ed54cbc420e9Checking2472.43200379e1-8489-4179-88e1-4cf719f5469c
ff7604d6-81eb-49c5-800b-ba1fc09bf5ebChecking9878.73c6e263ee-53a2-4393-9b52-4136812b412f
2a8a0302-ad29-4bb7-87e0-849e071d20c7Checking22389.069c34e406-cd24-4e88-b7db-a41f4a865761
2edab8d5-ab73-415f-a649-a407d6bff411Checking4904.034750250c-5fdc-4b36-a646-1d82de874706
2d75044a-cce9-4652-83d7-0ae893219871Checking2468.944037ae3d-ab27-4052-8377-de16aeca691a
fb88c69c-917f-4817-ac19-08932d2134d0Checking11074.77e76b2873-86d2-488e-a50c-9b3810f71e8d
0f5fe50a-28b3-4d5c-9846-5c25665f5261Checking807.33bbe022f-9d5b-40ef-8d3a-2d94ec522127
4be95946-fa3f-4987-90cd-2a18ed98bb2cChecking24408.39477015b-c015-482d-86b8-bb08c55a4ba1
bca370dc-83cf-49c3-a00d-f176fe1a1521Checking12067.55969a2364-ee37-4421-a44c-23f4f6bf53f0
10 of 5,000 rows · 4 columns

Data dictionary

Data dictionary for the Accounts table
columntypedescriptionexamplenull %
account_iduuidUnique identifier for the bank account.unique462e5b11-b7d9-4881-b680-6b2b7c1808b30%
account_typestringCategory of account: Checking, Savings, Credit Card, or Loan.Checking0%
balancedecimalCurrent balance of the account in standard currency units.3433.540%
customer_iduuidForeign key to customers.customer_id.c2eb7675-69d4-4153-a544-c2ecaccb74ac0%

Transactions transactions · fact table · 50,148 rows

Records of all financial transactions.

Preview

First 1 of 50,148 rows of the Transactions table
transaction_iduuidtransaction_datedatetypestringamountdecimalaccount_iduuid
3369b485-2340-44f7-98d4-47285ec832cc2024-12-11Withdrawal-211.692d75044a-cce9-4652-83d7-0ae893219871
1 of 50,148 rows · 5 columns

Data dictionary

Data dictionary for the Transactions table
columntypedescriptionexamplenull %
transaction_iduuidUnique identifier for each transaction record.b5a61514-48a7-4a8e-8d08-331325ac7e7c0%
transaction_datedateThe calendar date on which the transaction occurred.2024-09-220%
typestringThe category or nature of the transaction (Deposit, Withdrawal, Payment, Transfer).Withdrawal0%
amountdecimalThe monetary value of the transaction. Positive for Deposits and negative for Withdrawals, Payments, and Transfers.-114.320%
account_iduuidForeign key to accounts.account_id.f6bdadc4-2a06-4455-b02e-4349de7f7f0f0%

How the tables join

  • accounts.customer_id references customers.customer_idmany to one: each Accounts row points to one Customers row
  • transactions.account_id references accounts.account_idmany to one: each Transactions row points to one Accounts row

Questions to answer with it

  1. Visualize the distribution of account types by customer country.

    Join accounts and customers tables, then group by country and account_type.

    tables: accounts, customers

  2. Create a dashboard showing monthly transaction volume and average transaction amount for each account type.

    Join accounts and transactions tables, extract month from transaction_date, and group by account_type and month. Calculate count and average of amount.

    tables: accounts, transactions

  3. Identify the top 5 customers by total transaction value.

    Join all three tables, sum the amount for each customer, and order by the sum in descending order.

    tables: accounts, customers, transactions

  4. Write a SQL query to find the total balance for each customer, including their first name and last name.

    Join accounts and customers tables, group by customer_id, first_name, and last_name, and sum the balance.

    tables: accounts, customers

Starter SQL

run against this data before publishing

Table names match the SQLite file and the SQL script.

Total Balance per Customer

sql
SELECT c.first_name, c.last_name, SUM(a.balance) AS total_balance
FROM customers c
JOIN accounts a ON c.customer_id = a.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
ORDER BY total_balance DESC
LIMIT 20;

Monthly Transaction Volume by Account Type

sql
SELECT strftime('%Y-%m', t.transaction_date) AS transaction_month, a.account_type, COUNT(t.transaction_id) AS transaction_count
FROM transactions t
JOIN accounts a ON t.account_id = a.account_id
GROUP BY transaction_month, a.account_type
ORDER BY transaction_month, a.account_type
LIMIT 20;

Top 5 Customers by Total Transaction Amount

sql
SELECT c.first_name, c.last_name, SUM(t.amount) AS total_transaction_amount
FROM customers c
JOIN accounts a ON c.customer_id = a.customer_id
JOIN transactions t ON a.account_id = t.account_id
GROUP BY c.customer_id, c.first_name, c.last_name
ORDER BY total_transaction_amount DESC
LIMIT 5;

Customer Distribution by Country

sql
SELECT country, COUNT(customer_id) AS customer_count
FROM customers
GROUP BY country
ORDER BY customer_count DESC
LIMIT 20;

Load it with pandas

python
import pandas as pd

# Unzip the CSV download first: one file per table
customers = pd.read_csv("customers.csv")
accounts = pd.read_csv("accounts.csv")
transactions = pd.read_csv("transactions.csv")

# Join accounts to customers
df = accounts.merge(customers, left_on="customer_id", right_on="customer_id", how="left", suffixes=("", "_customers"))
print(df.groupby("city").size().sort_values(ascending=False))

Using it in your tool

Power BI
Create relationships between customers and accounts (one-to-many on customer_id), and between accounts and transactions (one-to-many on account_id). Suggested DAX measures: Total Balance = SUM(accounts[balance]), Total Transactions = COUNT(transactions[transaction_id]).

Formats available

  • CSV (zip)One CSV file per table, zipped
  • Excel workbookOne worksheet per table
  • SQLite databaseA ready-to-query database file with every table
  • Parquet (zip)One Parquet file per table, zipped
  • SQL scriptCREATE TABLE with primary and foreign keys, then INSERTs
  • CSVA single CSV file
  • JSONA single JSON file

How this data was generated

Synthetic data. Every row was generated: no real people, customers or companies are in this dataset.

Synthetic data generated by GoMask DataFactory from a relational blueprint: keys, links and rules are enforced in code, text columns are filled by a language model. No real people, companies or transactions.

  • Data generated using GoMask DataFactory.
  • Synthetic data mimics banking operations.
  • Includes customers, accounts, and transactions.
  • Checked by an automated quality gate: unique keys, no orphan foreign keys, required columns filled, declared rules and date ranges (realism score 84).

Limitations

  • The data is synthetic and does not represent real individuals or events.
  • Transaction amounts are simplified and may not reflect all real-world complexities.
  • Limited date range from 2022-01-01 to 2024-12-31.
  • Distributions and correlations are modelled, not measured from real records.

blueprint · banking-dataset-for-power-bi

Scale this dataset

Same tables. As many rows as you need.

Open the blueprint behind these 3 tables in Data Factory: keep the relationships, change a column, and generate it at the size you need.

  • 200,000 rows
  • 1,000,000 rows
Scale this dataset in Data Factory
Tables
customers, accounts, transactions
Licence
yours to use, including commercially
API slug
banking-dataset-for-power-bi

What should your data show?

Preview 20 rows free
No signup. No card.