Data as of Sep 14, 2026 · Based on 354 AI responses from ChatGPT Search and Google AI Mode · See how Parse measures this
For most growing data teams, especially those already using dbt, the
dbt Semantic Layer is the top choice for managing data models as code. If your needs go beyond
dbt-centric workflows, such as requiring high-performance embedded analytics or managing complex legacy data environments across multiple tools, and are strong alternatives for universal semantic governance.
Brands AI recommends here
Named in 66% of answers
Best for teams needing an API-first approach to decouple metrics from specific tools. It excels when you need to serve metrics to multiple applications or embedded analytics platforms beyond standard BI dashboards.
Named in 53% of answers
Named in 53% of answers
The preferred choice for enterprise-grade virtualization. It supports massive, complex environments where you must maintain consistent metrics across legacy reporting tools and modern data warehouses.
Named in 43% of answers
If your goal is specifically **“data models as code” for a growing data team**, I’d narrow the field to **dbt Semantic Layer/MetricFlow, Cube, and AtScale**. The right choice depends heavily on whether you want the semantic layer primarily to *define metrics* or also to *serve them as an application/API layer*. ### My…
If your goal is specifically “data models as code” for a growing data team, I’d narrow the field to dbt Semantic Layer/MetricFlow, Cube, and AtScale. The right choice depends heavily on whether you want the semantic layer primarily to define metrics or also to serve them as an application/API layer.
| dbt Semantic Layer / MetricFlow | Cube | AtScale --- | --- | --- | --- Code-first modeling | Excellent | Excellent | Good Natural fit with dbt | Excellent | Excellent | Good Git/PR workflow | Excellent | Excellent | Good Metrics + dimensions + joins | Yes | Yes | Yes API / programmatic serving | Good | Excellent | Good Caching / pre-aggregations | More limited | Strong | Strong Embedded analytics | Not its primary focus | Strong | Strong BI-tool independence | Good | Strong | Strong Enterprise OLAP | Moderate | Strong | Strong Complexity for a small team | Lowest | Medium | Highest
If you're already standardized on dbt: start with dbt Semantic Layer/MetricFlow. It keeps semantic definitions alongside your transformation models, so your workflow can essentially be:
raw → dbt models → metrics/semantic definitions → BI
That is a very clean “analytics as code” architecture. Current comparisons describe MetricFlow as the layer that defines entities, dimensions and measures on top of dbt models.
If you expect the semantic layer to become infrastructure used by lots of consumers: I'd seriously evaluate Cube. Its architecture is more explicitly a serving layer: the same governed model can expose metrics through SQL, REST, GraphQL and MCP, while providing caching/pre-aggregations and access controls.
A particularly attractive architecture for a growing engineering-heavy team is:
dbt owns durable data transformations; Cube owns the reusable semantic/serving model. Cube explicitly supports reading dbt models rather than replacing dbt, which gives you a separation between building trustworthy datasets and defining/serving business semantics.
AtScale becomes more interesting if you're heading toward a large enterprise BI/OLAP environment, especially where Excel/Power BI-style consumption and governed multidimensional models are central. Its current documentation supports programmatic data-model creation and deployment.
Don't ask only “which metrics store?” Ask what you want the layer to own.
For example:
Warehouse
│
▼
dbt
├── staging models
├── marts
├── tests
└── lineage
│
▼
Semantic layer
├── entities
├── dimensions
├── metrics
├── joins
├── permissions
└── metric contracts
│
├── BI
├── notebooks
├── applications
└── AI agents
That's important because a metrics layer primarily standardizes measures like revenue, active_users, and gross_margin; a broader semantic layer also captures entities, relationships, dimensions, join paths and access rules.
net_revenue shouldn't merely have SQL—it should have an owner, description, grain, dimensions, tests and a clear definition.If I were designing this today for a growing data team, I'd evaluate these two architectures first:
Option A — simplest
dbt + dbt Semantic Layer + existing BI Best when your primary problem is metric consistency and you already have a strongly dbt-centric workflow.
Option B — more extensible
dbt + Cube + BI / APIs / applications / AI Best when you expect the semantic layer to become a piece of shared data infrastructure rather than merely a place to store metric definitions.
I would not start with a heavyweight enterprise semantic platform simply because you're growing. Start with the smallest layer that gives you version-controlled definitions, testing and consistent consumption; add serving/caching/multitenancy capabilities when your use cases actually require them.
One useful pilot is to implement just three metrics—a simple count, a revenue metric with exclusions, and a metric requiring row-level/tenant permissions—and test each candidate against real BI queries and an ad-hoc consumer. That exposes modeling and governance problems much faster than a feature checklist.
If you tell me your warehouse (Snowflake/BigQuery/Databricks/etc.), BI tool, whether you're already on dbt, and approximate data-team size, I can narrow this to a concrete architecture and migration plan.
For example:
Warehouse
│
▼
dbt
├── staging models
├── marts
├── tests
└── lineage
│
▼
Semantic layer
├── entities
├── dimensions
├── metrics
├── joins
├── permissions
└── metric contracts
│
├── BI
├── notebooks
├── applications
└── AI agents
That's important because a metrics layer primarily standardizes measures like revenue, active_users, and gross_margin; a broader semantic layer also captures entities, relationships, dimensions, join paths and access rules.
Managing data models as code (Analytics as Code) for a growing team points you directly toward decoupled, Git-versioned semantic layers. The "best" choice depends heavily on whether your team is already standardized around **dbt** or looking for a universal, high-performance API/cache layer. The top tools fit distinct…
Managing data models as code (Analytics as Code) for a growing team points you directly toward decoupled, Git-versioned semantic layers. The "best" choice depends heavily on whether your team is already standardized around dbt or looking for a universal, high-performance API/cache layer.
The top tools fit distinct scaling needs:
To help narrow down the exact fit, tell me:
If your goal is specifically **“data models as code”** for a growing data team, I’d narrow the field to **dbt Semantic Layer/MetricFlow** and **Cube**, with **Lightdash** as a strong option if BI is the main consumer. ### My recommendation **Start with dbt Semantic Layer if your team already uses dbt heavily.** It…
If your goal is specifically “data models as code” for a growing data team, I’d narrow the field to dbt Semantic Layer/MetricFlow and Cube, with Lightdash as a strong option if BI is the main consumer.
Start with dbt Semantic Layer if your team already uses dbt heavily. It gives you the cleanest workflow:
raw data → dbt models → semantic models/metrics → BI / notebooks / AI Metric definitions can live in version-controlled YAML alongside the transformation code, with Git review, tests, lineage, and documentation.
That makes it particularly attractive for a growing team where the bigger problem is preventing metric definitions from fragmenting across dashboards and analysts.
Choose Cube if you expect the semantic layer to become an actual data product/API consumed by multiple things:
Cube is more explicitly designed as a serving layer: its open-source Cube Core models metrics, dimensions, joins and access rules, while the platform adds APIs, caching/pre-aggregations, embedded analytics and agent interfaces.
A useful rule is the “second consumer” test: if metrics only go to one BI tool, dbt's semantic layer may be enough. Once the same definitions need to serve a second fundamentally different consumer, a dedicated serving layer becomes much more compelling.
| dbt Semantic Layer | Cube | Lightdash --- | --- | --- | --- Models as code | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ Git/PR workflow | Excellent | Excellent | Excellent dbt integration | Native | Very good | Native Metric governance | Excellent | Excellent | Good API / application serving | Good | Excellent | Limited Embedded analytics | Good | Excellent | Limited Caching/pre-aggregation | Good | Excellent | More BI-oriented Open source | dbt Core is OSS; SL is primarily a dbt product | Cube Core is OSS | Yes Best for | dbt-centric analytics teams | Multi-consumer data platforms | dbt + open-source BI
I would not start by putting every piece of business logic into the semantic layer.
Keep the responsibilities clean:
dbt
Semantic layer
revenueARRactive_customerconversion_rateBI
That separation prevents your semantic layer from becoming another giant transformation framework.
If you told me “We're a 5–20 person data/analytics team, already using dbt, and our primary need is getting everyone to agree on metrics”, I'd pick dbt Semantic Layer.
If you told me “We're building a data platform where the same governed metrics will eventually power BI + product analytics + customer-facing dashboards + AI”, I'd pick Cube.
And if you said “We want the simplest open-source experience for analysts on top of dbt”, I'd look very seriously at Lightdash.
One important architectural point: I wouldn't think of this as dbt vs. Cube. A very strong architecture is dbt for transformation/modeling + Cube for semantic serving. Cube explicitly supports reading dbt models, so the two can occupy different layers rather than duplicating each other.
If you tell me your warehouse (Snowflake/BigQuery/Databricks/etc.), BI tool, dbt usage, and whether you need embedded analytics, I can give you a much more concrete recommendation—including what I'd put in Git and what the repository structure should look like.
If you told me “We're building a data platform where the same governed metrics will eventually power BI + product analytics + customer-facing dashboards + AI”, I'd pick Cube.
And if you said “We want the simplest open-source experience for analysts on top of dbt”, I'd look very seriously at Lightdash.
Managing your data models and metrics as code (often called Metrics-as-Code or Analytics-as-Code) for a growing data team comes down to choosing a tool that fits your existing stack, developer workflow, and how you plan to consume those metrics downstream (BI, APIs, or AI…
Managing your data models and metrics as code (often called Metrics-as-Code or Analytics-as-Code) for a growing data team comes down to choosing a tool that fits your existing stack, developer workflow, and how you plan to consume those metrics downstream (BI, APIs, or AI agents).
The industry landscape centers around two clear frontrunners for a code-first approach, supplemented by cloud platform natives.
cube_dbt ) to define access control, pre-aggregations, and metrics.To help narrow this down, tell me:
Managing data models as code for a growing data team means you need a solution that supports version control (Git), CI/CD, modular definitions, and seamless integration with your modern data stack (warehouse + BI + AI agents). The industry has largely converged on a few standout tools for code-first semantic layers…
Managing data models as code for a growing data team means you need a solution that supports version control (Git), CI/CD, modular definitions, and seamless integration with your modern data stack (warehouse + BI + AI agents).
The industry has largely converged on a few standout tools for code-first semantic layers and metrics stores. The "best" choice depends heavily on your stack and your primary consumption use case (BI dashboards vs. low-latency embedded apps vs. AI/LLM context).
If your team already uses dbt for transformations, staying within the ecosystem via the dbt Semantic Layer is the most natural path to true data-as-code metrics.
dbt_project structure and Git for version control.Cube is an enterprise-grade, headless semantic layer built specifically as a universal metrics store.
To help narrow this down:
If your goal is **“data models as code”** rather than just a centralized dashboard metric catalog, I’d narrow the field to **dbt Semantic Layer / MetricFlow** and **Cube**. AtScale is worth considering for a more enterprise/OLAP-heavy environment. ### My short answer **For a growing data team already centered on dbt:…
If your goal is “data models as code” rather than just a centralized dashboard metric catalog, I’d narrow the field to dbt Semantic Layer / MetricFlow and Cube. AtScale is worth considering for a more enterprise/OLAP-heavy environment.
For a growing data team already centered on dbt: start with dbt Semantic Layer (MetricFlow). For a team that wants a more general-purpose, headless semantic layer serving BI + applications + AI: choose Cube.
| dbt Semantic Layer / MetricFlow | Cube | AtScale --- | --- | --- | --- Model-as-code | Excellent | Excellent | Good dbt integration | Best | Very good | Good Metrics / dimensions | Excellent | Excellent | Excellent Complex semantic joins | Excellent | Excellent | Excellent BI consumption | Excellent | Excellent | Excellent Embedded analytics / APIs | Good | Excellent | Good AI/agent consumption | Good | Excellent | Good Caching / pre-aggregation | More warehouse-dependent | Strong | Strong Open-source foundation | MetricFlow | Cube Core | No Best fit | dbt-centric data teams | Broader analytics platform | Large enterprise
dbt's current Semantic Layer defines semantic models and metrics as version-controlled YAML and uses MetricFlow to compile metric requests into SQL.
Cube is particularly compelling if you want the semantic model to become a platform interface rather than merely a dbt feature: its models define entities, metrics, dimensions, joins and access rules, and can be exposed through SQL, REST, GraphQL and MCP.
I'd structure the stack roughly like this:
Raw data → dbt transformations → semantic layer → BI / notebooks / applications / AI
The important architectural decision is to keep transformation logic and semantic logic separate:
orders or customer dataset?”revenue, retention, active_customer, etc. mean?”That separation becomes increasingly valuable as the team grows because otherwise metric definitions start leaking into Looker/Tableau dashboards, SQL notebooks, Python, spreadsheets, and eventually AI prompts.
Pick dbt Semantic Layer if:
Pick Cube if:
Cube explicitly supports code-managed models and version control, including YAML/JavaScript modeling, while its caching layer uses pre-aggregations for performance.
Pick AtScale if:
AtScale's current documentation specifically supports programmatic data-model creation and deployment, so it can fit a model-as-code workflow, but I'd generally evaluate it later unless you already have an enterprise-scale use case.
I wouldn't make the decision based on “Which metrics store is best?”
I'd ask:
“Where should our organization's canonical analytical model live, and how should every consumer access it?” That leads to a more durable architecture. Your canonical model should contain things like:
metrics:
revenue:
type: sum
expression: net_amount
entity: order
active_customers:
type: count_distinct
expression: customer_id
filter: status = 'active'
dimensions:
customer:
- segment
- country
- signup_month
relationships:
order:
- customer
- product
Then Git becomes the control plane: PR → review → tests → deploy → every downstream consumer gets the same definitions.
For your stated goal, my default choice would therefore be:
dbt Semantic Layer if you're dbt-first; Cube if you're building a broader data/analytics platform.
If you tell me your warehouse (Snowflake/BigQuery/Databricks/etc.), BI tool, dbt usage, and team size, I can give you a much more concrete recommendation—including what I'd choose between dbt Semantic Layer, Cube, LookML, AtScale, and a warehouse-native approach for your specific stack.
The **[dbt Semantic Layer](https://www.getdbt.com/product/semantic-layer)** (powered by MetricFlow) is the best choice for a growing data team focused on analytics-as-code, especially if you already use dbt for transformations.[](https://www.knowi.com/blog/semantic-layer-tools/)…
The dbt Semantic Layer (powered by MetricFlow) is the best choice for a growing data team focused on analytics-as-code, especially if you already use dbt for transformations.
Managing data models as code (often called Analytics Engineering) requires version control, CI/CD testing, and metrics living right alongside your data transformations.
Top Semantic Layer & Metrics Store Options
| Tool | Best For | Key Advantage |
|---|---|---|
| dbt Semantic Layer | Analytics engineering & dbt shops | Metrics live as code next to models; zero-copy architecture. |
| Cube | Headless BI & embedded apps | Powerful caching, robust REST/GraphQL/SQL APIs. |
| AtScale | Enterprise governance & multidimensional OLAP | Deep integration with BI tools like Excel and Power BI. |
| Snowflake Semantic Views | Native cloud data warehouse integration | Built directly into Snowflake for optimized performance and governance. |
Why the dbt Semantic Layer Fits Code-First Teams
To help narrow down the right fit, tell me:
I can give you a tailored implementation approach.
If your goal is **“manage data models as code”**—meaning metric definitions, joins, dimensions, and business logic should live in Git, go through PR review, have tests, and be reusable—the best choice depends on where you want that semantic contract to live and who consumes it. A useful way to frame it: - **dbt =…
If your goal is “manage data models as code”—meaning metric definitions, joins, dimensions, and business logic should live in Git, go through PR review, have tests, and be reusable—the best choice depends on where you want that semantic contract to live and who consumes it.
A useful way to frame it:
Most growing data teams should avoid putting core metrics only inside a BI tool. The question is whether you want a dbt-native semantic layer or a dedicated metrics serving layer.
| Tool | Best fit | Why teams choose it | Main tradeoff |
|---|---|---|---|
| dbt Labs Semantic Layer (MetricFlow) | dbt-first teams | Metrics live beside models, tests, lineage, and docs | Less ideal if you need a high-scale metrics API or embedded analytics layer |
| Cube | Multi-consumer analytics (BI + apps + AI) | Headless semantic layer, APIs, caching, embedded use cases | Another production service to operate |
| Lightdash | Smaller dbt-native teams | Great Git workflow and analyst experience | More BI-focused than a universal metrics serving layer |
| Google Looker / LookML | Companies standardized on Looker | Mature governance model | Definitions can become coupled to Looker |
cube.dev Bruin## Recommendation by team stage
Use:
dbt + dbt Semantic Layer
A typical pattern:
Warehouse
↓
dbt models (SQL + tests + lineage)
↓
Semantic metrics (YAML)
↓
BI tools / analysts
This keeps ownership simple:
This is usually the lowest-friction path if dbt is already your modeling backbone.
Consider:
dbt + dedicated semantic serving layer (often Cube)
Pattern:
Warehouse
↓
dbt models
↓
Semantic layer
↓
┌───────────────┐
│ BI dashboards │
│ Product apps │
│ APIs │
│ AI agents │
└───────────────┘
This becomes attractive when the same metric needs to power:
Cube’s design is aimed at serving governed metrics across multiple interfaces rather than only BI exploration.
Example:
Revenue = SUM(orders.amount) - refunds
defined separately in:
This almost always creates metric drift.
Your semantic layer should not become your second dbt.
A clean split is:
dbt owns:
Semantic layer owns:
For a growing team starting today, my default architecture would be:
Warehouse → dbt → semantic layer → every consumer
Start with dbt Semantic Layer if your needs are mostly analytics. Add Cube (or similar) when metrics become an application/API contract rather than just a BI definition.
If you share your stack (Snowflake/BigQuery/Databricks, BI tool, team size, and whether you have embedded analytics), I can narrow this to a specific recommendation.
For a growing data team focused on managing data models as code (version-controlled, CI/CD-friendly, and decoupled from single BI tools), the "best" choice depends heavily on your existing data stack.[](https://getbruin.com/blog/semantic-layer-tools/)…
For a growing data team focused on managing data models as code (version-controlled, CI/CD-friendly, and decoupled from single BI tools), the "best" choice depends heavily on your existing data stack.
The top industry contenders for data-as-code semantic layers break down by use case:
.yml files and gives your business users a lightweight, code-synced UI to build charts without writing SQL.To help narrow down the ideal fit, tell me:
If your goal is **“manage data models as code”** and you’re building a growing data team, I’d generally avoid starting with a BI-tool-native semantic layer unless you are already committed to that BI ecosystem. The strongest pattern for many modern teams is: **Warehouse + dbt for transformation/modeling → semantic…
If your goal is “manage data models as code” and you’re building a growing data team, I’d generally avoid starting with a BI-tool-native semantic layer unless you are already committed to that BI ecosystem. The strongest pattern for many modern teams is:
Warehouse + dbt for transformation/modeling → semantic layer for governed metrics → BI/apps/AI consumers.
The “best” choice depends mostly on where you want your source of truth to live and how many consumers you expect.
| Tool | Best fit | Why teams choose it | Watch-outs |
|---|---|---|---|
| dbt Labs Semantic Layer (MetricFlow) | dbt-first analytics teams | Metrics live alongside dbt models, YAML/code-reviewed, lineage-friendly | Less compelling if you need a standalone metrics serving layer for many apps |
| Cube | Teams needing metrics APIs, embedded analytics, multiple consumers | Strong “headless semantic layer” approach: define once, serve BI/apps/AI | Adds another platform to operate |
| Google Cloud Looker LookML | Organizations standardized on Looker | Mature governance and modeling workflow | Logic can become tied to Looker |
| Lightdash | dbt + open-source BI teams | Fast path from dbt models to governed exploration | Less suited for complex embedded analytics |
cube.dev cube.dev## My default recommendation for a growing data team
Start with dbt models + dbt Semantic Layer.
A typical architecture:
Sources
↓
Warehouse (Snowflake / BigQuery / Redshift / Databricks)
↓
dbt models
↓
Semantic metrics layer
↓
BI / Notebooks / Reverse ETL / AI agents
Benefits:
For example:
metrics:
- name: monthly_recurring_revenue
type: simple
label: MRR
type_params:
measure:
name: recurring_revenue
The important cultural win is not the syntax—it’s that “revenue” becomes a governed object rather than a SQL snippet copied into 20 dashboards.
I’d lean toward Cube if you expect your metrics to become a product capability, not just an analytics asset.
Examples:
Cube’s architecture is designed around serving metrics through multiple interfaces and handling things like caching and application-facing workloads.
A common pattern is:
dbt = trusted data models
Cube = metrics serving layer
Pick LookML if:
I would be cautious about making LookML your enterprise-wide metric source if you also expect metrics to power applications, APIs, or non-Looker consumers.
You eventually get:
…and nobody knows which is correct.
The hardest part is usually not tooling. It is deciding:
StackFYI BruinFor a typical growing data team starting today, I would choose dbt as the modeling-as-code foundation, then add dbt Semantic Layer first and move toward a dedicated serving layer like Cube only when you have real multi-consumer needs. That keeps the architecture simple while preserving a path to scale.
A few details would change the recommendation: