找文章 / 找答案
精选问答 更多内容

[数据处理] 批量处理数据查询

yhdata_Jenny青铜二 显示全部楼层 发表于 2022-3-29 21:12:43
如果不期望创建多个参数列,可以通过脚本根据参数的值动态对组件进行换绑定数据列来实现
回复

使用道具 举报

yhdata_cGxQ0JdB青铜二 显示全部楼层 发表于 2022-3-29 21:57:17
脚本咋设置啊?有模板或者设置教程吗?
回复

使用道具 举报

yhdata_Jenny青铜二 来自手机 显示全部楼层 发表于 2022-3-29 22:00:48
我们内部再找一下案例,确定后第一时间回复
回复

使用道具 举报

yhdata_cGxQ0JdB青铜二 显示全部楼层 发表于 2022-3-29 22:11:18
看之前的报表制作是SQL数据集:
where ?{是否查询} = '是'
and ( <机构名称是否勾选> ?{机构名称是否勾选} = '否' </机构名称是否勾选>
      <二级机构名称> or t0.comname2 in ?{二级机构名称} </二级机构名称>
      <三级机构名称> or t0.comname3 in ?{三级机构名称} </三级机构名称>
      <四级机构名称> or t0.comname4 in ?{四级机构名称} </四级机构名称>)
and ( <报告日期是否勾选> ?{报告日期是否勾选} = '否' </报告日期是否勾选>)
<报告日期>and t0.report_date in ?{报告日期} </报告日期>-----参数只有一个,但是参数值可以传递多个
and ( <项目是否勾选> ?{项目是否勾选} = '否' </项目是否勾选>)
<项目>and CONCAT(t0.item_code,"  ",t0.item_name) in ?{项目} </项目>
and ( <信保产品是否勾选> ?{信保产品是否勾选} = '否' </信保产品是否勾选>)
<信保产品>and CONCAT(t0.prd_code,"  ",t0.prd_name) in ?{信保产品} </信保产品>
and ( <资产方是否勾选> ?{资产方是否勾选} = '否' </资产方是否勾选>)
<资产方>and CONCAT(t0.assets_no,"  ",t0.assets_name) in ?{资产方} </资产方>
and ( <资金方是否勾选> ?{资金方是否勾选} = '否' </资金方是否勾选>)
<资金方>and CONCAT(t0.capital_no,"  ",t0.capital_name) in ?{资金方} </资金方>

然后:
脚本;
1)装载时运行:
var a=报告日期.getObjects()[0][0]
报告日期.setSelectedObjects([a],STRING)
2)变化时运行:
var arr1=维度.getSelectedObjects()
var arr2=度量.getSelectedObjects()
表1.binding.clearCols()
for(i=0;i<arr1.length;i++){
var bcol = new BCol(arr1[i], STRING, true);
var d = new DimCol(bcol);
//d.showTotal=true;
表1.binding.addCol(i,d);
}

for(j=0;j<arr2.length;j++){
var bcol = new BCol(arr2[j],DOUBLE, false);
var a = new MeasureCol(SUM,bcol,null);
表1.binding.addCol(i+j,a)
}
回复

使用道具 举报

yhdata_cGxQ0JdB青铜二 显示全部楼层 发表于 2022-3-29 22:15:59
以下是查询设置:
请问是跟这些脚本设置有关吗?
不懂JS脚本看不太懂


/*
打印参数:
1. 如果参数为空,则打印“null”;
2. 如果参数为string,则直接打印;
3. 如果参数为string数组,则逐行打印数组中的每个值
*/
function debugParameter(parameter){
    debug("---------Start---------")
    if(parameter){
        if(typeof parameter == "string"){
            debug("string: " + parameter)
        }else{
            for ( i = 0 ; i < parameter.length ; i ++ ) {
                debug("array: " + parameter[i]);
            }
        }
    }
    else{
        debug("null")
    }
}

function getSelectedItems(treefilterName){
    var result = new Array();
    var selectedObjs = eval(treefilterName).getSelectedObjects();
    var treedata = getData(treefilterName);
    var level=treedata.csize();
   
    for(var i = 0; i < level; i++){
        result[i] = new Array();
    }
    for(var i = 0; i < selectedObjs.length; i++){
        var len = selectedObjs[i].length;
        result[len - 1][result[len -1].length] = selectedObjs[i][len - 1];
    }

    return result;
}

/*
定位名字为treefilterName的树状过滤组件,
获取其在level层的勾选项的名字(只需最里面一层),
并返回勾选项数组
*/
function getFilterbyLevel(treefilterName,level){
    sperator = ","
    selected = getSelectedItems(treefilterName);
    if(selected.length >= level)
        resultstr =  selected[level-1].join(sperator);
    else{
       debug("level 数值超过组件层级");
        return null;
    }
    if(resultstr != "")
        return resultstr.split(sperator);
    else
        return null;
}

/*
输入【名称-代码】,返回【代码】
*/
function getCode(input_string){
    //找到“: ”符,取“: ”符后的内容
    var index = input_string.lastIndexOf(': ');
    if(index >= 0)
        return input_string.substring(index+2);
    else
        return input_string;
        //return null;
}

/*
输入【名称-代码】数组,返回【代码】数组
*/
function getCodes(input_strings){
    if(input_strings == null)
        return null;
    var codes = new Array();
    //对于数组中的每一元素,获取其代码
    for(index in input_strings){
        codes.push(getCode(input_strings[index]));
    }
   return codes;
}



/*从树状过滤组件“机构”中获取勾选的二、三、四级机构*/
tree_name = "机构名称"
param["二级机构名称"] = getCodes(getFilterbyLevel(tree_name,1));
param["三级机构名称"] = getCodes(getFilterbyLevel(tree_name,2));
param["四级机构名称"] = getCodes(getFilterbyLevel(tree_name,3));


/*判断“机构”组件是否勾选*/
if(param["二级机构名称"] == null && param["三级机构名称"] == null && param["四级机构名称"] == null)
    param["机构名称是否勾选"] = "否"
else
    param["机构名称是否勾选"] = "是"

param["是否查询"] = "是"

refreshData()
回复

使用道具 举报

永洪Tech-Lu钻石一 显示全部楼层 发表于 2022-3-30 13:16:15
yhdata_cGxQ0JdB 发表于 2022-3-29 17:29
之前的版本是没有下拉列表参数,8.5版本只有列表参数,下拉参数或者文本参数使用其中的一个即可?
知道新的 ...

列表参数一样的噢,参数组件在录入维度数据列的时候数据类型是文本类型吗
回复

使用道具 举报

yhdata_cGxQ0JdB青铜二 显示全部楼层 发表于 2022-3-30 13:51:28
是的,文本类型。 昨晚不是有你们那边回复8.5版本一个参数列表只能勾选一个字段吗? 不能选择多个
回复

使用道具 举报

永洪Tech-Lu钻石一 显示全部楼层 发表于 2022-3-30 14:05:52
yhdata_cGxQ0JdB 发表于 2022-3-30 13:51
是的,文本类型。 昨晚不是有你们那边回复8.5版本一个参数列表只能勾选一个字段吗? 不能选择多个 ...

嗯嗯,不希望多个参数列的话,可以脚本获取列表参数的勾选值,绑定在表格上,写在变化时运行,可以参考
var arr=下拉列表参数1.getSelectedObjects()
图表1.binding.clearCols()
for(i=0;i<arr.length;i++){
var bcol = new BCol(arr
, STRING, true);
var d = new DimCol(bcol);
图表1.binding.addCol(i,d);

}
效果: 企业微信截图_20220330140523.png

回复

使用道具 举报

yhdata_cGxQ0JdB青铜二 显示全部楼层 发表于 2022-3-30 14:59:24
谢谢,脚本已经搞定了
回复

使用道具 举报

yhdata_cGxQ0JdB青铜二 显示全部楼层 发表于 2022-3-30 15:00:16
2)变化时运行:
var arr1=维度.getSelectedObjects()
var arr2=度量.getSelectedObjects()
表1.binding.clearCols()
for(i=0;i<arr1.length;i++){
var bcol = new BCol(arr1[i], STRING, true);
var d = new DimCol(bcol);
//d.showTotal=true;
表1.binding.addCol(i,d);
}

for(j=0;j<arr2.length;j++){
var bcol = new BCol(arr2[j],DOUBLE, false);
var a = new MeasureCol(SUM,bcol,null);
表1.binding.addCol(i+j,a)
}
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部