Retail Sales and Returns (synthetic)
Two years of invented supermarket sales across 12 stores and an online shop, with products, loyalty customers, discounts and returns.
Business scenario
FreshCart is an invented retail chain with hypermarkets, supermarkets, express stores and an online shop in five regions. The category manager wants to understand which products and stores make money after discounts and returns, how promotions affect margin, and whether loyalty customers are worth the extra attention.
Questions to answer with a dashboard
- What are net sales, cost of goods and gross margin % by category and month?
- Which stores and store formats have the best margin after discounts, and how do they compare year over year?
- How much do promotions (discount % above zero) add in units, and what do they cost in margin?
- What is the average basket: lines per order and net sales per order, by store format and weekday?
- Do loyalty customers spend more per order than customers without a card, and how does it differ by tier?
- Which products are returned most often, for what reasons, and what is the refund value by category?
- How strongly does December shopping change the mix of categories compared with the rest of the year?
- Create a top 10 products visual that stays correct when a slicer filters by region or format.
Tables, columns and data dictionary
dim_date
One row per calendar day. Mark it as the date table in Power BI and relate every fact table to date_key.
date_key(integer): Day as a number, yyyymmdd (for example 20240229)date(date): Calendar dateyear(integer): Calendar yearquarter(integer): Calendar quarter, 1 to 4month(integer): Month number, 1 to 12month_name(text): Month name in Englishday(integer): Day of the monthday_name(text): Weekday name in Englishis_weekend(boolean): True for Saturday and Sunday
dim_store
Stores and the online shop.
store_id(integer): Unique store keystore_name(text): Store nameregion(text): Sales regionformat(text): Hypermarket, Supermarket, Express or Onlineopened_year(integer): Year the store openedfloor_area_m2(integer): Selling area in square metres; empty for Online
dim_product
Products sold, with category, price and unit cost.
product_id(integer): Unique product keyproduct_name(text): Product namecategory(text): Top-level categorysubcategory(text): Subcategorylist_price(decimal): Regular selling price in US dollarsunit_cost(decimal): Cost to the retailer per unit in US dollars
dim_customer
Loyalty-card customers. Sales to people without a card have an empty customer.
customer_id(integer): Unique customer keyloyalty_tier(text): Basic, Silver or Goldage_band(text): Age grouphome_region(text): Region where the customer livesjoin_date(date): Date the customer joined the loyalty programme
fact_sales
One row per product on a receipt (a sales line).
sale_line_id(integer): Unique sales-line keyorder_id(integer): Receipt number; several lines share one orderdate_key(integer): Sale datestore_id(integer): Storeproduct_id(integer): Productcustomer_id(integer): Loyalty customer; empty when no card was usedquantity(integer): Units solddiscount_pct(decimal): Discount given, in percentnet_sales(decimal): Quantity x price after discount, in US dollarscost_of_goods(decimal): Quantity x unit cost, in US dollars
fact_return
One row per returned sales line.
return_id(integer): Unique return keysale_line_id(integer): The sales line being returneddate_key(integer): Return datereason(text): Why it was returnedrefund_amount(decimal): Amount refunded in US dollars
License and usage terms
Free to use (synthetic data)
You may use this synthetic data for learning, practice, demos, training material and portfolio projects, including in published reports. You may not resell the files themselves or present them as real data. The data is invented: it does not describe any real person, customer or company.