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
dbt dbt Project Evaluator feedback — Remediation Plan
https://github.com/dbt-labs/dbt-project-evaluator
Warnings
1. Sources without freshness
1 source flagged:
raw.portsNo
freshness:block defined. Addwarn_afteranderror_afterthresholds tosources.yml.2. Model naming conventions
7 models flagged. The evaluator requires
fct_(notfact_) for mart fact models.charge_point_span...charge_dim_orfct_fact_charge_attemptsfact_fct_fact_downtime_dailyfact_fct_fact_interval_datafact_fct_fact_location_cap...fact_fct_fact_uptimefact_fct_fact_visitsfact_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_portsint_portsfans out directly to multiple mart-level leaf children (dim_charge_pointsand 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):
dim_portsfact_uptimefact_downtime_dailystg_ocpp_logsfact_interval_dataint_meter_valuesA 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:
dim_datesstg_ocpp_logsunique+not_nullon the PKBoth need
uniqueandnot_nulltests 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.yml6a.
sum_booleanaggregation removed — HIGH prioritysum_booleanwas removed from MetricFlow. 6 measures need to be rewritten toagg: sumwith an explicit cast.visitsvisit_success_countagg: sum+expr: cast(is_successful as integer)visitstroubled_success_countagg: sum+expr: cast(case when ... then true else false end as integer)visitscharge_attempt_success_countvisitsfirst_attempt_success_countcharge_attemptsattempt_success_ratedriversknown_drivers_countagg: sum+expr: cast(is_known_driver as integer)6b. Ratio metric
numerator/denominatorformat — HIGH priority4 ratio metrics reference other metric names in
type_params. The new spec expects measure names:Affected metrics:
average_attempts_per_visit,first_attempt_success_rate,troubled_success_rate,failed_rate.6c. Complex SQL
exprinis_successfuldimension — MEDIUM priorityIn the
charge_attemptssemantic model, theis_successfuldimension has a full multi-clause SQL predicate as itsexpr. Fusion's stricter type inference may reject this. If so, move the logic intofact_charge_attemptsas a computed boolean column and simplify the dimensionexprto reference that column directly.6d.
defaults.agg_time_dimensionblock syntax — LOW priorityThe
defaults:block is present onvisits,charge_attempts,drivers, anduptime. 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_coverageand add at minimum a PK test.