Site icon Yellowfin BI

Building a vacation rental analytics dashboard in Yellowfin

Building a vacation rental analytics dashboard in Yellowfin

Running a vacation rental is a laborious task. 

Communicating with guests, managing cleaning staff, developing a pricing strategy… It's all time-consuming work. 

What makes it harder is that many decisions are made with partial information: a sense that “this month felt busy,” a hunch that prices might be too low, or a vague feeling that one booking channel is starting to dominate. That’s how intuition quietly replaces evidence.

This is where vacation rental analytics earns its keep

Analytics gives us an objective view of what’s actually happening in the business, so we can spend less time guessing and more time acting. More importantly, it helps us deliver a consistently high-quality experience that keeps guests coming back.

The challenge is that the truth is usually scattered across booking platforms, spreadsheets, and gut feel. A good dashboard pulls it into one place and gives users a quick, honest read on performance, with the ability to drill deeper the moment something looks off or unexpectedly good. With that said, here is what we will be building:

YouTube video player


Step-by-step: how we built the vacation rental dashboard

When you are building an app, the goal is not just to give users charts. The goal is to give them confidence inside the workflow they already live in. That is what embedded analytics is for. The dashboard sits inside your app, speaks your product language, and answers the questions users already ask, without sending them to a spreadsheet or another platform.

In this tutorial, we will build the same kind of foundation you would use in a real embedded scenario:

  • a simple bookings dataset stored in PostgreSQL
  • a clean data source connection in Yellowfin
  • a set of Views designed for dashboards and NLQ
  • and a dashboard that can be extended as your product grows


We start by storing bookings in PostgreSQL, with one row per booking and no pre-aggregation. This gives us flexibility later, whether we are building dashboards, enabling NLQ, or extending the model as the product evolves.

Create the database

From PowerShell, open psql and create a database for the demo:

CREATE DATABASE hotel_demo;

\c hotel_demo

Create the bookings table

Next, we create a flat bookings table designed to support the kinds of questions property owners naturally ask.

DROP TABLE IF EXISTS bookings_flat;

CREATE TABLE bookings_flat (

  booking_id               INTEGER PRIMARY KEY,

  booking_date             DATE,

  nights_booked            INTEGER,

  guests                   INTEGER,

  apartment_capacity       INTEGER,

  guest_country            TEXT,

  channel_type             TEXT,

  device                   TEXT,

  nightly_rate_eur         NUMERIC(10,2),

  total_booking_value_eur  NUMERIC(12,2)

);

 

This structure is intentionally simple – it reflects how booking systems work, keeps the grain obvious, and it makes downstream analytics easier to explain and extend

Load the data

With the table in place, we load the CSV:

\copy bookings_flat

FROM 'C:\Users\YourUser\Desktop\bookings_flat.csv'

DELIMITER ','

CSV HEADER;

A quick check confirms everything is in:

SELECT COUNT(*) FROM bookings_flat;

At this point, we have a clean, booking-level dataset that is ready to be exposed to an analytics layer.

In the next step, we will connect this database to Yellowfin, build our first Views, and start shaping the data into something your end users can explore directly inside your product.


Step 2: Connect PostgreSQL to Yellowfin and expose the data safely

At this point, we have something valuable: a bookings dataset that reflects how property owners actually think about their business. The next job is not to visualize it yet, but to make it available to the analytics layer in a controlled way.

This is where Yellowfin comes in.

For product teams, this step is critical. You are not just connecting a database. You are deciding what your end users will be allowed to see, ask questions about, and build insights from inside your application.

Create a PostgreSQL data source in Yellowfin

From the Yellowfin admin interface, we create a new data source and point it to our PostgreSQL instance.

You will need:

  • host
  • port
  • database name
  • username and password


Once connected, Yellowfin can see the database schema, but nothing is exposed to users yet. That separation matters. Tables are not automatically reportable.

Create a View on the bookings table

We now create a View based on the bookings_flat table.

In Yellowfin:

  • create a new View
  • select bookings_flat as the base table


Inside the View, we change fields to metrics, dimensions and time where necessary.

This step may look administrative, but it has a direct impact on the user experience. A well-defined View makes dashboards easier to build and NLQ questions far more reliable.

What this enables immediately

With a single View in place, we unlock several things at once:

  • dashboards can be built without touching SQL
  • NLQ understands what can be counted, averaged, or grouped
  • product teams can evolve analytics without changing the database


Most importantly, we have created a clean boundary. PostgreSQL remains the source of truth. Yellowfin becomes the storytelling layer.

In the next step, we will use this View to build the first charts from the dashboard and show how NLQ fits naturally into the experience, rather than feeling bolted on.


Step 2: Connect PostgreSQL to Yellowfin and expose the data safely

At this point, we have something valuable: a bookings dataset that reflects how property owners actually think about their business. The next job is not to visualize it yet, but to make it available to the analytics layer in a controlled way.

This is where Yellowfin comes in.

For product teams, this step is critical. You are not just connecting a database. You are deciding what your end users will be allowed to see, ask questions about, and build insights from inside your application.

Create a PostgreSQL data source in Yellowfin

From the Yellowfin admin interface, we create a new data source and point it to our PostgreSQL instance.

You will need:

  • host
  • port
  • database name
  • username and password


Once connected, Yellowfin can see the database schema, but nothing is exposed to users yet. That separation matters. Tables are not automatically reportable.

Why Views matter for embedded analytics

In Yellowfin, dashboards and NLQ do not run directly on database tables. They run on Views. This is not a limitation. It is a feature.

Views act as a contract between your product and your users:

  • they define the grain of analysis
  • they control which fields are visible
  • they influence how NLQ interprets questions


For an embedded use case, this is exactly what you want. You decide what “makes sense” to ask.

Create a View on the bookings table

We now create a View based on the bookings_flat table.

In Yellowfin:

  • open the data source
  • create a new View
  • select bookings_flat as the base table


Inside the View, we classify fields deliberately:

  • booking_id as a dimension
  • channel_type, device, guest_country as dimensions
  • nights_booked, nightly_rate_eur, total_booking_value_eur as metrics


This step may look administrative, but it has a direct impact on the user experience. A well-defined View makes dashboards easier to build and NLQ questions far more reliable.

What this enables immediately

With a single View in place, we unlock several things at once:

  • dashboards can be built without touching SQL
  • NLQ understands what can be counted, averaged, or grouped
  • product teams can evolve analytics without changing the database


Most importantly, we have created a clean boundary. PostgreSQL remains the source of truth. Yellowfin becomes the storytelling layer.

In the next step, we will use this View to build the first charts from the dashboard and show how NLQ fits naturally into the experience, rather than feeling bolted on.

Step 3: Build the first charts and let NLQ do what it’s good at

With the bookings View in place, we can finally answer the question that matters to product teams:

What does a useful analytics experience look like for an end user?

The goal here is not to build every possible chart. It is to surface the right ones. Charts that give immediate clarity, and that naturally invite follow-up questions.

This is where Yellowfin starts shine.

Start with outcome, not exploration

We begin by building charts that answer outcome-level questions first. These are the questions property owners ask without needing prompts.

Revenue over time
This is the anchor. It tells users whether the business is trending in the right direction and provides context for everything else on the dashboard. On its own, it does not explain why revenue moved, but it tells us where to look next.

Average nightly rate by month
This chart gives meaning to revenue changes. It shows whether performance is driven by pricing or volume. When revenue rises alongside stable rates, demand is likely increasing. When rates fall without a lift in bookings, pricing strategy becomes a question.

These two charts together already reduce guesswork. They turn vague impressions into something measurable.

Add behavioral context

Once outcomes are visible, we layer in behavior.

Number of bookings
Bookings show demand independently of price. A rise in bookings paired with flat revenue suggests pressure on pricing. Fewer bookings with stable revenue often means longer stays or higher-value guests.

Average length of stay
This is where operational reality enters the picture. Longer stays usually mean fewer turnovers and more predictable operations. Shorter stays increase workload and can hide weaker demand behind higher booking counts.

These charts help users understand not just what happened, but how it happened.

Make strategy visible

Finally, we surface the charts that influence long-term decisions.

Revenue by channel
This shows how dependent the business is on Booking.com, Airbnb, Expedia, direct bookings, or walk-ins. Heavy reliance on OTAs may drive volume, but it impacts margins. Growth in direct bookings often signals healthier demand and stronger brand recognition.

Guest origin
Guest country adds context that numbers alone cannot. Over time, this chart can inform marketing focus and seasonal pricing decisions.

Where NLQ fits in naturally

Once these charts are in place, NLQ stops being a novelty and starts behaving like a natural extension of the dashboard.

Users can ask follow-up questions like:

  • bookings by channel last month
  • average nightly rate for direct bookings
  • revenue from guests in Germany
  • length of stay by device


Because the View was designed carefully, these questions return sensible answers without needing explanation. NLQ works best when the data model already reflects how users think.

Why this matters for product teams

You are no longer showing users static reports. You are giving them:

  • a shared view of performance
  • the ability to ask their own questions
  • confidence that insights come from the same source of truth
Exit mobile version