-
xxxl 数据领袖Lv6
发表于2020-11-10 17:22
楼主
本帖最后由 xxxl 于 2021-3-2 16:50 编辑
一、简介
在各种表达式中都需要获取维节点对象进行计算,比如在维下拉组件的节点过滤需要获取维节点对象来做相应的处理:维下拉节点过滤只显示维级次第零级的数据,就可以写item.level=0。
二、维节点对象属性
注意:对于通用维,上述的字段名和属性名,对于非叶子节点,取到的值是错误的。因为在通用维度中,非叶子节点是没有单独的数据行。好的解决方式应该是返回一个集合的,目前不支持。
三、维节点对象方法
四、应用举例
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
一、简介
在各种表达式中都需要获取维节点对象进行计算,比如在维下拉组件的节点过滤需要获取维节点对象来做相应的处理:维下拉节点过滤只显示维级次第零级的数据,就可以写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) | Rec为false时,判断本节点是否是itemid的直接子节点。 Rec为true时,判断本节点是否是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