- 
                
                    
 - 
                
tangmq 数据达人Lv4
发表于2019-7-17 17:32
 
楼主
    
                        报表有折叠式钻取,效果如下图,点击左边的加号,可以一层层的展开
 
那么需求来了:如果要对数据导出,而且导出的时候,希望导出全部展开后,进行导出。即,一键展开所有节点,然后导出展开后的数据;
实现步骤:
步骤一:添加一个文本,配置万能式钻取:javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=true')
 
步骤二:定义服务器计算前脚本,注意哈,不是客户端脚本,服务器端计算前脚本
 
复制代码
        
        
    
    
    
    
    
那么需求来了:如果要对数据导出,而且导出的时候,希望导出全部展开后,进行导出。即,一键展开所有节点,然后导出展开后的数据;
实现步骤:
步骤一:添加一个文本,配置万能式钻取:javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=true')
步骤二:定义服务器计算前脚本,注意哈,不是客户端脚本,服务器端计算前脚本
- //机构的维表元
 - def jgCellName="A1";
 - //机构维的级次
 - def dimMaxLevel=2;
 - //缩进距离
 - def indent = 15;
 
- def jgRow = 0;
 - def jgCol = 0;
 - //设置浮动范围
 - def setFloatRange(rc,left,top,right,bottom){
 -    rc.setTop(top);
 -    rc.setLeft(left);
 -    rc.setRight(right);
 -    rc.setBottom(bottom);                
 - }
 
- //展开所有级次
 - def  expandAll(jgCellName,dimMaxLevel,indent){
 -         jgCell = rpt.getCell(jgCellName);
 -         jgRow = jgCell.getRow();
 -         jgCol = jgCell.getCol();
 -         
 -            //注意此脚本只适合机构表元在第一个分析区的情况
 -         //浮动分析区的范围
 -         fxqRect = rpt.getFxq(0).getRange();
 - //添加行数
 -         rpt.insertRow(jgRow+1,dimMaxLevel);
 -   if (fxqRect.getBottom()==jgRow+1){
 -            //需要调整分析范围
 -     fxqRect.setBottom(fxqRect.getBottom()+dimMaxLevel);
 -   }
 
-         for(r in 0..<dimMaxLevel){
 -                 row = r +jgRow+1;
 -                 for(c in 0..<rpt.getColCount()){
 -                   precl = rpt.getCell(jgRow,c);
 -                   cl = rpt.getCell(row,c);
 -                   cl.copyAll(precl);
 -                   cl.adjustCellExp(true,true,jgRow-1,r+1);
 
-                   if (precl.isDimCell()){
 -                     cl.copyToDimCell(precl);
 -                     //设置浮动范围
 -                     rc = precl.getFloatRange();
 -                     setFloatRange(cl.getFloatRange(),rc.getLeft(),row,rc.getRight(),dimMaxLevel+jgRow+1);
 -                     cl.setProperty('indent',indent*(r+1)+'');
 -                     cl.setProperty('url','');
 -                     cl.setFloatSumLevel(r+1);
 -                 
 -                     //把源行的浮动表元范围设置下
 -                     if (r==0){
 -                        precl.getFloatRange().setBottom(dimMaxLevel+jgRow+1);
 -                        precl.setFloatSumLevel(0);
 -                        precl.setProperty('url','');
 -                     }
 -                   }
 -                 }
 -         }
 - }
 - if ("true".equals(params.getValue("@expand"))){
 -   expandAll(jgCellName,dimMaxLevel,indent);
 -   params.setValue("@expand","");
 - }
 
3个回答
                                            [BI33一键展开收回方法]第一步:
添加一个文本作为一键展开的功能,配置万能式钻取:javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=true')
如果需要一键收回,还需要在添加一个文本,配置万能式钻取:javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=false')
第二步:
添加服务器计算前脚本[attach]20924[/attach]
配置以上内容即可实现一键展开。
PS:BI47和ABI一键展开方法通用,可参考楼主提供的方法,如需一键展开和收回也可参考该贴:http://bbs.esensoft.com/thread-133882-1-1.html
                                    

                                    

