在reporting services中当我们想隐藏一列数据的时候,往往会发现虽然数据隐藏掉,但一张报表却被一分为而。如下图所示:

 

这时,好像无论我们再怎么调,隐藏掉的列仍是显示空白。要想解决这个问题,我们得先得搞清楚几个概念:单元格,列,分组。貌似这几个概念很好理解,列就是一列数据,包含多个单元格。单元格就是表格中显示数据的一个单位而已,分组基本就是用来汇总数据。单元格隐藏应用的主要场景是在一列中如果下面几个值和上面相同就将单元格显示为空。所以单元格隐藏后位置仍然还是存在的,要不然表格的格式看上去就不美观。列和行的隐藏主要用于不同的人打开报表时显示不同的数据,比较某个指标只有某几个国家有,则其它国家就不需要显示这几个指标。所以列和行隐藏后位置同时也要隐藏掉。分组主要是用来汇总数据,分组的隐藏主要是应用在汇总级别上。所以隐藏后结果不需要发生变化,只要将位置和父级合并即可。因此,当遇到列隐藏后出现上图的问题,那我们就要看下是不是隐藏的方式错了。误将单元格或者分组隐藏。

对于单元格,列,分组的隐藏方法是不同的。单元格的隐藏可以直接选中单元格,在属性的visibility中设置hidden属性为true或者你希望的表达式。我们隐藏列后出现空白的大部分原因是我们用错为这个属性。列的隐藏我们只能选中列然后右击选择column visibility,在其中设置隐藏选项。只有通过这种方式设置的隐藏才是真正的隐藏。分组的隐藏在分组窗格中通过分组属性来隐藏。

那么现在回到开始的图上,tablix行组只能通过组的方式隐藏,tablix正文部分可以通过列隐藏的方式进行隐藏,其中的每个单元格可以通过单元格的方式将数据隐藏掉。那么为什么列的分组可以通过列隐藏的方式隐藏掉呢。很简单,列分组的方式是纵向的,所以行分组也可以通过行隐藏的方式隐藏掉,但如果行分组中的列要用列隐藏的方式隐藏,那么reporting services就不知道要如何对报表进行处理了。

以上原理大家都了解了以后,我们就可以完全fix掉这个错误。首先,判断我们是否是用了单元格隐藏的方式。选中隐藏列,看属性窗格中的visibility->hidden是否为true如果为true则先将其设为false。

 

然后,右击要隐藏的列,看其column visibility是否可选,如果不可选则说明其在分组中。再查看分组中的数据,如果在分组中只是用做明细数据而不做为分组的条件的话,则将其转换为静态列。这样column visibility就可用了,直接设置就可以将此列隐藏掉。

如何转换为静态列,如开始的图片中,选中左边的tablix列组,右击->insert column->outside group-left. 如此直接用新添加的列展示数据即可。