日期:2014-05-18  浏览次数:20546 次

reporting service 2008 开发技巧之MDX中父子维度的实现
问题:MDX中父子维度在RPT里面如何实现。

解决方法:父子维度是一种非常特殊的维度,在其维度中,只通过一张表就可以体现一定的层次结构,并且这种层次结构的层次是无限的,可以任意增加。正是由于父子维度这种特殊的结构,使它具有了很多特性,来实现很多特殊的功能。

  在Reporting Services中,由于是将多维数据集转换为平面数据集,再在报表上进行应用,这样,父子维度的层次结构在Reporting Services中就无法体现出来了,最后的展示效果就变成所有的成员都在一层上了。
  为了在Reporting Services中体现出父子维度的层次结构,我们需要进行一些特殊的设置:
1、 定义好数据源,数据类型选择“Microsoft SQL Server Analysis Services”。
2、 定义好数据集。
在查询设计器中输入以下查询语句:
“with member [measures].[职员名称] as '[职员].[职员].currentmember.name'
member [measures].[parentid] as '[职员].[职员].currentmember.parent.name'
SELECT NON EMPTY {[measures].[职员名称],[measures].[parentid],[Measures].[发票数量], [Measures].[发票金额] } ON COLUMNS, NON EMPTY { (DESCENDANTS([职员].[职员].[级别02].ALLMEMBERS) ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME, PARENT_UNIQUE_NAME, LEVEL_NUMBER ON ROWS FROM [销售出库分析] CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS”
注意:在数据集中不可少的两列,一列为维度成员的唯一名称(如上查询中的“职员名称”),一列为维度成员的唯一父级名称(如上查询中的“parented”).

3、 插入并配置好表。
  1)、通过向导插入表,将“发票数量”和“发票金额”放入数据值栏下,“职员名称”放入行组栏下,其他默认。
  2)、打开行组“职员名称”的“组属性”界面,在“可见性”选项卡上,设置报表最初运行时为“隐藏”,钩选“可以通过此报表项切换显示”,将值设为表中“职员名称”对应的文本框名称。

在“高级”选项卡上,指定“递规父级”值为“parentid”字段。

3)、打开表中“职员名称”数据区域对应的文本框属性,在“对齐”选项卡上,单击左对齐右边的表达式按钮“ fx”,输入“=level()*30 & "pt"”,作用是使职员名称按层次结构缩进。

4、 运行报表查看结果。 

运行报表后发现发票数量和发票金额为空数据行,如果你不想看见这样数据都为空的数据,可以在定义数据集MDX查询中使用“NON EMPTY”过滤掉,但是你会发现在这里还是存在都为0的数据,原因是上述MDX中增加了两个member成员,他们和度量值发票数量和发票金额同展现在COLUMNS轴上,查询中“NON EMPTY”表示为过滤掉两member和发票数量、金额都为空的数据,接下来我们可以在上诉数据集的“数据集属性”界面的“筛选器”选项卡上添加两筛选器,表达式为“=iif(isnothing(Fields!发票数量.Value),"0","1")”,运算符为“=”值为“1”。表达式为“=iif(isnothing(Fields!发票金额.Value),"0","1")”,运算符为“=”值为“1”,其作用是过滤掉“发票数量”,“发票金额”都为空的数据。





------解决方案--------------------
貌似是技术分享!
------解决方案--------------------
技术分享?
------解决方案--------------------
那我看看.先顶.
------解决方案--------------------
最好贴完。