背景
基于Mixed Chart(柱状图+折线)作图,显示 某维度A Top10 + '其他' 数据,接口返回了值为 undefined 的某维度A 数据,前端渲染成 某维度A 值为 0
此图表存在的问题:
- 图表控件编辑页面,即便数据集正常查询出 Top10 + ‘其他’ 数据,但是堆积图表渲染时,返回了 值为 0
- 比如'2016'年,正常情况下,有数据集【‘a’:22,‘b’:23,‘c’:24,‘d’:25,‘e’:26】,但是渲染时,显示【‘a’:22,‘f’:0,‘c’:24,‘d’:25,‘g’:0】,显然,2016年真正的完整的数据并没有显示出来
修复
- superset-frontend\plugins\plugin-chart-echarts\src\MixedTimeseries\transformProps.ts
定位transformProps 函数: function transformProps
======================================================
// ---------新增以下逻辑----------
// 过滤掉 data1 中的 NULL 数据
const filteredData1 = data1.map(item => {
return Object.fromEntries(
Object.entries(item).filter(([_, value]) => value !== null)
);
});
const xAxisData = data1.map(item => item[xAxisLabel]); // 从 data1 中提取 x 轴数据,传给x轴,解决x 轴标签错乱
const rebasedDataA = rebaseForecastDatum(filteredData1, verboseMap); //data1 替换为filteredData1
定位echartOptions参数:const echartOptions: EChartsCoreOption =
======================================================
xAxis: {
data: xAxisData, // 新增:指定 xAxis 的数据
- superset-frontend\plugins\plugin-chart-echarts\src\utils\forecast.ts
定位rebaseForecastDatum函数: function rebaseForecastDatum
// const keys = data.length ? Object.keys(data[0]) : [];
//解决不同年份的维度数据不一致情况下,取出完整的keys
const keys = Array.from(new Set(data.flatMap(row => Object.keys(row))));
// newRow[verboseKey] = value;
// 过滤掉undefined 的维度数据
if (value !== null && value !== undefined) {
newRow[verboseKey] = value;
}
- superset-frontend\plugins\plugin-chart-echarts\src\utils\series.ts
定位sortAndFilterSeries 函数: function sortAndFilterSeries
// const seriesNames = Object.keys(rows[0])
const seriesNames = Array.from(new Set(rows.flatMap(row => Object.keys(row))))
定位finalSeries参数: const finalSeries = sortedSeries.map(name => ({
if(row[name] === undefined){
return null;
} //新增:过滤掉维度值为undefined 的数据
const currentValueSplit = row[name]?.toString().split(';'); //保持不变
.filter(obs => obs !== null) // 新增:过滤掉空数据
.filter(obs => !removeNulls || (obs[0] !== null && obs[1] !== null))//保持不变