mirror of
https://github.com/dataease/dataease.git
synced 2026-05-21 12:45:37 +08:00
feat(图表): 组合图副值轴支持设置同环比
This commit is contained in:
@@ -3,7 +3,6 @@ package io.dataease.chart.charts.impl.mix;
|
||||
import io.dataease.api.dataset.union.DatasetGroupInfoDTO;
|
||||
import io.dataease.chart.charts.impl.YoyChartHandler;
|
||||
import io.dataease.chart.utils.ChartDataBuild;
|
||||
import io.dataease.engine.utils.Utils;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceRequest;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.extensions.datasource.model.SQLMeta;
|
||||
@@ -81,7 +80,6 @@ public class MixHandler extends YoyChartHandler {
|
||||
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
|
||||
dsList.add(next.getValue().getType());
|
||||
}
|
||||
boolean needOrder = Utils.isNeedOrder(dsList);
|
||||
boolean crossDs = ((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross();
|
||||
var leftResult = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
|
||||
var dynamicAssistFields = getDynamicAssistFields(view);
|
||||
@@ -120,43 +118,43 @@ public class MixHandler extends YoyChartHandler {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
AxisFormatResult formatResult2 = new AxisFormatResult();
|
||||
AxisFormatResult rightFormatResult = new AxisFormatResult();
|
||||
var axisMap = new HashMap<ChartAxis, List<ChartViewFieldDTO>>();
|
||||
axisMap.put(ChartAxis.extLabel, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extLabel)));
|
||||
axisMap.put(ChartAxis.extTooltip, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extTooltip)));
|
||||
axisMap.put(ChartAxis.drill, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.drill)));
|
||||
formatResult2.setAxisMap(axisMap);
|
||||
formatResult2.setContext(formatResult.getContext());
|
||||
rightFormatResult.setAxisMap(axisMap);
|
||||
rightFormatResult.setContext(formatResult.getContext());
|
||||
|
||||
// 计算右轴,包含 xAxis,xAxisExt,yAxisExt,需要去掉 group 和 stack
|
||||
var xAxis = new ArrayList<>(view.getXAxis());
|
||||
var extBubble = new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extBubble));
|
||||
xAxis.addAll(extBubble);
|
||||
var dillAxis = (ArrayList<ChartViewFieldDTO>) formatResult.getContext().get("dillAxis");
|
||||
var drillAxis = (ArrayList<ChartViewFieldDTO>) formatResult.getContext().get("drillAxis");
|
||||
var fields = xAxis.stream().map(ChartViewFieldDTO::getId).collect(Collectors.toSet());
|
||||
for (ChartViewFieldDTO dillAxi : dillAxis) {
|
||||
if (!fields.contains(dillAxi.getId())) {
|
||||
xAxis.add(dillAxi);
|
||||
for (ChartViewFieldDTO axis : drillAxis) {
|
||||
if (!fields.contains(axis.getId())) {
|
||||
xAxis.add(axis);
|
||||
}
|
||||
}
|
||||
formatResult2.getAxisMap().put(ChartAxis.xAxis, xAxis);
|
||||
formatResult2.getAxisMap().put(ChartAxis.xAxisExt, extBubble);
|
||||
rightFormatResult.getAxisMap().put(ChartAxis.xAxis, xAxis);
|
||||
rightFormatResult.getAxisMap().put(ChartAxis.xAxisExt, extBubble);
|
||||
var yAxisExt = new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.yAxisExt));
|
||||
formatResult2.getAxisMap().put(ChartAxis.yAxis, yAxisExt);
|
||||
formatResult2.getContext().remove("yoyFiltered");
|
||||
formatResult2.getContext().put("isRight", "isRight");
|
||||
rightFormatResult.getAxisMap().put(ChartAxis.yAxis, yAxisExt);
|
||||
rightFormatResult.getContext().remove("yoyFiltered");
|
||||
rightFormatResult.getContext().put("isRight", "isRight");
|
||||
|
||||
|
||||
formatResult.getContext().put("subAxisMap", axisMap);
|
||||
|
||||
// 右轴重新检测同环比过滤
|
||||
customFilter(view, filterResult.getFilterList(), formatResult2);
|
||||
var rightResult = (T) super.calcChartResult(view, formatResult2, filterResult, sqlMap, sqlMeta, provider);
|
||||
customFilter(view, filterResult.getFilterList(), rightFormatResult);
|
||||
var rightResult = (T) super.calcChartResult(view, rightFormatResult, filterResult, sqlMap, sqlMeta, provider);
|
||||
try {
|
||||
//如果有同环比过滤,应该用原始sql
|
||||
var originSql = rightResult.getQuerySql();
|
||||
var rightAssistFields = dynamicAssistFields.stream().filter(x -> StringUtils.equalsAnyIgnoreCase(x.getYAxisType(), "right")).toList();
|
||||
var yAxis = formatResult2.getAxisMap().get(ChartAxis.yAxis);
|
||||
var yAxis = rightFormatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var assistFields = getAssistFields(rightAssistFields, yAxis);
|
||||
if (CollectionUtils.isNotEmpty(assistFields)) {
|
||||
var req = new DatasourceRequest();
|
||||
|
||||
@@ -110,7 +110,7 @@ public class ChartDataManage {
|
||||
DEException.throwException(ResultCode.DATA_IS_WRONG.code(), Translator.get("i18n_chart_not_handler") + ": " + view.getRender() + "," + view.getType());
|
||||
}
|
||||
|
||||
var dillAxis = new ArrayList<ChartViewFieldDTO>();
|
||||
var drillAxis = new ArrayList<ChartViewFieldDTO>();
|
||||
DatasetGroupInfoDTO table = datasetGroupManage.getDatasetGroupInfoDTO(view.getTableId(), null);
|
||||
if (table == null) {
|
||||
DEException.throwException(ResultCode.DATA_IS_WRONG.code(), Translator.get("i18n_no_ds"));
|
||||
@@ -141,9 +141,7 @@ public class ChartDataManage {
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
formatResult.getContext().put("allFields", allFields);
|
||||
var axisMap = formatResult.getAxisMap();
|
||||
axisMap.forEach((axis, fields) -> {
|
||||
fields.removeIf(fieldDTO -> !dataeaseNames.contains(fieldDTO.getDataeaseName()));
|
||||
});
|
||||
axisMap.forEach((axis, fields) -> fields.removeIf(fieldDTO -> !dataeaseNames.contains(fieldDTO.getDataeaseName())));
|
||||
|
||||
// 过滤来自仪表板的条件
|
||||
List<ChartExtFilterDTO> extFilterList = new ArrayList<>();
|
||||
@@ -319,7 +317,7 @@ public class ChartDataManage {
|
||||
if (!fields.contains(dim.getId())) {
|
||||
viewField.setSource(FieldSource.DRILL);
|
||||
xAxis.add(viewField);
|
||||
dillAxis.add(viewField);
|
||||
drillAxis.add(viewField);
|
||||
fields.add(dim.getId());
|
||||
}
|
||||
if (i == drillRequestList.size() - 1) {
|
||||
@@ -327,7 +325,7 @@ public class ChartDataManage {
|
||||
if (!fields.contains(nextDrillField.getId())) {
|
||||
nextDrillField.setSource(FieldSource.DRILL);
|
||||
xAxis.add(nextDrillField);
|
||||
dillAxis.add(nextDrillField);
|
||||
drillAxis.add(nextDrillField);
|
||||
fields.add(nextDrillField.getId());
|
||||
} else {
|
||||
Optional<ChartViewFieldDTO> axis = xAxis.stream().filter(x -> Objects.equals(x.getId(), nextDrillField.getId())).findFirst();
|
||||
@@ -335,7 +333,7 @@ public class ChartDataManage {
|
||||
field.setSort(nextDrillField.getSort());
|
||||
field.setCustomSort(nextDrillField.getCustomSort());
|
||||
});
|
||||
dillAxis.add(nextDrillField);
|
||||
drillAxis.add(nextDrillField);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -343,10 +341,10 @@ public class ChartDataManage {
|
||||
}
|
||||
}
|
||||
|
||||
formatResult.getContext().put("dillAxis", dillAxis);
|
||||
formatResult.getContext().put("drillAxis", drillAxis);
|
||||
|
||||
//转义特殊字符
|
||||
extFilterList = extFilterList.stream().peek(ele -> {
|
||||
extFilterList.forEach(ele -> {
|
||||
if (ObjectUtils.isNotEmpty(ele.getValue())) {
|
||||
List<String> collect = ele.getValue().stream().map(SQLUtils::transKeyword).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(ele.getOriginValue())) {
|
||||
@@ -354,7 +352,7 @@ public class ChartDataManage {
|
||||
}
|
||||
ele.setValue(collect);
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
});
|
||||
// 视图自定义过滤逻辑
|
||||
CustomFilterResult filterResult = chartHandler.customFilter(view, extFilterList, formatResult);
|
||||
|
||||
@@ -642,7 +640,6 @@ public class ChartDataManage {
|
||||
view.setXAxisExt(new ArrayList<>());
|
||||
}
|
||||
|
||||
List<ChartViewFieldDTO> xAxisBase = new ArrayList<>(view.getXAxis());
|
||||
List<ChartViewFieldDTO> xAxis = new ArrayList<>(view.getXAxis());
|
||||
List<ChartViewFieldDTO> xAxisExt = new ArrayList<>(view.getXAxisExt());
|
||||
if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot")
|
||||
|
||||
@@ -661,7 +661,6 @@ onMounted(() => {
|
||||
class="menu-item-padding"
|
||||
:disabled="state.disableEditCompare"
|
||||
:command="beforeQuickCalc('setting')"
|
||||
v-if="!(chart.type.includes('chart-mix') && type === 'quotaExt')"
|
||||
>
|
||||
<div
|
||||
class="sub-menu-content"
|
||||
|
||||
@@ -212,7 +212,6 @@ export class ColumnLineMix extends G2PlotChartView<DualAxesOptions, DualAxes> {
|
||||
const label = {
|
||||
fields: [],
|
||||
...tempLabel,
|
||||
offsetY: -8,
|
||||
formatter: (data: Datum) => {
|
||||
if (!labelAttr.seriesLabelFormatter?.length) {
|
||||
return data.value
|
||||
|
||||
Reference in New Issue
Block a user