-
玳玳我 小试身手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("|")#>,使用“|”符号分隔,枚举下拉和维下拉多选的时候,是支持识别带|符号的字符串的,会自动转成数组。
效果如下:
由于维表的规则是只用存储叶子节点数据,父节点数据会自动根据维表的层级结构进行合计显示,但实际场景中,可能存在父节点和叶子节点都有数据的情况,这时希望仅仅取到维表每个节点本身的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("|")#>,使用“|”符号分隔,枚举下拉和维下拉多选的时候,是支持识别带|符号的字符串的,会自动转成数组。
效果如下: