2012-12-13 71 views
0

好吧,让我们来看看我有的问题,看看有人能帮助我。我正在SSRS 2012(VS 2010)中创建矩阵报告。我选择折叠列组,并将列的默认“可见性”设置为“隐藏”,并可以通过文本框进行切换。现在我有包含状态的行和包含值字段的数据字段。现在SSRS的默认值是在“列组”被折叠时总结数据字段。在SSRS的矩阵报告中显示总列显示为列标题但不显示空白总数

第1个部分问题:

这是伟大的,但我想它说:“总计”,而不是显示一个空白。当我申请一个表达式到外地去是这样的

=IIF(Fields!Code.Value = "", "Totals", Fields!Code.Value) 

它那么它仅适用于列我扩大,而不是总额父组头。任何想法如何解决这个问题?

第2部分的问题:

SSRS的默认是显示空白单元格和空白头文件,如果你的数据集的一部分没有你您的收藏中指定的列。点击'Column Grouping'属性即可轻松解决此问题。点击可视性和改变“当报告最初运行:”来表达,如:

=IIF(IsNothing(Fields!Code.Value), false, true) 

现在我已经摆脱了我的空白标题和细胞,但倒塌的时候,现在我的主要组现在已经没有了。

我要的是这个与我的数据:

COLLAPSED

广场|共(S)

AL | 2

AZ | 1

OR |

WA | 7

EXPANDED

地点| A | B

AL | | 2

AZ | 1 |

或| |

WA | 5 | 2

GROUPING的默认是迄今为止这样的:

地点|(BLANK)

AL | 2

AZ | 1

OR |

WA | 7

EXPANDED

地点|(空白栏)| A | B

AL | | | 2

AZ | | 1 |

或| | |

WA | | 5 | 2

您可以装载了SSRS与任何数据源选择,只是填充表变量对于这个例子在这个例子中一个简单的测试数据样本:

declare @Temp table (Place char(2), Code char(1), Value int) 

insert into @Temp values ('AZ', 'A', 1), ('AL', 'B', 2), ('WA', 'A', 5),('WA','B',2),('OR', null, null) 

select * 
from @Temp 

回答

0

好了,所以基本上我搜罗互联网,我发现SSRS想要的东西不能等同于在那里。 EG:具有空值的标题是问题出在哪里,SSRS假定您不希望具有值的空值,因此当您执行总计时,它会显示未知值。尽管你可以在后端欺骗它,但它需要一些工作。

基本上,用最简单的术语来说,你想要把你的数据收集和零识别为零,以便他们可以被识别。因此,我做了一个网格布局计算,然后将CTE中的空值显示为零,然后采用该CTE并将其从本质上恢复到原来的水平。然而,关键的区别是现在零值的值被表示为零。你可能会说:“但是你在网格上得到零,我为什么要这么做?”那么你可以在SSRS中执行一些格式化原则来欺骗它。

让我们通过我上面的例子,并改变一些东西来显示整个过程是如何工作的,我会增添色彩背景表达格式化过,因为这是事有人想为好。

_1。让我们拿我们的代码,并在我们的数据集之前和之后显示。

SQL代码

declare @Temp table (Place char(2), Code char(1), Value int) 

insert into @Temp values ('AZ', 'A', 1), ('AL', 'B', 2), ('WA', 'A', 5),('WA','B',2),('OR', null, null) 

select * 
from @Temp 
order by Place 
; 

with a as 
    (
    Select 
     Place 
    , sum(Case when Code = 'A' then Value else 0 end) as A 
    , sum(Case when Code = 'B' then Value else 0 end) as B 
    from @Temp 
    group by Place 
    ) 
select 
    Place 
, Code 
, Value 
from a 
unpivot(Value for Code in (A, B)) as unpvt1 
order by Place 

_2。忽略第一套,但(被Place删除SELECT * FROM @temp顺序)使用第二个在SSRS报告数据集

_3。建立与到位的行,代码为列,其值是数据

_4矩阵报表。通过右键单击'Columns Groups'(应该是代码显示示例)>单击组属性>单击Visibility>单击第一部分下的Function选项卡,即可设置一个表达式来隐藏这些列:(您也可以切换这一点,如果你想和我做了另一个文本单元)

= IIF(IsNothing(领域!Code.Value),假,真)

_5。点击“代码”栏,然后点击它上方的灰色栏。点击右侧的插入列,然后用'总计'和单元格'[总和(值)]'填充标题给你一个总数。如果总结起来,我不能为了我的生活得到一个表达式来显示总计标题不同。这种方法只显示总数或者折叠或不折叠。

1-6。现在,如果预览可能显示的零,并且我们不希望在所有情况下都这样,那么让我们稍微操纵文本值。右键单击“代码”下的“值”并选择“文本框属性”。点击左侧窗格中的“数字”。选中'Show zero as'复选框并选择''(无)。现在你的零点消失了。

_7。现在我有很多我最初想要的东西,但想要根据标题显示的内容动态地对单元格进行颜色编码。获取代码标题下的单元格值的属性并选择“背景颜色”>点击下拉菜单并选择表达式。把这个表达式:

= IIF(字段Code.Value = “A”, “麦田”, IIF(场Code.Value = “B”, “LightBlue”, “白”)!)

我现在可以得到一些东西,出于某种原因,大多数人在互联网上听起来几乎是不可能的。我可以将我的列设置为一致的颜色,因为定位现在绑定为一个零值,但现在隐藏给最终用户。

但你可能会说:“太好了,但我想钱值不是简单的整数”。我也可以这样做。点击“代码”下的“值”单元格的属性,然后查看“格式”属性。它应该默认为这样:

0.00(0.00);'

如果你想要钱做这个:

$ ###,## 0; 0.00 ''

我希望这可以帮助别人,也会记住,如果你在说:“这对于小数据集很好,但我有一百万或更多的行,我想要做类似的事情。”那么我会替换临时表或永久表的cte,并将您的数据转储到内存或永久表中,以便首先对其进行按摩。