Data as of Aug 25, 2026 · Based on 336 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 52% 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 52% of answers
Named in 43% of answers
If your goal is **“manage our data models as code”**—meaning version control, PR reviews, CI/CD, lineage, reusable definitions, and governed metrics—the best choice is usually **not just a semantic layer**. It depends on where you want the source of truth for business logic to live and how metrics will be consumed.…
If your goal is “manage our data models as code”—meaning version control, PR reviews, CI/CD, lineage, reusable definitions, and governed metrics—the best choice is usually not just a semantic layer. It depends on where you want the source of truth for business logic to live and how metrics will be consumed.
For a growing data team, I’d evaluate these patterns:
| Situation | Best fit | Why |
|---|---|---|
| Your transformations already live in dbt | dbt Semantic Layer (MetricFlow) | Metrics live beside models, tests, docs, and deployment workflows |
| You need metrics served to applications, APIs, embedded analytics, or AI agents | Cube | Strong headless semantic layer with APIs, caching, and pre-aggregations |
| Your company is standardized on Looker | LookML | Mature semantic modeling inside the BI ecosystem |
| You want open-source BI tightly coupled to dbt | Lightdash | Uses dbt metadata and keeps governance close to code |
StackFYI PipeCode## My default recommendation for a growing analytics engineering team
Use dbt models as your canonical data model layer:
This gives you a Git-based workflow where changes to definitions are reviewed like software.
The moment you have disagreements like:
you need metric definitions outside individual dashboards.
For a dbt-centered team, the natural first choice is dbt Semantic Layer / MetricFlow because it keeps metric definitions in the same workflow as your models.
I’d consider Cube when you need:
Cube is more of a metrics serving layer, whereas dbt Semantic Layer is primarily a governed metric definition layer.
Sources
↓
dbt models (Git + CI/CD)
↓
Semantic metrics layer
↓
BI / notebooks / apps / AI tools
A common evolution path:
Early team
Growing team
Larger platform team
Querio cube.dev## What I would avoid
If you already use dbt + Snowflake/BigQuery/Databricks + a BI tool, I would start with dbt Semantic Layer and only introduce Cube or another serving layer when you have a clear latency, API, or embedded analytics need.
The key questions that would change the recommendation are:
For a growing data team managing data models as code, the "best" semantic layer or metrics store comes down to `your team's existing workflow and how you plan to consume those metrics` (BI tools, embedded apps, or AI…
For a growing data team managing data models as code, the "best" semantic layer or metrics store comes down to your team's existing workflow and how you plan to consume those metrics (BI tools, embedded apps, or AI agents).
The top options on the market align with distinct operational styles:
To help narrow down the exact fit, tell me:
If your goal is **“data models and metric definitions as code, reviewed in Git, and reusable across the team,”** I’d narrow the field to **dbt Semantic Layer / MetricFlow** and **Cube**. ### My default recommendation: dbt Semantic Layer If your team already uses dbt, I’d start here. dbt lets you define semantic models…
If your goal is “data models and metric definitions as code, reviewed in Git, and reusable across the team,” I’d narrow the field to dbt Semantic Layer / MetricFlow and Cube.
If your team already uses dbt, I’d start here. dbt lets you define semantic models and metrics in version-controlled YAML alongside your transformations, tests, lineage, and documentation. MetricFlow is the underlying query engine.
That gives you a clean ownership model:
warehouse → dbt models → semantic metrics → BI / notebooks / AI
For example, you might define net_revenue, active_customer, and gross_retention once, with their entities, dimensions, filters, and time semantics, rather than recreating them in every dashboard.
The big advantage for a growing data team is workflow: metric changes become code changes—PR, review, tests, deployment—rather than something an analyst quietly changes inside a BI tool.
I'd pick Cube if your semantic layer needs to become a serving infrastructure layer, not merely a governed metrics definition.
Cube Core lets you define metrics, dimensions, joins, and access rules in code and expose the same model through SQL, REST, and GraphQL, with caching designed for high-concurrency use.
That's particularly compelling if you expect:
In that world, a very good architecture is dbt for persistent data modeling + Cube for query-time semantic modeling and serving.
| Your situation | I'd choose |
|---|---|
| Already standardized on dbt | dbt Semantic Layer |
| Mostly internal BI and analytics | dbt Semantic Layer |
| Strong “everything as code” culture | dbt Semantic Layer |
| Need metrics exposed to applications | Cube |
| Embedded/customer-facing analytics | Cube |
| Multiple downstream consumers + high concurrency | Cube |
| Want open-source semantic infrastructure | Cube Core |
| Want dbt-native, open-source BI on top | Lightdash |
One important distinction: MetricFlow isn't really a third competitor you need to buy. It's the semantic/query engine underlying dbt's approach, and it can compile metric definitions into reusable SQL.
I'd start with:
dbt + dbt Semantic Layer + your existing BI tool
and establish a rule that business-critical metrics have one canonical definition in code.
Don't introduce Cube just because it's technically more capable. Add it when you have a concrete second consumption pattern—e.g. “the same metric needs to power our dashboard and our product API.” That's when the serving/caching capabilities become valuable.
So, in one sentence:
For a growing analytics team that primarily wants data models and metrics managed as code, dbt Semantic Layer is my default; choose Cube when the semantic layer needs to serve applications, embedded analytics, AI, or high-concurrency workloads. If you tell me your warehouse (Snowflake/BigQuery/Databricks/etc.), BI tool, team size, and whether you have product/embedded analytics, I can give you a much more specific architecture recommendation.
Managing data models as code for a growing data team usually boils down to two heavyweight leaders in the modern data stack, depending entirely on where your workflow starts and how you plan to consume those metrics.[](https://getbruin.com/blog/semantic-layer-tools/)…
Managing data models as code for a growing data team usually boils down to two heavyweight leaders in the modern data stack, depending entirely on where your workflow starts and how you plan to consume those metrics.
The industry consensus centers on two primary contenders for a code-first approach:
Key Comparison at a Glance
| Feature | dbt Semantic Layer (MetricFlow) | Cube |
|---|---|---|
| Workflow | Code-first via dbt YAML files inside your existing transformation pipeline. | Code-first via Cube config files (YAML/JS/TypeScript) in a dedicated repo or service. |
| Primary Consumer | BI tools, standard reporting, and internal data consumers via integrations. | High-concurrency web apps, custom user-facing analytics, APIs, and AI agents. |
| Performance / Caching | Relies entirely on your cloud data warehouse (Snowflake, BigQuery, etc.) for query performance. | Features a built-in pre-aggregations and caching engine for sub-second responses. |
| Best For | Analytics engineering teams wanting unified metric definitions inside dbt. | Teams building customer-facing data products or requiring heavy API distribution. |
How to Choose for a Growing Team
To help narrow this down, tell me:
Managing your data models and metrics as code for a growing team means you want version control (Git), CI/CD validation, and a single source of truth that feeds your BI tools and AI assistants.[](https://www.getdbt.com/product/semantic-layer)…
Managing your data models and metrics as code for a growing team means you want version control (Git), CI/CD validation, and a single source of truth that feeds your BI tools and AI assistants.
The right choice depends heavily on your team's existing stack and primary consumption patterns (BI vs. application APIs vs. AI agents).
Top Contenders for "Metrics/Semantic as Code"
Quick Decision Framework
To help narrow this down, tell me:
If your goal is specifically **“data models and metrics as code, version-controlled in Git, with a growing team”**, I’d start with **dbt Semantic Layer / MetricFlow** unless you have a strong need for an independent metrics-serving API. ### My shortlist | Option | Best fit | Why I’d choose it | Main drawback |
If your goal is specifically “data models and metrics as code, version-controlled in Git, with a growing team”, I’d start with dbt Semantic Layer / MetricFlow unless you have a strong need for an independent metrics-serving API.
| Option | Best fit | Why I’d choose it | Main drawback |
|---|---|---|---|
| dbt Semantic Layer / MetricFlow | dbt-centric teams | Metrics live alongside models, tests, docs, and PRs | More dependent on the dbt ecosystem for serving |
| Cube | Metrics consumed by many apps/BI/AI clients | Excellent API/serving layer, caching, pre-aggregations | Adds another modeling/serving system |
| Lightdash | dbt + open-source BI | Very natural Git/dbt workflow | More BI-oriented than a general metrics-serving layer |
| AtScale | Large enterprise / legacy BI | Strong governed OLAP and enterprise BI interoperability | Heavier and generally harder to justify for a growing team |
| Snowflake/Databricks native semantics | Single-warehouse organizations | Governance and execution are tightly integrated | Creates more platform coupling |
The important distinction is definition vs. serving. dbt's approach puts semantic definitions next to your transformations; Cube is more of a standalone semantic and serving layer with APIs, caching and pre-aggregation.
1. Make dbt the source of truth for durable data models.
Put things like:
models/
staging/
intermediate/
marts/
metrics/
revenue
active_customers
retention
pipeline
under Git/PR review. The important principle is that a metric shouldn't secretly live inside a Tableau workbook or someone's SQL notebook.
2. Use MetricFlow/dbt Semantic Layer for canonical metrics.
This is particularly attractive if you're already standardized on dbt. MetricFlow makes entities, measures, dimensions, time semantics, and metric definitions explicit rather than hiding them in dashboard SQL.
3. Add Cube only if serving becomes the problem.
I'd bring in Cube when you need the same governed metrics exposed to embedded analytics, applications, multiple BI tools, APIs, or high-concurrency workloads. That's where its caching/pre-aggregation and API-first architecture become meaningful rather than just additional infrastructure.
Sources
↓
dbt
├── staging / marts
├── tests
├── lineage
└── semantic definitions
↓
MetricFlow / dbt Semantic Layer
↓
┌──────┼─────────┐
↓ ↓ ↓
BI Notebooks AI
│
└── Cube (optional)
↓
APIs / Embedded Analytics
That gives you a very useful separation:
dbt = “What is the data?”
Semantic layer = “What does the business metric mean?”
Cube = “How do we serve that metric efficiently everywhere?”
Don't create a semantic layer just because the team is growing. Establish metric ownership and review rules first. A tool won't resolve whether “revenue,” “active customer,” or “churn” has multiple legitimate definitions.
For a typical 5–30 person data organization, my default would be:
dbt + MetricFlow/dbt Semantic Layer + your existing BI tool. Add Cube later if you develop an API/embedded/high-performance serving requirement.
That's the lowest-complexity path to genuinely metrics-as-code without creating a second modeling system prematurely. Current 2026 comparisons similarly position dbt as the natural choice for dbt-centered teams and Cube as the stronger choice when serving metrics to applications and many consumers becomes important.
If you tell me your warehouse (Snowflake/BigQuery/Databricks/etc.), BI tool, dbt Core vs Cloud, and approximate team size, I can narrow this down to a concrete architecture and migration path.
Choosing the "best" semantic layer or metrics store depends heavily on your existing data stack and how you plan to consume those metrics (BI dashboards, AI/LLM agents, or embedded application APIs). Because your goal is managing models as code, you want a solution that lives in Git, supports CI/CD, and prevents…
Choosing the "best" semantic layer or metrics store depends heavily on your existing data stack and how you plan to consume those metrics (BI dashboards, AI/LLM agents, or embedded application APIs). Because your goal is managing models as code, you want a solution that lives in Git, supports CI/CD, and prevents metric drift.
The top choices for a growing data team sort neatly into distinct architectural use cases:
To help narrow down the ideal fit, tell me:
If your priority is **“data models and metrics as code, with Git/CI/review as the operating model,”** I’d shortlist **dbt Semantic Layer/MetricFlow** and **Cube**, with the choice depending on where you expect the semantic layer to live. | | **dbt Semantic Layer / MetricFlow** | **Cube** | |---|---|---|
If your priority is “data models and metrics as code, with Git/CI/review as the operating model,” I’d shortlist dbt Semantic Layer/MetricFlow and Cube, with the choice depending on where you expect the semantic layer to live.
| dbt Semantic Layer / MetricFlow | Cube | |
|---|---|---|
| Code-first modeling | Excellent — YAML, Git-native | Excellent — YAML/JS, Git-native |
| Best fit | dbt-centric data teams | Teams needing a reusable semantic service |
| Metrics | Strong | Strong |
| Joins / semantic graph | Strong | Strong |
| BI consumption | Excellent, especially with dbt ecosystem | Excellent |
| APIs / applications | Good and expanding | Excellent — SQL, REST, GraphQL |
| Embedded analytics | Less central | Excellent |
| Caching / pre-aggregation | Available through MetricFlow | Very strong |
| AI agents | MCP + governed metrics | MCP + governed semantic layer |
| Operational complexity | Lower if you're already on dbt | Higher, but more capable as a standalone layer |
Start with dbt Semantic Layer if your team is already heavily invested in dbt. MetricFlow lets you define and maintain metric logic in code and compiles metric requests into reusable SQL. dbt's current Semantic Layer also exposes governed metrics to BI, applications, notebooks, and AI systems.
I'd choose Cube instead if you want the semantic layer to become a platform consumed by lots of things, rather than primarily an extension of your transformation workflow. Cube's models are code-first, and it provides a standalone semantic runtime with SQL, REST, GraphQL and MCP interfaces, centralized access control, and pre-aggregation/caching.
Sources
↓
Warehouse
↓
dbt transformations
↓
Semantic models / metrics as code
↓
┌───────────────┬───────────────┬───────────────┐
│ BI │ Applications │ AI / Agents │
│ dashboards │ APIs │ MCP │
└───────────────┴───────────────┴───────────────┘
The important architectural distinction is: don't make your BI tool the source of truth for metrics. Put definitions such as revenue, active_customer, net_retention, and conversion_rate in a version-controlled semantic layer, then have downstream tools consume them. That's what prevents the classic situation where Finance, Product, and Sales each have a slightly different definition of “revenue.”
One nuance: MetricFlow is the underlying open-source semantic/query engine; dbt Semantic Layer is the broader managed product around it. So I wouldn't evaluate “MetricFlow vs. Cube” as though they're exactly equivalent products.
My default choice for a growing modern data team: dbt + dbt Semantic Layer if analytics/BI is the main destination; dbt + Cube if you expect the semantic layer to become infrastructure for BI, applications, and AI. The latter is the more flexible long-term architecture, while the former is generally simpler to operate if you're already a dbt shop.
If your priority is **“data models and metrics as code, with Git, CI, code review, and room to grow,”** I’d shortlist **dbt Semantic Layer / MetricFlow, Cube, and Lightdash**. My default choice depends mainly on how broadly you expect the semantic layer to be consumed. ### My recommendation | Option | Best fit | “As…
If your priority is “data models and metrics as code, with Git, CI, code review, and room to grow,” I’d shortlist dbt Semantic Layer / MetricFlow, Cube, and Lightdash. My default choice depends mainly on how broadly you expect the semantic layer to be consumed.
| Option | Best fit | “As code” | BI-agnostic | APIs / embedded | Caching |
|---|---|---|---|---|---|
| dbt Semantic Layer / MetricFlow | dbt-centric data teams | ★★★★★ | ★★★★ | ★★★★ | ★★★ |
| Cube | Growing teams with many consumers | ★★★★★ | ★★★★★ | ★★★★★ | ★★★★★ |
| Lightdash | dbt + open-source BI | ★★★★★ | ★★★ | ★★★ | ★★★ |
| LookML | Teams standardized on Looker | ★★★★★ | ★ | ★★ | ★★★★ |
This is the most natural architecture if your models, tests, lineage and documentation already live in dbt. MetricFlow lets you define semantic models and metrics alongside those models, with the semantic layer generating queries dynamically.
I'd pick it when:
The downside is that you're making dbt's ecosystem a more central dependency.
This is my strongest recommendation for a growing team that wants to future-proof the architecture.
Cube Core is explicitly code-first: models, configuration and access policies can live in version control, with CI/code review and isolated environments. It also provides a serving layer above the warehouse, including SQL, REST, GraphQL and MCP interfaces, plus caching and access control.
That becomes valuable when the same metric needs to power:
warehouse → BI → dashboards → embedded analytics → internal applications → AI agents
rather than just:
warehouse → BI
In other words, I'd use dbt for durable transformation/modeling and Cube for the semantic/serving layer. That's also the architecture Cube describes for dbt teams.
Lightdash is particularly attractive if you want metrics defined in YAML/Git and immediately exposed through an analytics UI. Its semantic layer defines metrics, dimensions and tables as code, including definitions directly within a dbt project.
I'd choose it for a team saying:
“We want dbt + Git-managed metrics + self-service analytics, and we don't want to assemble a bunch of separate products.”
It's less compelling than Cube if your eventual goal is a semantic layer serving lots of applications and interfaces outside BI.
For a growing team, I'd aim for:
Git
│
┌────────▼────────┐
│ dbt │
│ transformations │
│ tests + lineage │
└────────┬────────┘
│
warehouse models
│
┌────────▼────────┐
│ Semantic layer │
│ │
│ entities │
│ dimensions │
│ metrics │
│ relationships │
│ access rules │
└───────┬─────────┘
┌─────┼──────┬────────┐
▼ ▼ ▼ ▼
BI Notebooks Apps AI
The important architectural distinction is: don't put your canonical business metric definitions inside the BI tool if you expect multiple consumers. Put them in a version-controlled semantic layer upstream of those consumers.
That's increasingly important as AI enters the picture: an agent querying raw warehouse tables can produce a different definition of “revenue” from your dashboard, whereas a governed semantic layer gives all consumers the same definitions and access rules.
If you're already on dbt: start with dbt Semantic Layer/MetricFlow unless you have a clear need for a separate serving layer.
If you're building a strategic, company-wide metrics platform: I'd lean Cube + dbt.
If you want an open-source, dbt-native analytics experience: Lightdash is very compelling.
The key question I'd use to make the decision isn't “which semantic layer has the best metric syntax?” It's “how many different things will consume these metrics over the next 2–3 years?” Once the answer is BI + applications + AI + embedded analytics, the case for an independent serving layer like Cube gets considerably stronger.
For a growing data team focused on managing data models as code (Analytics Engineering), the **[dbt Semantic Layer](https://www.getdbt.com/blog/semantic-layer-introduction)** powered by **MetricFlow** is the leading choice if you already use dbt for transformations, while…
For a growing data team focused on managing data models as code (Analytics Engineering), the dbt Semantic Layer powered by MetricFlow is the leading choice if you already use dbt for transformations, while Cube is the premier headless, tool-agnostic alternative if you serve a diverse stack of applications, multiple BI tools, and AI agents. Choosing the right solution depends heavily on your team's existing infrastructure, desired governance model, and where your data is processed.
Top Options for Data-As-Code Teams
To help narrow down the exact fit, tell me: