Semantic Model Setup

Overview of the Semantic Model in RevOS — the Cubes tab, Graph tab, relation types, and links to CLI docs for authoring cubes.

Building a robust analytics layer starts with a clear, reusable semantic model. This guide shows how to turn raw, replicated tables into business‑ready entities, link them together, and expose trusted metrics.

Key Concepts

Term
Definition
Entity
A logical representation of a table / dataset. Contains dimensions, measures, and relations.
Dimension
A descriptive attribute – date, company name, status, etc.
Measure
A numeric metric, usually aggregated – sales amount, deal count, …
Relation
A logical link between two entities. Always declared in both directions.
Semantic Model
A connected set of entities forming a domain graph.
💡

Access control – Only users with the Admin role can manage the semantic model.

Interface Overview

Below is a quick tour of the modeling workspace.

Cubes list
Cubes list

Data Model sidebar

Use the Semantic Model icon (two connected circles) to open the modeling area from anywhere in the app.

Cubes tab

Lists all cubes deployed to your organisation. Click any row to open the read‑only cube definition.

The Cubes tab list view
The Cubes tab list view

Graph tab

Cubes graph
Cubes graph

Interactive map of all cubes and their relations.

Managing cubes

Cubes are authored and deployed via the CLI. See the RevOS CLI docs →

Relation Types and When to Use Them

Type
Quick description
Example
How to set
one_to_one
Each A has exactly one B
Company ↔️ Company profile
"relationship": "one_to_one"
one_to_many
One A owns many B
Company → Invoices
"one_to_many"
many_to_one
Many A refer to one B
Invoice → Company
"many_to_one"
360‑degree rule – Declare each relation in both entities. If deals has many_to_one to companies, then companies must have the mirror one_to_many to deals. Otherwise the graph builder cannot find a path.

Modeling many‑to‑many

Direct many_to_many is not supported. Instead create a junction entity – a link table with pairs of keys. Both original objects connect to it with one‑to‑many / many‑to‑one relations, keeping source tables clean and avoiding duplicates.

Example (HubSpot deals ↔️ companies):

  1. Create entity company_deal_link based on the companies table.
  1. In SQL unnest the deal_ids JSON array: UNNEST(deal_ids) AS deal_id.
  1. Relations:
      • companies ↔️ company_deal_linkone_to_many / many_to_one.
      • deals ↔️ company_deal_linkone_to_many / many_to_one.

Dimensions and Measures

For the full reference on defining dimensions, measures, and their types — see the RevOS CLI docs →

Did this answer your question?
😞
😐
🤩

Last updated on May 11, 2026