Sales sample data
An orders dataset built to survive a pivot table: enough rows, a clean time axis, categories that repeat, and revenue that varies the way real revenue does.
The schema
Column Field type Options ------------------------------------------------------------ order_id Row Number order_date Date from 2024-01-01, sequential customer_name Full Name region Custom List North America, Europe, APAC, LATAM country Country product Custom List your real product names category Custom List Hardware, Software, Services quantity Integer min 1, max 12 unit_price Price min 9.99, max 899.00 currency Currency Code status Custom List paid, pending, refunded, cancelled sales_rep Custom List 8–12 repeating names
order_id,order_date,region,product,quantity,unit_price,currency,status 1,2024-01-01,Europe,Standing Desk,2,349.00,EUR,paid 2,2024-01-01,North America,License Pack,1,129.99,USD,paid 3,2024-01-02,APAC,Onboarding,1,899.00,USD,pending
Getting a chart that looks like a business
Most generated sales data produces a flat, noisy line, because every column is an independent uniform draw. Four adjustments fix that:
- Sequential dates. Set the Date field's order to sequential so rows spread evenly across the period. Random dates leave gaps and pile-ups that make a daily chart unreadable.
- Weighted categories. Repeat values inside a Custom List. Real revenue is concentrated — a handful of products and one or two regions dominate. An even split across four regions is the least realistic thing a sales dataset can do.
- Skewed order values. Number (Normal Dist.) for quantity or price gives you a believable middle with genuine outliers, rather than as many twelve-unit orders as single-unit ones.
- A status mix that reflects reality. Repeat
paida dozen times against onerefundedand onecancelled. A dataset that is 25% refunds will make every dashboard you build look wrong.
Line totals
Quantity and unit price as independent columns are fine until something has to sum them. If your dashboard needs a line_total, do not generate it as a third random column — it will not equal quantity × unit price, and the first person to check will lose trust in the whole dataset. Use a Formula field so the total is derived from the other two columns in the same row. The same applies to tax, discount and net totals: derive them, never draw them.
Currencies
A Currency Code column alongside a Price column is realistic and slightly dangerous: summing revenue across mixed currencies without conversion produces a meaningless number, and dashboards do it constantly. That makes it a genuinely useful thing to have in a test dataset — if your BI tool happily adds euros to yen, you have found a real bug. If you want simple totals instead, pin the currency to a single value with a one-item Custom List.
Sizing
For a pivot table or a dashboard demo, 5,000 to 20,000 rows is the sweet spot: enough for grouping to be meaningful, small enough to recalculate instantly. Go to 100,000 when you are testing load performance, refresh time or the point at which a chart stops rendering. Spreadsheet row limits matter here — the Excel guide covers them.
Export targets
CSV for Excel, Sheets, Power BI and Tableau. TSV if product names contain commas and you would rather not deal with quoting. SQL to seed an orders table directly — see PostgreSQL or MySQL. JSON if the dashboard reads from a mock API instead of a file.
Common questions
How do I make the revenue chart look realistic?
Set the date field to sequential order, weight categories by repeating values in a Custom List, and use the Number (Normal Dist.) field for order values. Independent uniform draws produce a flat, noisy line that looks nothing like real revenue.
How do I get line totals that actually add up?
Use a Formula field so line_total is computed from quantity and unit_price in the same row. A separately generated column will not match, and anyone who checks will stop trusting the dataset.
How many rows should I generate?
Around 5,000 to 20,000 for dashboards and pivots — enough for grouping to be meaningful and small enough to recalculate instantly. Use the full 100,000 for load and refresh testing.
Can I use my own product names?
Yes. Put them in a Custom List field, repeating the ones that should appear more often. The built-in Product Name field is there for when you do not care about the specific names.
Should I mix currencies?
Only deliberately. Mixed currencies without conversion make totals meaningless — which is useful if you are testing whether your BI tool notices, and unhelpful if you just want a clean demo. Pin to one currency with a single-item Custom List for the latter.
Related
- Employee sample data — the HR equivalent.
- Random date generator — building a clean time axis.
- Excel sample data — pivots, imports and regional settings.
- Sample CSV files — other ready-made schemas.