永洪社区

标题: 如何动态设置图表的最大值和最小值 [打印本页]

作者: yh_xishan    时间: 2021-11-4 08:49
标题: 如何动态设置图表的最大值和最小值
帮助文档中的这个方法,使用后一直报错,版本是8.6.5b

作者: 美滋滋    时间: 2021-11-4 08:49
我刚做了一个范例,如下图,图中我放了一个柱图组件,分别绑定了一个维度(会员等级),一个度量(剩余库存数),一个标签(门店),右边用一个表格可以看到数据内容。弹出的数据是我用脚本从柱图中分组合计出的结果,可以看到在结果中显示的数据和实际数据是匹配的。脚本如下:
var data = getData('图表1')
var i = 1;
var tmptype = '';
var tmpsum = 0;
var sumlist = [];
var maxdata = 0;
var maxmin = 0;

for (i=1;i<data.size();i++) {
    if (tmptype != data.get(i,0)) {
        tmptype = data.get(i,0)
        if (i != 1) {
            sumlist.push(tmpsum)
        }
        tmpsum = 0
        tmpsum += data.get(i,2)
    }else{
        tmpsum += data.get(i,2)
    }
}
sumlist.push(tmpsum)

maxdata = Math.max.apply(null, sumlist)
mindata = Math.min.apply(null, sumlist)
debug("最大值:" + maxdata)
debug("最小值:" + mindata)

//最终我把所有会员等级的合计剩余库存放在了数组sumlist中。同时获取了最大的合计值放在了maxdata中,最小的合计值放在了mindata中



作者: 永洪Tech-CIDX    时间: 2021-11-4 09:35
麻烦截下组件的截图和绑定字段的截图,以及设定的位置
作者: yh_xishan    时间: 2021-11-4 10:02
按照文档走的一个例子
作者: 永洪Tech-CIDX    时间: 2021-11-4 10:32
修改下17行及下面的脚本:表示销量字段总计时,新版本是: Sum_度量名

图表1.binding.axis["Sum_销量"].max=max//设置刻度最大值

图表1.binding.axis["Sum_销量"].min=min//设置刻度最小值

图表1.binding.axis["Sum_销量"].majorIncrement=major//设置主要刻度
作者: yh_xishan    时间: 2021-11-4 10:36
永洪Tech-wj 发表于 2021-11-4 10:32
修改下17行及下面的脚本:表示销量字段总计时,新版本是: Sum_度量名

图表1.binding.axis["Sum_销量"].ma ...

请问如何获取一个图表的y轴刻度最大值
作者: 永洪Tech-CIDX    时间: 2021-11-4 10:47
yh_xishan 发表于 2021-11-4 10:36
请问如何获取一个图表的y轴刻度最大值

var a = 图表1.binding.axis["Sum_销量"].max;   
直接使用 图表1.binding.axis["Sum_销量"].max;  这个脚本,就能获取到值
作者: yh_xishan    时间: 2021-11-4 10:57
永洪Tech-wj 发表于 2021-11-4 10:47
var a = 图表1.binding.axis["Sum_销量"].max;   
直接使用 图表1.binding.axis["Sum_销量"].max;  这个 ...

貌似只有设置最大刻度时可以获取到设置的最大刻度值,如果不设置的话不能获取到系统当前自动生成的最大刻度吧
作者: 美滋滋    时间: 2021-11-4 10:57
你现在不是要设置Y轴最大刻度吗?怎么又要获取Y轴最大刻度?
作者: yh_xishan    时间: 2021-11-4 11:00
歪打正着 发表于 2021-11-4 10:57
你现在不是要设置Y轴最大刻度吗?怎么又要获取Y轴最大刻度?

是的,本质需求其实是获取一个图的最大刻度并赋给另一张图,所以需要获取第一张图的最大刻度,并且延伸出如何获取图表中度量为动态计算的最大刻度
作者: 美滋滋    时间: 2021-11-4 11:21
哦哦,你是想获取图表中展示的最大数据,然后用这个数据去设置刻度,是吗?
作者: yh_xishan    时间: 2021-11-4 11:29
歪打正着 发表于 2021-11-4 11:21
哦哦,你是想获取图表中展示的最大数据,然后用这个数据去设置刻度,是吗? ...

是的,是获取a柱图的最大刻度再设置给b柱图
作者: 美滋滋    时间: 2021-11-4 11:33
你可以用脚本获取A柱图中,每个柱子的值,然后从中获取最大值,然后再设置B柱图的刻度
作者: 美滋滋    时间: 2021-11-4 11:43
用下面的脚本获取图表1的数据
var data = getData("图表1");
//然后循环获取图表1柱子图的值,从而获取最大值
var i = 1;
var tmpmax = 0;
for (i=1;i<data.size();i++) {
    if (data.get(i,1) > tmpmax) {
        tmpmax = data.get(i,1)
    }
}
这样就获取到了图表1中显示柱子的最大值。

作者: 永洪Tech-CIDX    时间: 2021-11-4 12:16
yh_xishan 发表于 2021-11-4 11:00
是的,本质需求其实是获取一个图的最大刻度并赋给另一张图,所以需要获取第一张图的最大刻度,并且延伸出 ...

动态计算列的别名会有变化,我们可以直接获取绑定字段的别名,在获取刻度的时候使用:
图表1.binding.axis[图表1.binding.getYCol(0).col.view].max;
其中  图表1.binding.getYCol(0).col.view  是Y轴第一列的度量的别名,动态计算列也适用。
作者: yh_xishan    时间: 2021-11-4 14:33
歪打正着 发表于 2021-11-4 11:43
用下面的脚本获取图表1的数据
var data = getData("图表1");
//然后循环获取图表1柱子图的值,从而获取最 ...

有个很坑的问题,单度量单维度确实可以获取最大值,但是如果有其他标签,就获取不到最大值了
作者: 美滋滋    时间: 2021-11-4 14:36
yh_xishan 发表于 2021-11-4 14:33
有个很坑的问题,单度量单维度确实可以获取最大值,但是如果有其他标签,就获取不到最大值了 ...

可以啊!!怎么不可以呢?我去看看的。
作者: yh_xishan    时间: 2021-11-4 14:40
歪打正着 发表于 2021-11-4 14:36
可以啊!!怎么不可以呢?我去看看的。

我测试完是debug出0.0
作者: 美滋滋    时间: 2021-11-4 14:41
yh_xishan 发表于 2021-11-4 14:33
有个很坑的问题,单度量单维度确实可以获取最大值,但是如果有其他标签,就获取不到最大值了 ...

我试了一下,还是可以获取数值的,只不过每次获取的是一个柱子中被标签分割后的每一部分的数据,你手动用脚本分组计算一下每个柱子的合计值就可以了。
作者: yh_xishan    时间: 2021-11-4 14:44
歪打正着 发表于 2021-11-4 14:41
我试了一下,还是可以获取数值的,只不过每次获取的是一个柱子中被标签分割后的每一部分的数据,你手动用 ...

超出我的知识储备了,有脚本参考一下吗
作者: 美滋滋    时间: 2021-11-4 14:46
yh_xishan 发表于 2021-11-4 14:44
超出我的知识储备了,有脚本参考一下吗

稍等,我给你一个脚本范例。以一个柱图绑定一个维度,一个度量,一个标签为例的。你稍等一下
作者: yh_xishan    时间: 2021-11-4 14:48
歪打正着 发表于 2021-11-4 14:46
稍等,我给你一个脚本范例。以一个柱图绑定一个维度,一个度量,一个标签为例的。你稍等一下 ...

感激不尽
作者: yh_xishan    时间: 2021-11-4 15:17
强,多谢,佩服的五体投地
作者: 美滋滋    时间: 2021-11-4 15:21
还有别的方法,就是直接用脚本访问数据集的数据。然后也是自己做合计值,最终获取最大最小值,不过其实和这个方法大同小异,区别是数据来源,一个是直接获取组件中的数据,一个是直接获取数据集的数据。
其实还是希望永洪能给组件增加获取最大值最小值的方法,这样就省去自己编写脚本的问题。




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4