From a5fdc6f007965184f801a140ce4acec322a952bd Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Tue, 7 Apr 2026 23:42:44 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E8=A1=A8=E5=90=8C=E7=8E=AF=E6=AF=94=E5=92=8C?= =?UTF-8?q?=E5=8D=A0=E6=AF=94=E8=AE=A1=E7=AE=97=E5=90=8C=E6=97=B6=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E6=97=B6=E5=8D=A0=E6=AF=94=E8=AE=A1=E7=AE=97=E9=94=99?= =?UTF-8?q?=E8=AF=AF=20#17995?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/table/TableNormalHandler.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java index fedbcfb85a..343368f7ad 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import io.dataease.api.chart.dto.PageInfo; import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.chart.charts.impl.DefaultChartHandler; +import io.dataease.chart.constant.ChartConstants; import io.dataease.constant.DeTypeConstants; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.sql.SQLProvider; @@ -152,18 +153,38 @@ public class TableNormalHandler extends DefaultChartHandler { logger.debug("expanded sql: " + expandedSql); var expandedData = (List) provider.fetchResultField(expandedReq).get("data"); logger.debug("expanded data: " + expandedData); - quickCalc(xAxis, yAxis, Collections.emptyList(), Collections.emptyList(), view.getType(), expandedData); + var tmpAxis = (String) JsonUtil.toJSONString(yAxis); + var yoyAxis = JsonUtil.parseList(tmpAxis, new TypeReference>() { + }); + // 只计算同环比 + yoyAxis.forEach(axis -> { + var calc = axis.getCompareCalc(); + if (ObjectUtils.isEmpty(calc)) { + return; + } + if (Arrays.asList("accumulate", "percent").contains(calc.getType())){ + calc.setType("none"); + } + }); + quickCalc(xAxis, yoyAxis, Collections.emptyList(), Collections.emptyList(), view.getType(), expandedData); var resultData = new ArrayList(); + var expendedDataCache = new HashMap(); for (String[] originDataLine : data) { var originDim = new StringBuilder(); for (int i = 0; i < xAxis.size(); i++) { originDim.append(originDataLine[i]); } + var targetData = expendedDataCache.get(originDim.toString()); + if (targetData != null) { + resultData.add(targetData); + continue; + } for (String[] expandedDataLine : expandedData) { var expandedDim = new StringBuilder(); for (int i = 0; i < xAxis.size(); i++) { expandedDim.append(expandedDataLine[i]); } + expendedDataCache.putIfAbsent(expandedDim.toString(), expandedDataLine); if (StringUtils.equals(originDim, expandedDim)) { resultData.add(expandedDataLine); break; @@ -171,6 +192,19 @@ public class TableNormalHandler extends DefaultChartHandler { } } data = resultData; + // 只计算其他快速计算 + var quickCalcAxis = JsonUtil.parseList(tmpAxis, new TypeReference>() { + }); + quickCalcAxis.forEach(axis -> { + var calc = axis.getCompareCalc(); + if (ObjectUtils.isEmpty(calc)) { + return; + } + if (Arrays.asList(ChartConstants.M_Y).contains(calc.getType())) { + calc.setType("none"); + } + }); + quickCalc(xAxis, quickCalcAxis, Collections.emptyList(), Collections.emptyList(), view.getType(), data); } else { quickCalc(xAxis, yAxis, Collections.emptyList(), Collections.emptyList(), view.getType(), data); }