万能式钻取函数综合应用场景示例

4761
2

xxxl 数据领袖Lv6

发表于2021-3-5 15:58

楼主
本帖最后由 xxxl 于 2021-3-8 16:48 编辑

一、万能式钻取函数说明
    在钻取时,ABI内部提供了很多种钻取函数,同时也为了方便使用,将他们设置为可视化的方式,直接在界面上设置即可,但是在一些特殊情况下,我们却需要通过万能式调用钻取函数。
    例如:某表元钻取,该表元钻取方式是根据表元的值决定的,在该值<60情况下,使用钻取方式1,在>=60&<90情况下,使用钻取方式2,否则使用钻取方式3
这时候我们就需要在万能式中实现,并且,需要用到三个钻取方式的钻取函数。
    获取当前表元值,在万能式中,写this.textContent,其中this代表点击的对象表元 ,textContent代表内容。
if(this.textContent<60){
    //钻取函数1
}else if(this.textContent>=90 && this.textContent<90){
    //钻取函数2
}else{
    //钻取函数3

万能式填写位置在这里 截图202103051540429474.png
    更多万能式钻取函数相关说明请看这个帖子
https://bbs.esensoft.com/thread-138539-1-1.html

二、常见应用场景示例
    2.1 应用场景一 用万能式钻取实现逐级式钻取到叶子节点后执行热区钻取
    需求说明:
    在使用钻取设置的时候,设置逐级式钻取可以勾选“钻取到叶子节点时跳转其他表”这里实际上就是在做完逐级钻取后叶子节点上做跳转钻取。我们这里的需求场景和它很类似,不同是钻取到叶子节点后需要进行热区钻取,在常规钻取没有这样的设置入口下就可以万能式钻取实现这样的需求。
    万能式说明:
  1. var doma = event.srcElement||event.targetElement;
  2. var isleaf = doma.getAttribute("isleaf");
  3. if(EUI.parseBool(isleaf)){//判断是否是叶子节点
  4.   _zcalcn([['H','HHH2','@bmbh=<#=GRID1.A1.txt#>']]);//是则执行热区钻取
  5. }else{
  6.   _zqn();//否则则执行逐级钻取
  7. }
复制代码
       统计图可以使用"<#=A2.isleaf#>"来判断是否是叶子节点:
  1. var isleaf = <#=A2.isleaf#>;
  2. if(EUI.parseBool(isleaf)){
  3. _zcalcn([['H','HHH2','@bmbh=<#=GRID1.A1.txt#>']]);
  4. }else{
  5. _zqn();
  6. }
复制代码
  其中判断表元对应的维项是否叶子节点,也可以用维节点对象表达式替换进行判断https://bbs.esensoft.com/thread-137771-1-1.html
    最后效果:
叶子节点热区.gif


    2.2应用场景二 用万能式钻取实现根据表元值不同进行不同的钻取
    需求说明:
    根据表元值不同进行不同的钻取,这里当表元文本值为'北京'和'天津市'跳转钻取到'B51903'并传递表元值到参数@cs,其他的情况则继续向下折叠式钻取。
    万能式说明:

  1. if('<#=self.txt#>'='北京'or'<#=self.txt#>'='天津市',"_zn('B51903','@cs=<#=self.txt#>')","_zrn()")
复制代码
   self.txt是表元对象函数,意思为取出当前表元的文本值。
   更多表元对象函数可以在表格里写=self.会自动跳出很多表元对象函数的使用说明。

截图202103031452537213.png
    最后效果:
根据值不同钻取.gif


    2.3应用场景三  用万能式钻取实现根据参数组件值不同进行不同的钻取
    需求说明:
    需要根据参数组件里不同的值进行不同的钻取,这里首先用var 定义变量获取参数值,然后通过脚本的if else 判断跳转。这里是需要获取参数组件名称,当值为"000000"的时候折叠式钻取,当值为"120000"的时候逐级式钻取,其他情况则跳转式钻取到B51903。   
    表样设计:

截图202103051509049068.png
    万能式说明:
  1. var c=g_rptpage.calcParam.getParamByName("@cs").getValue();//这里是获取维下拉值
  2. if(c=="000000"){
  3. _zrn();
  4. }else if(c=="120000"){
  5. _zqn();
  6. }else{
  7. _zn('B51903');
  8. }
复制代码
     这里请注意,如果参数组件放在了参数区,需要先切换到简洁模式下在再进行钻取计算,这样才能取到数,也可以直接放在报表区就不需要切换到简洁模式了。   
    最后效果:

根据参数值钻取方式.gif

    2.4应用场景四  用万能式钻取实现传递浮动表元浮动列的值
    需求说明:
     传递主表的浮动列数据到子表上,这里是需要热区传参浮动表元浮动列的值到容器中显示。
     表样设计:

截图202103051539544490.png
    万能式说明:
     _zcalcn([['Widget1','HHH2','@cs=<#=GRID1.A1$$.select(true,@.txt)#>']])

这里传浮动列数据的方法是 表元$$  。这里实际上是数组对象,所以上面万能式用数组对象的select函数返回出文本值。数组对象的应用介绍看这个帖子https://bbs.esensoft.com/thread-138767-1-1.html

     最后效果:
热区传递浮动值.gif

三、补充注意
        万能式里传递参数到子表中的方法和正常钻取会有不一样,有以下几点需要注意:
        3.1 场景二中,如果想要传递表元对象self.value的值在万能式里需要加上宏<#=self.value#>,比如_zn('B51903','@cs=<#=self.txt#>')。
        3.2 场景三中,如果想传递刚定义的变量c值到任意钻取中去,可以这样写_zcalcn([['Widget1','HHH9','@a='+c]]); 或者_zcalcn([['Widget1','HHH9','@a='+c+';']])。
        3.3 正常钻取中想要取到当前参数组件值进行钻取比如https://bbs.esensoft.com/thread-138067-1-1.html,在万能式中传参'@xh=<#=$xh#>'会报错无法识别,需要变成'@xh=<#=@xh#>',比如_zcalcn([['Widget1','HHH9','@xh=<#=@xh#>']])。


最近看过此主题的会员

张稀赫

天晴放羊

本主题由admin于2022-4-27 15:50加入精华

2个回答

只看楼主

丫头 数据小白Lv1

发表于2021-3-26 15:44

只看该作者

取消 关注该作者的回复

沙发

场景一中,如何获取当前表元右侧第二个表元的值?实现类似于self.rightcell(2).value的效果。

xxxl 数据领袖Lv6

发表于2021-3-26 16:27

只看该作者

取消 关注该作者的回复

板凳

本帖最后由 xxxl 于 2021-3-26 16:31 编辑

丫头 发表于 2021-3-26 15:44
场景一中,如何获取当前表元右侧第二个表元的值?实现类似于self.rightcell(2).value的效果。 ...

万能式里对self.rightcell(2).value加上宏<#=self.rightcell(2).value#>就可以了,这个点下面的注意的3.1中已经提到了

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

渠道咨询电话:137-0120-6790

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

进群交流、一对一指导

©2021ESENSOFT北京亿信华辰软件有限责任公司版权所有:京ICP备07017321号京公网安备11010802016281号