0

好的,让我们来解决我遇到的问题,看看是否有人可以帮助我。我正在 SSRS 2012 (VS 2010) 中创建一个矩阵报告。我选择折叠列组并将列的默认“可见性”设置为“隐藏”,并且可以通过文本框进行切换。现在我有了包含状态的行和包含值字段的数据字段。现在 SSRS 的默认设置是在“列组”折叠时汇总数据字段。

第 1 部分问题:

太好了,但是我想说:“总计”而不是显示空白。当我将表达式应用于该字段时

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

然后它仅将其应用于我展开的列,而不是总计的父组标题。任何想法如何解决这个问题?

第 2 部分问题:

如果您的数据集的一部分没有您在集合中指定的列,SSRS 的默认设置是显示空白单元格和空白标题。您可以通过单击“列分组”属性轻松解决此问题。单击可见性并将“报告最初运行时:”更改为如下表达式:

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

现在我已经摆脱了我的空白标题和单元格,但现在我在折叠时的主要分组现在已经消失了。

我想要的只是我的数据:

折叠

地点|总数

铝|2

AZ|1

或|

西澳|7

扩大

地点|A|B

铝| |2

AZ|1 |

或| |

西澳|5 |2

分组的默认设置是这样的:

地点|(空白)

铝|2

AZ|1

或|

西澳|7

扩大

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

铝| | |2

AZ| |1|

或| | |

西澳| |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
4

1 回答 1

0

好的,所以基本上我搜索了互联网,发现 SSRS 想要它不能等同于存在的东西。EG:具有空值的标题是问题所在,因为 SSRS 假定您不希望有值的空值,因此当您计算总计时,它希望显示未知数。不过,您可以在后端欺骗它,但这需要一些工作。

基本上用最简单的术语来说,您希望收集数据并将空值标识为零,以便可以识别它们。因此,我做了一个网格布局,将空值显示为 CTE 中的零,然后我采用该 CTE 并将其取消旋转以恢复我最初拥有的内容。然而,关键的区别是现在 null 的值被表示为零。你可能会说:“但是你的网格上会出现零,我为什么要这样呢?” 好吧,您也可以在 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。忽略第一组,但在 SSRS 报告中使用第二组(从 @Temp order by Place 中删除 select *)作为您的数据集

_3。设置矩阵报表,其中 Place 为行,Code 为列,Value 为数据

_4。如果现在没有任何内容,则设置一个表达式以隐藏列,方法是右键单击“列组”(应该是代码显示示例)>单击组属性>单击可见性>单击第一部分下的功能选项卡:(您也可以切换如果你想要,就像我在另一个文本单元格上所做的那样)

=IIF(IsNothing(字段!Code.Value),假,真)

_5。单击“代码”列,然后单击其上方的灰色条。单击右侧的插入列,然后用“总计”填充标题,用“[Sum(Value)]”填充单元格,为您提供总计。如果汇总到位,我一生都无法得到一个表达式来显示总计标题不同。此方法仅显示折叠或未折叠的总数。

_6。现在,如果您预览可能会显示零,我们不希望在所有情况下都这样,所以让我们稍微操作一下文本值。右键单击“代码”下的“值”,然后选择“文本框属性”。单击左侧窗格中的“数字”。选中“将零显示为:”复选框并选择“”(无)。现在你的零已经消失了。

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

=IIF(字段!Code.Value = “A”,“小麦”,IIF(字段!Code.Value = “B”,“LightBlue”,“White”))

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

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

0.00;(0.00);''

如果您想要钱,请改为:

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

我希望这对某人有所帮助,如果您说:“这对于小型数据集来说非常有用,但我有一百万或更多行我想做类似的事情。” 好吧,我会将我的 cte 替换为临时表或永久表,然后将您的数据转储到内存或永久表中以首先对其进行按摩。

于 2012-12-14T17:34:07.960 回答