维节点对象

5016
0

xxxl 数据领袖Lv6

发表于2020-11-10 17:22

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

一、简介
    在各种表达式中都需要获取维节点对象进行计算,比如在维下拉组件的节点过滤需要获取维节点对象来做相应的处理:维下拉节点过滤只显示维级次第零级的数据,就可以写item.level=0。

二、维节点对象属性
属性名
描述
示例
itemid
维节点的惟一标识。
用它作参数调用getItem可以查到本维节点。
Getcell(0,0).dimitem.itemid — 第一个表元的维节点的代码
id
代码,即代码字段的值
Getcell(0,0).dimitem.id
caption
文字,即文字字段的值。
Getcell(0,0).dimitem.caption
level
级次,根节点的级次是0
Getcell(0,0).dimitem.level
parent
父节点,类型是DimensionItem对象
Getcell(0,0).dimitem.parent
parents
本节点及父节点组成的数组,数组元素是dimensionitem对象。
注意:数组的第一个元素是根节点对象。
Getcell(0,0).dimitem.parents
children
直接子节点组成的数组,数据元素的类型是DimensionItem对象
Getcell(0,0).dimitem.children
allchildren
所有子节点组成的数组,包括子节点的子节点,数据元素的类型是DimensionItem对象
Getcell(0,0).dimitem.children
isleaf
是否是叶子节点
Getcell(0,0).dimitem.isleaf
字段名
取字段的值
Getcell(0,0).dimitem.C_G — 取字段C_G的值
属性名
取属性的值。
如果属性有代码字段和文字字段,则返回代码字段的值。
注意:如果属性名是中文,它的值得用getProperty方法获取。
Getcell(0,0).dimitem.D_Q — 取地区D_Q的值
注意:对于通用维,上述的字段名和属性名,对于非叶子节点,取到的值是错误的。因为在通用维度中,非叶子节点是没有单独的数据行。好的解决方式应该是返回一个集合的,目前不支持。


三、维节点对象方法
方法名
描述
示例
getField(String fieldName)
获得指定的属性的值,item.getField("N_BS_CBFY") 返回 110
Getcell(0,0).dimitem.getField("C_G") — 取字段C_G的值
getProperty(pptName, isId)
获取指定属性的代码或者文字,默认返回代码。
Getcell(0,0).dimitem. getProperty("中院", true)  — 返回 '11A'
Getcell(0,0).dimitem..getProperty("中院", false)  ------ '一中院'
isChildOf(itemid, rec)
Recfalse时,判断本节点是否是itemid的直接子节点。
Rectrue时,判断本节点是否是itemid的子节点。
Rec可以省略,默认为false
注:这里itemid的意义参考DimensionItem.itemid,它是维节点的惟一key。不过,为简化表达式的编写,itemid也可以是代码(参考DimensionItem.id)。
A1.dimitem.isChildOf (A2)  — 判断A1表元是否是A2的子节点。
isChildOrSelfOf(itemid, rec)
isChildOf类似,不过要增加判断:是否相等。
isParentOf(itemid, rec)
isChildOf函数类似
A1.dimitem.isParentOf (A2)
isParentOrSelfOf(itemid, rec)
isParentOf类似,不过要增加判断:是否相等。


四、应用举例
     1)维下拉中让根节点显示维代码从左数前两位为‘12’的数据:                  
      在维下拉的根节点显示中写left(item.id,2)='12'

    2)维下拉中需要过滤出维名字为湖北省的数据:       
   在维下拉的节点过滤中写item.name="湖北省" 或者item.caption="湖北省"

    3)表格中需要取到维下拉参数组件的选取的参数的父节点的名称:    
    参数组件名称.parent.caption   (这里表格中需要取到的是维节点的名称是字符型,表格需要设置字符型)

   4)维节点对象还可以和数组对象函数结合使用,将通用维维项的各上级节点名称组合一起显示并用'-'分隔:
   参数组件名称.parents.select(1=1,@.caption).join("-")
            


   5)想要设置维下拉选择的数据为维表的某一级,而报表中展现的数据为维下拉选择的下一级:
    在浮动表元上的下钻级次中写<#=参数组件名.level+1#>




   6)想要用维表的其他字段数据过滤报表内的数据,比如主题表绑定的是维表的ID字段,但是要用维下拉组件@CS(绑定维表ID字段)筛选过滤报表中所有CSJC字段等于参数组件中选择的维表CSJC字段:
    在浮动表元上的过滤条件中写dim("维表名","CSJC")=@CS.CSJC
维表结构是这样的
过滤条件

实际效果(因为这里的条件是相等的且维表中CSJC字段和ID字段是一一对应的,所以看不出来和dim(主题表字段)=@参数组件名 公式的区别。实际需求场景可能比这更复杂就能看出效果了)








数组对象的介绍可以看这个帖子https://bbs.esensoft.com/thread-133624-1-1.html。数组对象的应用可以看这个帖子https://bbs.esensoft.com/thread-138767-1-1.html














0个回答

只看楼主

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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