models/marts/dag/fct_model_fanout.sql (42 lines of code) (raw):

with all_dag_relationships as ( select * from {{ ref('int_all_dag_relationships') }} where not parent_is_excluded and not child_is_excluded ), -- find all models without children models_without_children as ( select parent from all_dag_relationships where parent_resource_type = 'model' group by 1 having max(distance) = 0 ), -- all parents with more direct children than the threshold for fanout (determined by variable models_fanout_threshold, default 3) -- Note: only counts "leaf children" - direct chilren that are models AND are child-less (are at the right-most-point in the DAG) model_fanout as ( select all_dag_relationships.parent, all_dag_relationships.parent_model_type, all_dag_relationships.child from all_dag_relationships inner join models_without_children on all_dag_relationships.child = models_without_children.parent where all_dag_relationships.distance = 1 and all_dag_relationships.child_resource_type = 'model' group by 1, 2, 3 -- we order the CTE so that listagg returns values correctly sorted for some warehouses order by 1, 2, 3 ), model_fanout_agg as ( select parent, parent_model_type, {{ dbt.listagg( measure = 'child', delimiter_text = "', '", order_by_clause = 'order by child' if target.type in ['snowflake','redshift','duckdb','trino']) }} as leaf_children from model_fanout group by 1, 2 having count(*) >= {{ var('models_fanout_threshold') }} ) select * from model_fanout_agg {{ filter_exceptions() }}