Analytics Engineering With Lineage Your Whole Team Can Read
Your dbt project knows its own DAG, but the rest of the team cannot see which dashboard a model feeds. Datatrail draws the line from raw source through every model to the report that breaks.
Read-only connection. Datatrail never moves or mutates your data.
In short
Analytics engineering is the practice of building reliable, modeled data with software discipline, version control, testing, and documentation, usually in dbt. Datatrail connects to your warehouse read-only and reads your dbt models and exposures alongside the actual query logs, so every column traces from raw source through each transformation to the dashboard it powers, giving analytics engineers and the stakeholders they support one lineage map everyone can read.
Why it fits
Analytics engineers and the analysts and stakeholders who depend on their models being right.
dbt models and exposures
Datatrail reads your dbt models and exposures, then confirms them against real query logs so the lineage matches what the warehouse actually runs.
Trace a number to its source
When a stakeholder asks why a figure changed, follow the column back through every model to the raw table in one click.
Readable by non-engineers
Lineage is drawn as a map an analyst or PM can follow, not a raw DAG, so impact conversations stop needing an engineer in the room.
Why the dbt DAG is not the whole lineage graph
Every analytics engineer already has a lineage graph, and it is one of the best things about dbt. dbt docs renders the DAG, dbt run -s model+ selects downstream, and within the project the dependency picture is exact because it is derived from ref() rather than guessed.
The limitation is the project boundary, and it cuts at both ends. Upstream, dbt knows a source exists because you declared it in a YAML file, but it knows nothing about how that source got populated, whether an ingestion tool or a stored procedure or somebody's scheduled query wrote it. Downstream, dbt stops at the model. Unless every dashboard is declared as an exposure and kept current by hand, the DAG cannot tell you which report breaks when a model changes.
That is the gap that produces the familiar conversation: a model is refactored, tests pass, dbt is happy, and two days later somebody in finance says a number looks wrong. The graph was right about everything it could see. Column-level detail matters here too, because a model-level DAG says model B depends on model A, while the actual question is usually whether it depends on the specific column you are about to change.
Tracing a number back to its source without reading SQL
The recurring request analytics engineers get is not a bug report. It is "where does this number come from?", asked by somebody who needs an answer before a meeting.
Answered by hand, it means opening the dashboard, finding the query, reading the model, following each ref() back a layer, and repeating until you reach raw. Twenty minutes if the project is clean, an afternoon if there is a view in the warehouse nobody put in dbt. Answered from a lineage graph built out of query history, it is a click, because the path already exists.
The second-order benefit is bigger than the time saved. When stakeholders can follow the path themselves, they stop routing every definitional question through the analytics team, and the conversation moves from "is this number right" to "is this the right definition". That is a much better use of an analytics engineer.
Reviewing a model change with the blast radius attached
The most useful moment for lineage in analytics engineering is the pull request. Renaming a column, changing a join grain, deprecating a staging model: each is safe inside the project and each can break something outside it.
Datatrail reads your dbt models and exposures and confirms them against the queries the warehouse actually ran, then computes downstream impact at column level: every model, exposure and dashboard that reads the field you are changing, by name, before the merge. Ad hoc consumers show up too, which matters because the dashboards that break loudest are usually the ones nobody remembered to declare as exposures.
If you are mapping out how the pieces fit, our guides to visualizing dbt lineage and the dbt dependency graph cover the dbt-native side, and data quality dimensions and metrics covers how to score the models once they are mapped. The same graph is what pages the data engineer who owns the pipeline when a source stops loading.
Questions people ask
Analytics teams, answered
What is analytics engineering?
Analytics engineering is the practice of transforming raw warehouse data into tested, documented, version-controlled models that analysts and business users can trust. It applies software engineering discipline, source control, code review, automated testing and CI, to the modeling layer, most commonly using dbt. The analytics engineer sits between the data engineer who lands the raw data and the analyst who consumes the modeled tables.
What is the difference between a data engineer and an analytics engineer?
A data engineer owns the infrastructure and the movement of data: ingestion pipelines, orchestration, the warehouse itself, and reliability of the platform. An analytics engineer owns what happens to the data once it has landed: the transformation layer, business logic, metric definitions, testing and documentation. The rough split is that data engineers work in Python and infrastructure, analytics engineers work in SQL and dbt, and both care about lineage for different reasons.
Does dbt already give me data lineage?
Yes, within the project. The dbt DAG is derived from ref() and source() calls, so it is exact for model-to-model dependencies, and dbt docs renders it. What it does not cover is anything outside the project: how source tables got populated, views created directly in the warehouse, ad hoc queries, and BI dashboards unless every one is declared as an exposure and kept up to date manually. It is also model-level rather than column-level by default.
How do I trace a dashboard number back to its source?
Start from the dashboard query, identify the table and column it reads, then follow that column backward through each transformation to the raw source. Done manually it means reading SQL layer by layer, which takes twenty minutes on a clean dbt project and considerably longer when views exist outside the project. A column-level lineage graph built from query history collapses that to a single traversal, because the path from raw column to dashboard field has already been computed.
What tools do analytics engineers use?
The common stack is a cloud warehouse (Snowflake, BigQuery, Databricks or Redshift), dbt for transformation, Git for version control with CI running tests on pull requests, and a BI tool such as Looker, Tableau or Power BI. Around that sit ingestion tools like Fivetran or Airbyte, an orchestrator such as Airflow or Dagster, and increasingly a lineage or observability layer that spans the whole path rather than stopping at the dbt project boundary.
More use cases
Related features
Map your lineage, end to end
Connect your warehouse read-only and see your lineage map in minutes. Datatrail never moves or mutates your data.