mirror of
https://github.com/dataease/dataease.git
synced 2026-06-16 20:42:07 +08:00
feat(图表): 组合图副值轴支持设置同环比
This commit is contained in:
@@ -81,7 +81,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 +119,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) {
|
||||
for (ChartViewFieldDTO dillAxi : drillAxis) {
|
||||
if (!fields.contains(dillAxi.getId())) {
|
||||
xAxis.add(dillAxi);
|
||||
}
|
||||
}
|
||||
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,7 +341,7 @@ public class ChartDataManage {
|
||||
}
|
||||
}
|
||||
|
||||
formatResult.getContext().put("dillAxis", dillAxis);
|
||||
formatResult.getContext().put("drillAxis", drillAxis);
|
||||
|
||||
//转义特殊字符
|
||||
extFilterList = extFilterList.stream().peek(ele -> {
|
||||
|
||||
@@ -672,7 +672,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"
|
||||
|
||||
Reference in New Issue
Block a user