Errors
{{ counts.error }}
Requires immediate attention
Warnings
{{ counts.warning }}
Should be reviewed
Info
{{ counts.info }}
Suggestions
Models Scanned
{{ stats.model_count or 0 }}
{% if stats.source_count %}{{ stats.source_count }} sources{% endif %}
Dashboard
Lineage
Findings
Sources

Test Results

{% if test_results and test_results.total > 0 %}
{{ test_results.passed }}
Passed
{{ test_results.failed }}
Failed
{{ test_results.skipped }}
Skipped
{{ test_results.pass_rate }}%
Pass Rate
{% if test_results.by_model %}

Tests by Model

{% for model, stats in test_results.by_model.items() %}
{{ model }} {% if stats.passed == 0 and stats.failed == 0 %} 0 tests {% else %} {{ stats.passed }} / {{ stats.failed }} {% endif %}
{% endfor %}
Tip: Run dbt test to execute tests and see actual results
{% endif %} {% else %}

No Test Results Found

Run dbt test to execute tests and generate results.

dbt test
dbt test --store-failures

Results are read from target/run_results.json

{% endif %}

Test Coverage

{% if model_stats and model_stats.test_coverage and model_stats.test_coverage.total > 0 %}
{{ model_stats.test_coverage.percent }}%
Models with Tests {{ model_stats.test_coverage.covered }}
Total Models {{ model_stats.test_coverage.total }}
{% if model_stats.test_coverage.percent < 50 %}
Low Coverage!

Add tests to improve coverage. Example:

columns:
  - name: id
    tests: [unique, not_null]
{% endif %} {% else %}

No Coverage Data

Coverage is calculated from manifest.json

dbt compile
dbt run

Generates target/manifest.json with test data

{% endif %}
{% if model_stats and model_stats.by_materialization %}

Materialization Breakdown

{% for mat, count in model_stats.by_materialization.items() %}
{{ mat }} {{ count }}
{% endfor %}
{% endif %}
{% if lineage and lineage.nodes %}
{{ stats.model_count or 0 }}
Models
{{ stats.source_count or 0 }}
Sources
{{ lineage.edges|length }}
Dependencies
{{ lineage.nodes|length }}
Total Nodes

Interactive Lineage Graph

{% if model_stats and model_stats.by_materialization %}

Materialization Distribution

{% for mat, count in model_stats.by_materialization.items() %}
{{ count }}
{{ mat }}
{% endfor %}
{% endif %}

Model Dependencies Detail

{% for node_id, node in lineage.nodes.items() %} {% if node.resource_type == 'model' %} {% endif %} {% endfor %}
Model Type Materialization Dependencies Description
{{ node.name }} {{ node.resource_type }} {{ node.materialized }} {% for edge in lineage.edges %} {% if edge.to == node_id %} {{ edge.from.split('.')[-1] }} {% endif %} {% endfor %} {{ node.description or '-' }}
{% else %}

No Lineage Data

Run dbt compile to generate manifest.json with lineage information

{% endif %}
{% if not findings %}

No Issues Found

Your dbt project is healthy!

{% else %}

Issues Found ({{ findings|length }})

{% set grouped = {} %} {% for f in findings %} {% set key = (f.details.file if f.details and f.details.file else f.model) %} {% if key not in grouped %}{% set _ = grouped.update({key: []}) %}{% endif %} {% set _ = grouped[key].append(f) %} {% endfor %} {% set sorted_files = grouped.keys()|sort %} {% for file_id in sorted_files %} {% set items = grouped[file_id] %}

{{ file_id }}

{{ items|length }} issue{{ 's' if items|length > 1 else '' }}
{% for finding in items %} {% endfor %}
Level Model Message
{{ finding.level }} {{ finding.model }} {{ finding.message }} {% if finding.details.line %} {{ finding.details.file }}:{{ finding.details.line }} {% endif %} {% if finding.details.fix %}
{{ finding.details.fix }}
{% endif %}
{% endfor %}
{% endif %}
{% if source_freshness %}

Source Freshness

{% for source_id, info in source_freshness.items() %}
{{ info.name }}
{% if info.has_freshness %} Freshness configured {% else %} No freshness defined {% endif %}
{% endfor %}
{% else %}

No Sources Found

No source definitions found in your project

{% endif %}