Overview
The same semantic model, four front doors
Once semantic_models/*.yml and metrics/*.yml exist, the dbt Semantic Layer exposes them through four surfaces:
- MetricFlow CLI —
mf query --metrics revenue --group-by metric_time__week,country. Used in CI, notebooks, ad-hoc. - GraphQL — programmatic, typed; the canonical way for embedded apps and LLM agents.
- JDBC —
jdbc:arrow-flight-sql://...lets Tableau, Hex, Mode and Power BI askSELECT {{metric('revenue')}} BY {{dimension('country')}}like any database. - dbt Cloud Semantic Layer integrations — Looker, Hex, Mode etc. consume the GraphQL endpoint natively.
All four share the same compiler (MetricFlow), so the answer is identical regardless of front door. That property is the entire point: a Tableau executive dashboard, a Streamlit ops tool, and a Slack-bot LLM all see the same revenue because they're calling the same compiler.