← Blog

How to build a sales dashboard on the database you already have

The app’s own screens: a PostgreSQL sales database connected read-only, sales by region quarter by quarter, and the sales dashboard a sales manager opens, narrowed to one region with a click.

In most companies the monthly sales report is rebuilt by hand. Someone exports last month’s orders from the database, pastes them into a spreadsheet, fixes the pivot table and e-mails the result, which is out of date the day after. A BI tool would fix that, but it is a project of its own, with its own licences and its own people. This guide connects the database you already have to Sterodata, read-only, and builds the report once: a summary by region and quarter, and a dashboard your sales managers open whenever they like, always on today’s data.

The example is Kestrel Supply, a wholesaler of coffee, tea, syrups and café equipment. It sells to 72 cafés, restaurants, hotels and shops in six European regions, and has 2,768 orders since January 2025 in a PostgreSQL database. Every figure below is that database’s own, as Sterodata read it on 29 October 2026.

What you will have

  • The sales database’s Orders and Customers in Sterodata, read live and read-only. Nothing is copied.
  • Sales by region, quarter by quarter, with a total.
  • A sales dashboard: sales, orders and the average order, sales by month and by region, and the largest orders, with filters for the period, the region and the channel.
  • The sales managers open the dashboard and nothing else.

Before you start: a user that can only read

Ask whoever runs the database for a user that can read the tables you want to report on, and nothing else. If the database has a read replica, ask for that address too: reports then never compete with the work the database does all day. Sterodata never writes to a connected database, but with a read-only user the database itself refuses as well.

Step 1. Connect the database

In your workspace, open Connect External Database from the link icon beside the database name at the top. Choose PostgreSQL or MySQL, enter the host, port, database name, user and password, and press Test Connection. Kestrel’s answered “Connection successful. Permissions validated.”

Next, tick the tables to report on: customers and orders. Give each the name your team uses, Customers and Orders, and give the database a name in Sterodata: Sales. The wizard saw that orders.customer_id points at customers, and made Customer a link to the customer’s record. Confirm, and both tables appear under Sales, with every row the database holds.

Step 2. Make the fields read as your team reads them

A database names its columns for programs: ordered_on, customer_id, amount. Rename each field to the word your team uses, set Ordered on to a date without a time (Show Time off), and set Amount to a currency, in euros. Renaming changes only what Sterodata shows; the database keeps its names.

In the databaseIn SterodataType
order_noOrderText
ordered_onOrdered onDate, without time
customer_idCustomerLink to Customers
region, channel, categoryRegion, Channel, CategoryText
amountAmountCurrency, €

Then, on every field you will group, filter or pivot by (Ordered on, Region, Channel, Category and Amount), tick Enable Sort, Filter and Grouping. It starts on only for the columns your database has an index for, because each sort or filter runs on your database; Kestrel’s had none, so every one had to be ticked. Leave it off and a pivot on that field shows only its total.

Step 3. Sales by region, quarter by quarter

Under Sales, choose New, then Summary, of Orders. Group the rows by Region, put Ordered on in the columns by quarter, and Sum of Amount in the values. In its filter, keep the last four complete quarters: Ordered on from 1 October 2025 to 30 September 2026.

RegionTotal2025 Q42026 Q12026 Q22026 Q3
UK & Ireland€273,281.50€85,055.13€45,541.69€60,339.16€82,345.52
DACH€264,705.98€66,009.38€57,585.06€72,166.00€68,945.54
Benelux€145,587.70€32,898.44€31,724.27€46,638.66€34,326.33
France€104,477.14€30,231.75€15,896.92€32,420.04€25,928.43
Nordics€73,590.39€15,742.21€11,080.80€17,922.07€28,845.31
Iberia€70,113.58€16,582.32€21,364.13€22,704.13€9,463.00

Over the four quarters Kestrel sold €931,756.29 in 1,681 orders. The first quarter of 2026 was the weakest, at €183,192.87; the second was the strongest, at €252,190.06. Iberia’s third quarter fell to €9,463.00, under half its second, which is the line a sales manager would ask about first.

Step 4. The dashboard

Under Pages, make a new page and give it a title. Then add, from top to bottom: a filter bar with Ordered on (opening on This year), Region and Channel; three numbers, the sum of Amount, the count of orders and the average of Amount; a line chart of Amount by month of Ordered on; a bar chart of Amount by Region; and a list of the largest orders, shown as a table and sorted by Amount, highest first.

For this year to 28 October, it reads €797,373.19 in sales from 1,349 orders, €591.08 on average. Every number, chart and list follows the filter bar, and says under its title what it is filtered to.

A click on a bar narrows the whole page to it. Click DACH and the page reads €234,540.74 from 362 orders, €647.90 on average; the line shows DACH month by month, and the largest orders are DACH’s. Reset puts it back.

Step 5. Share it with the sales managers

Make a role, Sales managers, and add the people in it. Then publish the page to that role only. A sales manager opens the dashboard as View only: the page and its filters, and nothing else, not the Orders table, not the summary and not the database. Send them its address; it is also under Pages.

See how to control who sees what for roles, views and links in more depth.

Or let your assistant build the dashboard

Connecting the database and making the summary are done in the app. The dashboard can be your assistant’s work: with ChatGPT or Claude connected to your workspace, describe it the way you would to a colleague.

On the Sales database, make a page called Sales dashboard: a filter bar for Ordered on, opening on this year, and for Region and Channel; the sum of Amount, the number of orders and the average order; sales by month as a line and by region as bars; and the largest orders. Publish it to the team.

It builds the page from the same parts this guide added by hand, and publishes it to the workspace’s members; to keep it to the sales managers, choose their role in Publish afterwards. It can also read the dashboard for you: asked what DACH sold this year, it picks DACH in the filter bar and answers €234,540.74 from 362 orders, the figures the page shows. Anything it built can be changed in the page editor.

Day to day

  • Nothing to refresh. The page reads the database each time it opens. While writing this post I added a €1,000.00 order for a DACH customer straight into PostgreSQL. The next time the dashboard opened, DACH read €235,540.74 from 363 orders. Then I deleted the order again.
  • Questions get answered on the page. A manager narrows it by clicking a bar or with the filters, instead of asking for a new export.
  • The rows are one click away. Any table downloads as CSV or Excel, for the analysis a dashboard does not do.

Good to know

  • Nothing is copied. If the database is down or out of reach, the reports cannot read it; Sterodata keeps no copy to fall back on.
  • Your database does the work. Each time a page opens, its numbers, charts and lists run as queries on your database. For a busy database, connect a read replica.
  • PostgreSQL and MySQL are the databases you can connect today.
  • A chart adds up its values. For an average or a count, use a number.
  • Your assistant reads the dashboard, not the database. It answers from what the page shows, under any filter. A question the page does not answer, such as one customer’s orders, is for the app’s tables.
  • No report e-mails. People open the page when they want it, and it is current when they do.
  • Data that lives in an app, not a database: import a file, or connect the app’s API to keep a table in sync every hour, and report on that the same way.

Questions

Does Sterodata copy my database?

No. It keeps the tables’ definitions and the connection’s password, in a secret store, and reads the database each time a report opens. No rows are copied into Sterodata.

Can Sterodata change the data in my database?

No. A connected database is read-only in Sterodata, which refuses to write to it. Connect with a user that can only read, and the database refuses too.

Which databases can I connect?

PostgreSQL and MySQL.

Can ChatGPT or Claude build the dashboard?

Yes. Once the database is connected in the app, describe the dashboard to your assistant: it builds the page, publishes it to your team, and reads its figures for you under any filter. Connecting the database and making a summary are done in the app.

Do the people I share a dashboard with need access to the database?

No. They open the page, with its numbers, charts and list, and nothing else: not the database, its tables or its password.

Will reports slow down my database?

Each time a page opens, its numbers, charts and lists run as queries on your database. On a busy database, connect a read replica, and turn on sorting, filtering and grouping only for the fields you report by.

Sterodata is where a business keeps its records, orders and numbers, and sees who can reach each one and who changed it. Build it with your assistant, from a ready-made app, or yourself without code.

Read next