0

我正在尝试为变量(不是参数)编写表达式,以便我可以使用/引用它在另一个文本框中进行计算。我有多个数据集,我需要SUM(SUM(Fields!amount.Value))每个数据集。然后我将在另一个文本框中使用这些数字,将它们相互添加。我需要一些语法帮助。我可以自己使用 SUM,没有问题。例如,这很好用:

=SUM(Fields!Amount.Value, "DataSet1")

但是在尝试将其修改为以下内容时出现错误(这是我真正需要的):

=SUM(SUM(Fields!amt.Value, "Acctrange_90300_90399_InterestExpenses"))

我收到一条错误消息

“报表‘正文’的变量表达式使用没有范围的聚合表达式。除非报表只包含一个数据集,否则在数据区域之外使用的所有聚合都需要范围。”

我有一种预感,我的语法/括号放置有问题。有什么建议么?

4

3 回答 3

1

您能否提供一个详细的示例,其中可能包含示例数据和预期的解决方案?

因为我不明白你为什么要 SUM(SUM())。内部 SUM() 会产生一个整数值,为什么你想只对一个值做另一个 SUM。即使它有效,它也只是相同的值。如果我错误地理解了这个问题,我深表歉意,我无法发表评论,所以我正在回答,但我想清楚地知道你在寻找什么。如果您尝试进行 SUM(SUM()、SUM()、SUM()...),我可以理解。如,总和。

再次抱歉只是为了询问更多信息而回答,但我看不到评论选项。


更新:

好的,现在我想你有类似的东西

      | a  | b  | c  | d  |
---------------------------
1     | *  | *  | *  | *  |
---------------------------
2     | *  | *  | *  | *  |
---------------------------
3     | *  | *  | *  | *  |
---------------------------
total | w  | x  | y  | z  |

所以SUM(Fields!a.Value)会给你wSUM(Fields!b.Value)也会给你x,等等。你想要w+x+y+z吗?如果是这样,那么你可以这样做:

将计算字段添加到您的数据集以计算行总计,例如

{ (a1+b1+c1+d1),(a2+b2+....), .... },

然后从您的变量中调用

SUM(Fields!CalculatedField.Value).

对于上面的例子,你可以给计算字段一个表达式:

= CInt(Fields!a.Value)+CInt(Fields!b.Value)+CInt(Fields!c.Value)+CInt(Fields!d.Value)

这将使计算字段中的每个条目成为所有字段中每个条目的总和。所以计算字段的总和会给你答案。

希望这就是你想要的。否则,我试着理解这个问题。:)

于 2012-09-06T15:25:38.167 回答
1

外部SUM也需要一个范围。尝试这个:

=SUM(SUM(Fields!amt.Value,"Acctrange_90300_90399_InterestExpenses"),"Acctrange_90300_90399_InterestExpenses")

我预计这也会失败——以一些新的和不同的方式——但这个错误会让你更接近解决方案。

于 2012-09-06T02:33:02.650 回答
0

当 SSRS 想像这样让我头疼的时候,我作弊。我将内部计算放在一个隐藏的文本框中,或者如果我想显示它,则命名显示它的框,然后按名称引用它。因此,如果我在名为 txtFirstColumnSum 的文本框中有第一列的总和,而在名为 txtSecondColumnSum 的文本框中有第二列的总和,我会使用:

=cdec(ReportItems!txtFirstColumnSum.Value)+ cdec(ReportItems!txtSecondColumnSum.Value)...

另一种方法是使用内置范围,但编写自定义代码来处理字段之间的数学运算。例如,如果我想要当前 YTD 销售额与上一年同期相比的百分比,并且还想要检查除以零,我可以在表达式中执行此操作,但我在多个级别上使用它,所以我改为自定义代码:

Public Function DeltaPercent(ByVal currentAmount as decimal,ByVal pastAmount as Decimal) as Decimal
    Dim difference as decimal
    Dim result as decimal
    if pastAmount<>0 then
        difference=currentAmount-pastAmount
        result=difference/pastamount
    else
        result=0
    end if
return result

End Function

然后为了获得百分比变化,我称之为:

=Code.DeltaPercent(Sum(Fields!SalesYTD.Value, "SalesTerritory"),Sum(Fields!SalesPY1TD.Value, "SalesTerritory"))

我希望我早点知道一个提示:如果您使用语法

ReportItems("txtFirstColumnSum").Value 

你必须确保你输入正确。如果您使用上面的 bang 语法 (!),您将获得智能感知。

于 2017-02-27T19:01:43.447 回答