如何将范围分配给ssrs 2012中的报表变量

时间:2014-07-01 00:07:07

标签: reporting-services ssrs-2012

我是SSRS(2012)的新手,来自使用BusinessObjects的loooong背景,因此有时我很难知道如何搜索正确的术语。

我有一个这样的报告,其中的部分在tablix上,而Grand Total在另一个中。 这种布局是必需的(或者这会更简单!)

Section 1
                Date 1  Date 2  Date 3  % of Grand Total
Product1        value   value   Value   Value3/GT3 (12%)
Product2        value   value   Value   Value3/GT3 (14%)
Section Total   Total1  Total   Total3  Value3/GT3 (7%)

Section 2
                Date 1  Date 2  Date 3
Product1        value   value   Value   Value3/GT3 (30%)
Product2        value   value   Value   Value3/GT3 (22%)
Section Total   Total1  Total 2 Total3  Value3/GT3 (22%)

Grand Total     GT1     GT2     GT3     GT3/GT3 (100%)

我很难计算总计的百分比,因为分子和分母不在同一范围内。 我想可能是一个Report Variable,但我无法弄清楚如何从BusinessObjects创建这种公式的等价物 -

=Sum(Value) where (Date = "Date 3")

我想为报告变量分配上下文或范围,但我不知道该怎么做,或者它是否会起作用。

我知道我可以通过在引号中包含数据集名称来创建整个报表的范围,但是如何限制其中的一部分?

谢谢, 点头。

2 个答案:

答案 0 :(得分:2)

SSRS中的聚合函数将范围作为第二个参数。该scope参数是一个字符串,它是" name"无论你的范围是什么。如果希望范围是表组,则可以使用表组的名称。如果您希望范围是整个数据集,那么您将使用数据集的名称。您始终可以在属性窗口中看到元素的名称(按F4键)。

根据您完成过滤的方式,您可以使用不同的范围。使用数据集名称将是最直接的,但是假设数据集已经过滤到SQL中的正确记录。否则,您可能希望使用Tablix作为范围。 (类似于" Tablix1和#34;而不是" DataSetName"在下面的示例中。)

一旦您知道您正在使用哪个范围,您就可以在聚合中使用条件来仅查看正确的记录。例如。要在SSRS中重写Business Objects表达式:

=SUM(IIF(Date = "Date 3",Value,0), "DataSetName")

此表达式有效,因为如果日期字段不等于"日期3"它将返回零并且不向SUM添加任何内容。只有Date = "Date 3" Value函数中包含SUM()行的行。

关于SSRS范围和聚合函数的一些好资源:

答案 1 :(得分:1)

麦克风是一个很好的解释;我想为记录添加一个特殊提示:当您将其编码到报表变量时,请注意所有字段类型;当我使用时,我的SSRS 2012会抛出一个通用的“无法生成报告”(*):

=Sum(IIf(Fields!ROWTYPE.Value = 9, Fields!TAXES.Value, 0), "DataSet1")

这是一个我失去了永恒的愚蠢细节:TAXES字段是十进制,0是...整数!用CDec(0)!代替后者 侨

(*)真正的错误仅在ssrs系统日志中。像(自由翻译对不起):"The expression for the variable myVAR uses an aggregation function on different data type"