(fixed)修正复合指标引用同一原子指标,替换时BUG (#1743)

This commit is contained in:
zhaodongsheng
2024-10-08 15:34:43 +08:00
committed by GitHub
parent 569ebfc7b2
commit 806fb64beb
2 changed files with 28 additions and 13 deletions

View File

@@ -274,11 +274,17 @@ public class SqlGenerateUtils {
return modelBizName + UNDERLINE + executorConfig.getInternalMetricNameSuffix();
}
public String generateDerivedMetric(final List<MetricSchemaResp> metricResps,
final Set<String> allFields, final Map<String, Measure> allMeasures,
final List<DimSchemaResp> dimensionResps, final String expression,
final MetricDefineType metricDefineType, AggOption aggOption, Set<String> visitedMetric,
Set<String> measures, Set<String> dimensions) {
public String generateDerivedMetric(
final List<MetricSchemaResp> metricResps,
final Set<String> allFields,
final Map<String, Measure> allMeasures,
final List<DimSchemaResp> dimensionResps,
final String expression,
final MetricDefineType metricDefineType,
AggOption aggOption,
Map<String, String> visitedMetric,
Set<String> measures,
Set<String> dimensions) {
Set<String> fields = SqlSelectHelper.getColumnFromExpr(expression);
if (!CollectionUtils.isEmpty(fields)) {
Map<String, String> replace = new HashMap<>();
@@ -288,15 +294,24 @@ public class SqlGenerateUtils {
Optional<MetricSchemaResp> metricItem = metricResps.stream()
.filter(m -> m.getBizName().equalsIgnoreCase(field)).findFirst();
if (metricItem.isPresent()) {
if (visitedMetric.contains(field)) {
if (visitedMetric.keySet().contains(field)) {
replace.put(field, visitedMetric.get(field));
break;
}
replace.put(field,
generateDerivedMetric(metricResps, allFields, allMeasures,
dimensionResps, getExpr(metricItem.get()),
metricItem.get().getMetricDefineType(), aggOption,
visitedMetric, measures, dimensions));
visitedMetric.add(field);
replace.put(
field,
generateDerivedMetric(
metricResps,
allFields,
allMeasures,
dimensionResps,
getExpr(metricItem.get()),
metricItem.get().getMetricDefineType(),
aggOption,
visitedMetric,
measures,
dimensions));
visitedMetric.put(field, replace.get(field));
}
break;
case MEASURE:

View File

@@ -317,7 +317,7 @@ public class QueryReqConverter {
});
Set<String> deriveDimension = new HashSet<>();
Set<String> deriveMetric = new HashSet<>();
Set<String> visitedMetric = new HashSet<>();
Map<String, String> visitedMetric = new HashMap<>();
if (!CollectionUtils.isEmpty(metricResps)) {
for (MetricResp metricResp : metricResps) {
if (metrics.contains(metricResp.getBizName())) {