组合图中堆积图想加个合计怎么做

测试1.zip

image.png如图所示我想要每个堆积图上都做一个合计,但是用js处理后出现本期的合计无法显示,请问各位大佬如何解决,代码如下:

function sumLabel(){

  const point = this; 

  const points = point.points;

  const validPoints = points.filter( (point) => point.isVisible() );

  if(point == validPoints[validPoints.length - 1]) 

  // validPoints.length 表示一个分类下共有多少个系列, validPoints.length - 1 表示汇总值显示在顶部(最后一个系列)

  // 若想要汇总值显示在底部,则是 validPoints.length - 5 

   {

    let value = 0;

    for(let i = 0; i < validPoints.length; i++) //同一分类下所有系列均求和

    // 若为 i<validPoints.length-2,则在本例中求的是从下往上数前 3 个系列的和

    {

      value += validPoints[i].value;

    }

     return FR.contentFormat(value, '#,###0');

  } else {

    return "";

  }

}

FineReport 用户khYM65325571 发布于 2025-5-14 13:11 (编辑于 2025-5-14 14:19)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
东云川Lv5见习互助
发布于2025-5-19 15:08

不谢

function sumLabel() {

  const point = this;

  const points = point.points;

  const validPoints = points.filter((p) => p.isVisible());

  const seriesNames1 = points.map(point => point.seriesName).reverse().slice(3);

  console.log(seriesNames1);

  let outerSeriesName = null;

  let outervalidPointslength = null;

  // 找到可见点中优先级最高的系列名

  for (let i = 0; i < seriesNames1.length; i++) {

    const seriesName = seriesNames1[i];

    if (validPoints.some((p) => p.seriesName === seriesName)) {

      outerSeriesName = seriesName;

      outervalidPointslength = validPoints.length;

      debugger;

      break;

    }

  }

//去除折线图求和(比例改为折线名称即可)

  if (point.seriesName === outerSeriesName) {

    let value = 0;

    for (let i = 0; i < outervalidPointslength; i++) {

      if (validPoints[i].seriesName != '比例' ) {

        value += validPoints[i].value;

      }

    }

    // 累加的值加上当前点的值,并使用 toLocaleString() 添加千分符

    return Math.round(value*100)/100;

  } else {

    return "";

  }

}

  • 用户khYM65325571 用户khYM65325571(提问者) 牛逼了大佬,现在还有个问题,这个标签怎么能让它统一显示柱状图的上方
    2025-05-26 20:30 
  • 东云川 东云川 回复 用户khYM65325571(提问者) const seriesNames1 = points.map(point => point.seriesName).reverse().slice(3);这个地方自己微调一下
    2025-05-27 09:10 
  • 东云川 东云川 回复 用户khYM65325571(提问者) 还有个更方便的办法,数据集里面写好求和的字段,把这这个求和的字段作为折线图显示,然后隐藏标记点和线形,只保留标签,这样子效果是一样的
    2025-05-27 09:13 
最佳回答
0
CD20160914Lv8专家互助
发布于2025-5-14 13:12(编辑于 2025-5-19 15:58)

传一下你的文件吧,内置数据集。然后压缩上传上来。

组合图动态系列求和.rar

----------------------

自定义标签为系列和- FineReport帮助文档 - 全面的报表使用教程和学习资料

在系列不确定的时候,想在最后一个系列显示合计参考文件如上面,东云川网友的代码目前不能实现如果每个分类的系列不一样的话,合计是取不到的

比如2024年  有AA系列,BB系列,CC系列

2025年,有BB系列,CC系列

202411,有AA系列,BB系列,

202412   有AA系列,DD系列

那么只能对AA系列上面显示汇总

现在按我理解用户需要

2024年,在CC系列上面显示合计

2025年   在CC系列上面显示合计

202411  在BB系列上面显示合计

202412  在DD系列上面显示合计

结果

image.png

最佳回答
0
用户k6280494Lv6专家互助
发布于2025-5-14 13:15(编辑于 2025-5-14 13:15)

自定义标签为系列和

function sumLabel(){  

  const point = this;  

  const points = point.points;  

  const validPoints = points.filter((point) => point.isVisible());  

  if(point == validPoints[validPoints.length - 1]) {  

    let value = 0;  

    for(let i = 0; i < validPoints.length; i++) {  

      value += validPoints[i].value;  

    }  

    return value;  

  } else {  

    return "";  

  }  

}

最佳回答
0
iQianLv4初级互助
发布于2025-5-14 14:01

做过echarts的,有点麻烦。

最佳回答
0
snrtuemcLv8专家互助
发布于2025-5-14 14:23

不单单合计展示,其他各自也展示?

那就最后的

else {

    return "";

  }

改成

else {

    return this.value;

  }

就可以

  • 6关注人数
  • 103浏览人数
  • 最后回答于:2025-5-19 15:58
    请选择关闭问题的原因
    确定 取消
    返回顶部