开篇说明
看了 BIWORK 老师的 微软BI 之SSRS 系列 - 分组聚合中处理不规则层次结构 (没有子元素的时候不展开, 删除+符号) 这篇文章,知道了不规则层次结构里没有子元素时竟然还可以让+符号不显示,但是整篇看下了,感觉内容好多,最后归纳了两点:
- 单独添加一列用于显示“+”“-”号来切换详细行;
- 在“+”号所在的文本框的可见性属性中判断子集是否有内容,如果没有那么就隐藏自身这个文本框,也就是隐藏了这个“+”号,目的达到。
写这篇博客的目的是为了在这里重新实现一边。
实现步骤
数据准备
使用的Demo数据库是 AdventureWorks2008R2, 为了展示不规则层次带来的问题,把Dataset中的SQL给故意写成这样
SELECT Countryregionname,
CASE
WHEN Countryregionname = 'France' THEN ''
ELSE Stateprovincename
END AS Stateprovincename,
CASE
WHEN Countryregionname = 'France' THEN ''
WHEN City = 'Nevada' THEN ''
WHEN City = 'Duluth' THEN ''
ELSE City
END AS City,
Salesquota,
Salesytd,
Saleslastyear
FROM Sales.Vsalesperson
WHERE Countryregionname IN ('United States', 'United Kingdom', 'France')
创建报表
利用SSDT创建一个新的报表,使用报表创建向导,添加DataSource, DataSet,报表类型选择表格,然后如下图:
组为:Countryregionname,Stateprovincename,City;
详细信息为:Salesquota,Salesytd,SalesLastYear
下一步,向导完成之后如图:
然后更改一下,让组类别在一列显示,然后填充相应数据
关键点一
下边就是关键点了
首先往最左边单独添加一列,为什么要单独添加一列呢,因为这一列要用来切换显示详细信息,如果是直接在类别列中的文本框切换的话,到时候需要隐藏没有子集的+符号的时候会把本身的数据也会隐藏掉,所以单独加这么一列用来切换,显示+符号(PS:好像有点绕口)
详细行可根据上一级最左边的文本框来切换显示,默认显示
同样的道理(可以往最左边再添加一列) Stateprovincename 行可根据上一级最左边的文本框来切换显示,默认显示,设置一样
预览一下
关键点二
在显示+符号的文本框的可见性上判断是否有子集,来决定是否显示自己本身(IIF(Fields!City.Value="",true,false))
预览一下
+ - 符号是不显示了,但是没有子集默认是显示的,重新设置一下,在行的可见性上设置基于表达式显示或者隐藏
IIF(Fields!City.Value="",true,false)
IIF(Fields!Stateprovincename.Value="",true,false)
还有调整一下颜色
最后在预览一下
OK 一切正常!