之前我写了一篇在 SSRS 开发中处理这种父子关系的汇总与聚合的文章 (SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表),示例中的查询是基于 SQL Server 关系型数据库的,这一篇是基于 MDX 父子维度的 SSRS 报表。

沿用上一篇中的 (SSAS系列 - 关于父子维度的设计)父子维度 和(SSAS 系列 - 自定义的日期维度设计) 的时间维度,并在此基础上创建 Cube 并部署。

当然在这个例子中可能不会使用到时间维度,之所以添加进来只是因为在 Cube 的创建过程中 SSDT 开发工具会提示:不要创建只含有一个维度的多维数据集。

部署完成之后,我们可以通过 MDX 查看一下相应的维度和度量值数据。

SELECT ([Measures].[Sales Amount]) ON COLUMNS,
NON EMPTY([Employee].[Employees].Members) ON ROWS
FROM [BIWORK_ParentChildDemo]

但是像这样显然不够,因为我们不仅仅需要知道我们应该查询的不光是当前成员,而且应该展现当前成员的后代子成员。

并且通过 Dimension 属性来定义要获取到这些成员的 MEMBER_CAPTION (在父子维度设计的那篇文章已经提到了), 成员的唯一名称 MEMBER_UNIQUE_NAME,父成员的唯一名称 PARENT_UNIQUE_NAME, 层次结构中的级别 LEVEL_NUMBER。

SELECT NON EMPTY { [Measures].[Sales Amount]} ON COLUMNS,
NON EMPTY {
(
DESCENDANTS(
[Employee].[Employees].ALLMEMBERS
)
)
}
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME, PARENT_UNIQUE_NAME,
LEVEL_NUMBER ON ROWS
FROM [BIWORK_ParentChildDemo]

每一个成员的后代子成员都会被查询出来,这里只展现部分数据。

如何创建报表和连接 SSAS 分析服务数据库,以及如何创建基于 SSAS MDX 查询的 Dataset 在这里就不再说了,可以参考我的这篇文章

设计好报表并拖放好一个 Table 组件,指定好 Employees 和 Sales Amount 列。

选中 Employees 这一行,右键编辑 Group 属性。

在这里注意分组的属性并不是 Employees 而是它的维度属性 Employees.UniqueName 。

递归父类也是使用的维度属性 Employees.ParentUniqueName 。

可以根据名字或者 Sales Amount 排序,这里选择的是 Employees 。

设置显示和隐藏是根据点击 Employees 决定的。

设置 Employees 名称的 Textbox 属性,根据级别高低来决定左边距的缩进距离。

=Cstr(Level() * 20) & "pt"

为了显示不同的级别的背景,也可以手动的设置行背景,粗略的设置了一下颜色,实际开发中可以精心设置。

=Switch(LEVEL()=0,"LightSlateGray",LEVEL()=1,"LightSteelBlue",LEVEL()=2,"LightBlue",LEVEL()=3,"LightCyan",LEVEL()=4,"Azure",LEVEL()=5,"White")

保存并预览报表的效果,虽然是基于 Cube 的 MDX 查询,但是实现起来也比较容易。

可以对比一下之前通过数据仓库直接查询的父子递归实现的 SSRS 报表,数据上都是正确的。


更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。


微软BI 之SSRS 系列 - 在 Cube 中通过 MDX 查询实现基于父子递归关系的汇总报表的更多相关文章

  1. 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...

  2. SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表 2013-10-09 23:09 by BI Wor ...

  3. 微软BI 之SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表

    基于父子关系的递归结构在公司组织结构里比较常见,基本上都是在一张表里实现的自引用关系.在报表中如果要实现这种效果,并且在这个基础上做一些数据的汇总,可以使用到下面提到的方法. 要实现的效果大致如下 - ...

  4. 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计

    来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现?   SSRS 2008.2 ...

  5. 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化

    今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...

  6. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  7. 微软BI 之SSRS 系列 - 如何在 MDX 查询中获取有效的 MEMBER 成员属性作为参数传递

    这篇小文章的来源是 天善问答,比如在报表中要根据点击某一个成员名称然后作为参数传递给自身报表或者下一张报表,这个在普通的 SQL 查询中没有任何问题.但是在 MDX 中查询是有区别的,比如在 MDX ...

  8. 微软BI 之SSAS 系列 - 实现Cube 以及角色扮演维度,度量值格式化和计算成员的创建

    在熟悉完下面这三种维度的创建方式之后,就可以开始创建我们的第一个 Cube 了. SSAS 系列 - 自定义的日期维度设计 SSAS 系列 - 基于雪花模型的维度设计 SSAS系列 - 关于父子维度的 ...

  9. 微软BI 之SSRS 系列 - 报表邮件订阅中 SMTP 服务器匿名访问与 Windows验证, 以及如何成功订阅报表的实例

    这篇文章源于在上一篇博文中有园友提出订阅 SSRS 报表时的一个问题,  于是就好好总结了一下,把有关 SSRS 报表订阅的要点和容易出现问题的地方写出来,希望对大家有所帮助! 参看上一篇博文 - S ...

随机推荐

  1. 女子监狱第一季/全集Orange Is the New Black迅雷下载

    本季第一季 Orange Is the New Black 1 (2013) 看点:该剧描述主人公Piper Chapman(Taylor Schilling)在大学里结识了毒贩Alex(Laura ...

  2. SQLite中的事务操作

    关于SQLite事务可以解决一些问题,比如你要插入两个数据,可以将两个数据作为同一个事务进行插入,这样如果第二个数据错误了,便自动执行回滚操作,第一个数据也不会插入成功,保证了数据的同步! 一.实际的 ...

  3. Shape 各种属性详解

    本文来自:http://blog.csdn.net/brokge/article/details/9713041 简介: 作用:XML中定义的几何形状 位置:res/drawable/文件的名称.xm ...

  4. Android scrollbar的设置

    insideOverlay:默认值,表示在padding区域内并且覆盖在view上 insideInset:表示在padding区域内并且插入在view后面 outsideOverlay:表示在pad ...

  5. 彻底理解Java的feature模式

    先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...

  6. .AVLFile Extension

    .AVLFile Extension File Type 1ArcView Legend File   Developer ESRI Popularity           4.1 (7 Votes ...

  7. 使用ASP.NET+Jquery DataTables的服务器分页

    (1)先建立表,看看表结构 (2)建立存储过程 DataTables是服务器分页,GetWxUsers存储过程使用了4个参数 (1) @start--表示当前第几页,例如第3页,start是从0开始 ...

  8. ab命令作apache压力测试

    ab命令作apache压力测试 ./ab -c 100 -n 10000 http://127.0.0.1/index.php -c 100 即:每次并发100个 -n 10000 即: 共发送100 ...

  9. Direct I/O,Synchronous I/O的概念

    Direct I/O概念: Direct I/O is a way to avoid entire caching layer in the kernel and send the I/O direc ...

  10. Generate Parentheses leetcode java

    题目: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...