Skip to content

dbt Project Evaluator feedback #127

Description

@daria-sukhareva

dbt dbt Project Evaluator feedback — Remediation Plan

https://github.com/dbt-labs/dbt-project-evaluator


Warnings

1. Sources without freshness

1 source flagged: raw.ports

No freshness: block defined. Add warn_after and error_after thresholds to sources.yml.


2. Model naming conventions

7 models flagged. The evaluator requires fct_ (not fact_) for mart fact models.

Model Current prefix Required prefix
charge_point_span... charge_ dim_ or fct_
fact_charge_attempts fact_ fct_
fact_downtime_daily fact_ fct_
fact_interval_data fact_ fct_
fact_location_cap... fact_ fct_
fact_uptime fact_ fct_
fact_visits fact_ fct_

Six models need a fact_fct_ rename. One model (charge_point_span...) needs a full prefix rethink — determine if it is a fact or dimension, then rename accordingly.

Renaming is disruptive: downstream refs, semantic models, and Power BI connections must all be updated.


3. Model fanout

1 intermediate flagged: int_ports

int_ports fans out directly to multiple mart-level leaf children (dim_charge_points and others) without an intermediate consolidation step. Consider whether the fanout is intentional or whether a bridging intermediate model would improve clarity.


4. Rejoining of upstream concepts

2 cases flagged (both loop-independent — usually safe but worth reviewing):

Parent Child Shared via
dim_ports fact_uptime fact_downtime_daily
stg_ocpp_logs fact_interval_data int_meter_values

A model and its ancestor are both joined into the same downstream model via different paths. Verify there is no redundant join or unintended denormalization.


5. Missing primary key tests

2 models flagged:

Model Layer Issue
dim_dates marts No tests on grain columns at all
stg_ocpp_logs staging Has 4 tests but none are unique + not_null on the PK

Both need unique and not_null tests on their primary key columns per project standards.


6. Semantic layer spec migration (dbt Fusion / 2.0)

When dbt Fusion alpha was tested, it emitted a warning about an outdated semantic model schema. This does not appear on the current dbt-core 1.11.11 build. It will resurface if the project migrates to Fusion or dbt 2.0.

File: models/semantic/semantic_models.yml

6a. sum_boolean aggregation removed — HIGH priority

sum_boolean was removed from MetricFlow. 6 measures need to be rewritten to agg: sum with an explicit cast.

Semantic model Measure Fix
visits visit_success_count agg: sum + expr: cast(is_successful as integer)
visits troubled_success_count agg: sum + expr: cast(case when ... then true else false end as integer)
visits charge_attempt_success_count same pattern
visits first_attempt_success_count same pattern
charge_attempts attempt_success_rate same pattern
drivers known_drivers_count agg: sum + expr: cast(is_known_driver as integer)

6b. Ratio metric numerator/denominator format — HIGH priority

4 ratio metrics reference other metric names in type_params. The new spec expects measure names:

# current — references a metric name
type_params:
  numerator: total_charge_attempts
  denominator: total_visits

# dbt 2.0 — references a measure name
type_params:
  numerator:
    name: charge_attempts_count
  denominator:
    name: visits_count

Affected metrics: average_attempts_per_visit, first_attempt_success_rate, troubled_success_rate, failed_rate.

6c. Complex SQL expr in is_successful dimension — MEDIUM priority

In the charge_attempts semantic model, the is_successful dimension has a full multi-clause SQL predicate as its expr. Fusion's stricter type inference may reject this. If so, move the logic into fact_charge_attempts as a computed boolean column and simplify the dimension expr to reference that column directly.

6d. defaults.agg_time_dimension block syntax — LOW priority

The defaults: block is present on visits, charge_attempts, drivers, and uptime. Key name likely stays the same but verify the nesting structure against the Fusion YAML spec before upgrading.


7. Test coverage below 100%

Current coverage: 95.83% (23 of 24 models have at least one test)

One model has zero tests. Identify it via fct_test_coverage and add at minimum a PK test.

-- find the untested model
select resource_name
from fct_test_coverage
where test_count = 0

Metadata

Metadata

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions