数组函数综合应用场景示例

5874
1

xxxl 数据领袖Lv6

发表于2021-2-25 17:11

楼主
本帖最后由 xxxl 于 2021-3-1 17:24 编辑

一、数组对象函数说明
      在表达式中经常会用到数组对象,例如:
      一维数组:  [1,2,3,4]
      二维数组:  [[1,2,3],[2,3,4]]
  当然表达式中也可以通过其它途径获得数组对象,比如ardb函数,或者是报表模板中的数据源等。
数组对象的属性以及方法可以看这个帖子
https://bbs.esensoft.com/thread-133624-1-1.html

二、常见应用场景示例
    2.1应用场景一  利用数组对象函数求带条件的平均值
     需求场景
     
需要取到按浮动顺序序号的前三个车型价格的平均值,利用数据对象来取值做到求出带条件的平均值。
     表样设计:

       公式说明:GRID2.C2$.select(@.value<=3).select(true,@.leftcell.value).avg(),
         select(@.value<=3)   是取到C2$浮动列中值满足小于等于3这个条件的数据,
        select(true,@.leftcell.value)  是取到这些数据的左侧的单元格的数据,
         avg()  求平均值。

        最后效果:


2.2应用场景二 利用数组对象函数返回数组内指定的值
      
需求场景
  需要取出浮动列中排名为第三名的省份名称,用find函数返回指定值的方法做。
       表样设计:

        公式说明:A2$[C2$.FIND("3")].txt。

C2$.FIND("3") 是返回数组中字段串为"3"的序号
A2$[C2$.FIND("3")].txt 则是取出C2$.FIND("3") 返回的序号对应的A2列的文本值
        最后效果:

    2.3应用场景三 利用数组对象函数求排名前几的数据
      
需求场景
  想要通过不改变浮动顺序也就是不使用_rk()函数的情况下取到前几名的数据,可以使用rank函数得到一个没有改变浮动顺序的排名,然后再通过数组对象来取到前几名或者后几名的数据。
     表样设计:

      公式说明:GRID1.B2$$.rank(GRID1.B2)  是对销售价格进行排名
      GRID1.C2$.sort(true).mid(0,3).select(true,@.leftcell(2).txt).join(",")
     .sort()是将C2浮动出来的数据降序排序,sort()=sort(false)默认为降序sort(true)为升序;
      mid(0,3)是取排序后的前三项(即前三名)mid(index,len)index:整型(必须)len:整型(可选),返回指定的从数组第index个开始的长度为len的所有元素形成的一个行的数组;
      select的作用的取这前三名对应的B2表元的值(字号列),join是吧前面返回的结果用逗号隔开转成字符串。

      最后效果:


    2.4应用场景四 利用数组对象函数做多层级排名
     需求场景:

     在设置排名的时候,常常会这样的需求,要展现一个数据在不同层级的排名这样复杂的效果,比如一个销售价格同时要求它所在省、市、县的排名展现在一个分析表中,这就需要借助到数组对象函数以及辅助行来做。
    表样设计:
    第一层浮动,钻取级次为县

   第二层浮动,钻取级次为市

   第三层浮动(注意最外层浮动包含了下面的辅助表元),钻取级次为省

    公式说明:
   GRID1.D2$.join(",") 是将市内所有销售价格取出加入顿号分开,注意这个辅助表元需要设置数据类型为字符型。
   asstr(GRID1.D3).split(",").rank(D2),则是将顿号去掉根据D2值排序。最后隐藏辅助表元所在行。
    最后效果:

    2.5应用场景五 利用数组对象函数做多条件模糊查询
    需求场景:

     想要在输入框中输入多个条件,然后进行模糊查询。
    表样设计:

过滤条件

   公式说明:
<#=(@cs+"").split(",")#> 或<#=@cs.value.split(",")#>是去掉逗号','
.select(true,"XXB.BBQ like '%"+@+"%'")  使用.select方法将数组的每一项拼成字段名 like '%条件%'的形式
.join(" or ")  使用.join方法将数组转换成一个用or连接的字符串
通过上面的表达式在输入框输入01,02
会出来这样的过滤条件

   最后效果:


   
2.6应用场景六 利用数组对象函数做数组行列转换
    场景说明:
    将这种格式的数组:[["32","201902","201902","201902"],["420000128","130427","410822","230223"]]
变成这种:[[32,420000128],[201902,130427],[201902,410822],[201902,230223]]   

    表样设计:

    公式说明:<#=[A1$,B1$].matrix()#>  是行列转换函数将原来两个数组例如[["32","201902","201902","201902"],["420000128","130427","410822","230223"]]转置成[[32,420000128],[201902,130427],[201902,410822],[201902,230223]]
    最后效果:











最近看过此主题的会员

esen_54ZSNAG0E4

1个回答

只看楼主

yangqh 数据老手Lv5

发表于2021-3-1 17:01

只看该作者

取消 关注该作者的回复

沙发

很赞的总结呀
我也分享两个比较常用的数组函数应用场景:
1、数组函数应用实例-枚举下拉多选过滤
https://bbs.esensoft.com/thread-133428-1-1.html
2、对象表达式+数组应用实例--维ID字符串转名称显示
https://bbs.esensoft.com/thread-130270-1-1.html

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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