Skip to main content
The dbt Semantic Layer already expresses your business in entities, dimensions, measures, and metrics — which maps unusually cleanly onto Malloy. Credible reads your MetricFlow definitions, flattens the measure/metric split into Malloy measures, and — where you connect it — validates each metric against the Semantic Layer’s own query engine.

What Credible Reads

Your semantic models (semantic_models: YAML — entities, dimensions, measures) and metrics (metrics: YAML — simple, ratio, derived, cumulative). The agent parses that project YAML directly — the fullest-fidelity input, since the YAML carries expr, filter, and agg_time_dimension details the compiled APIs abstract away. Connecting the official dbt MCP server (get_metrics, get_dimensions, get_entities, execute_sql) or the Semantic Layer APIs (GraphQL / JDBC / Python) is optional and adds live metric validation.

What Comes Across

The everyday modeling carries over. Here’s how the bigger pieces land — and where they get better:

The Migration Flow

Credible reads the semantic models and metrics, translates entities to keys/joins and measures/metrics to Malloy measures, enriches with #(doc)/#(index) tags, and — where you connect it — validates by querying each metric through the Semantic Layer API at the same grain and diffing the results — MetricFlow owns SQL generation, so its result is the canonical number to match.

What Credible Handles

  • The measure/metric split flattens into one set of Malloy measures. A simple metric is often just a rename of its measure — Credible won’t create two Malloy fields where one belongs.
  • metric_time and the time spine have no Malloy equivalent. Credible chooses the concrete date field per view and truncates with .month/.day; cumulative metrics are rebuilt as view-level window calculations.
  • Derived and ratio metrics reference other metrics, not columns. Credible resolves the dependency chain (metric → metric → measure → column) before writing the Malloy expression.

Before & After

dbt semantic model and metrics:
The two simple metrics collapse into their measures rather than duplicating them; completion_rate becomes a straight ratio; and the Jinja filter becomes a { where: … } on the measure. More than a reformat. Your metrics become directly queryable and composable — not just a metrics API — AI-discoverable through the Context Engine, and deliverable to every surface. See what you gain →

Next Steps

Migration Overview

The method behind every migration

Metadata & Discovery

Tune your migrated model for AI retrieval