维表父节点和叶子节点都有数据时,过滤条件写法

3047
0

玳玳我 小试身手Lv3

发表于2021-8-17 12:09

楼主
本帖最后由 玳玳我 于 2022-3-24 11:04 编辑

       由于维表的规则是只用存储叶子节点数据,父节点数据会自动根据维表的层级结构进行合计显示,但实际场景中,可能存在父节点和叶子节点都有数据的情况,这时希望仅仅取到维表每个节点本身的id和主题表对应字段进行过滤,由于此时主题表字段不再绑定维表,维表只是做维下拉组件使用,没办法使用dim函数,并且需要考虑到维下拉组件的单选和多选场景。


        1、判断维下拉组件是否多选
         len((@cs+"").split("\\|"))    可以根据判断维下拉组件的参数值个数来判断是否多选,当维下拉参数值为空或者是单选时,len((@cs+"").split("\\|")) =1,否则则返回多选时实际的参数值个数。
  
         2、一般通用维和螺旋维维下拉参数组件值是由$符号拼接的,这里需要用diminf函数根据维下拉组件的参数值,取出对应的各节点的实际id方便过滤,diminf函数的使用参照帖子https://bbs.esensoft.com/thread-135211-1-1.html
         
        3、过滤条件写法如下:
             if(len((@cs+"").split("\\|"))=1,QC_XL.XH like "<#=DIMINF('汽车',@cs,'$realid')#>%",QC_XL.XH in <#=(@cs+"").split("\\|").select(true,diminf("汽车",@,"$realid"))#>)


       4:如果没有制作维表,使用枚举下拉组件,需要支持多选场景,可以写 if(len((@cs1+"").split("\\|"))=1,QC_XLL1138.XZQHDM like "<#=@cs1#>%",QC_XLL1138.XZQHDM in   (@cs1.value.split("\\|")))


注意:补充场景
          存在维下拉或者枚举下拉默认值写ardb函数sql取值的情况,此时报表首次计算时,会将默认值的数组识别成字符串,导致sql拼接错误,建议默认值使用ardb时,采用此固定写法 <#=ardb("select distinct  XZQHDM from QC_XL where XZQHDM like '%11010%' ").join("|")#>,使用“|”符号分隔,枚举下拉和维下拉多选的时候,是支持识别带|符号的字符串的,会自动转成数组。

效果如下
                                
                                                    










最近看过此主题的会员

DJY

esen_4PZ0WJGUKU

Yuuuu

0个回答

只看楼主

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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