diff --git a/metricflow/dataflow/builder/dataflow_plan_builder.py b/metricflow/dataflow/builder/dataflow_plan_builder.py index 89f4acc605..b3bb9d55c6 100644 --- a/metricflow/dataflow/builder/dataflow_plan_builder.py +++ b/metricflow/dataflow/builder/dataflow_plan_builder.py @@ -558,16 +558,17 @@ def _find_measure_recipe( logger.info(f"Found {len(node_to_evaluation)} candidate measure nodes.") if len(node_to_evaluation) > 0: - cost_function = DefaultCostFunction() - - node_with_lowest_cost = min(node_to_evaluation, key=cost_function.calculate_cost) - evaluation = node_to_evaluation[node_with_lowest_cost] + # All source nodes cost 0. Get evaluation with lowest cost. + node_with_lowest_evaluation_cost = min( + node_to_evaluation, key=lambda x: len(node_to_evaluation[x].join_recipes) + ) + evaluation = node_to_evaluation[node_with_lowest_evaluation_cost] logger.info( "Lowest cost node is:\n" + pformat_big_objects( - lowest_cost_node=dataflow_dag_as_text(node_with_lowest_cost), + lowest_cost_node=dataflow_dag_as_text(node_with_lowest_evaluation_cost), evaluation=evaluation, - cost=cost_function.calculate_cost(node_with_lowest_cost), + joins=len(node_to_evaluation[node_with_lowest_evaluation_cost].join_recipes), ) ) @@ -585,14 +586,14 @@ def _find_measure_recipe( ) return MeasureRecipe( - measure_node=node_with_lowest_cost, + measure_node=node_with_lowest_evaluation_cost, required_local_linkable_specs=( evaluation.local_linkable_specs + required_local_entity_specs + required_local_dimension_specs + required_local_time_dimension_specs ), - join_linkable_instances_recipes=node_to_evaluation[node_with_lowest_cost].join_recipes, + join_linkable_instances_recipes=node_to_evaluation[node_with_lowest_evaluation_cost].join_recipes, ) logger.error("No recipe could be constructed.")