2012-09-05 65 views
0

我想写一个变量(不是参数)的表达式,以便我可以使用/引用它在另一个文本框中进行计算。我有多个数据集,我需要为这些数据集中的每一个设置SUM(SUM(Fields!amount.Value))。然后,我将在另一个文本框中使用这些数字,并将它们相加。我需要一些语法帮助。我能够自己使用SUM,没有问题。例如,这工作得很好:SSRS变量表达式 - 总和,总和,范围?

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

,但我得到试图将其修改时一个错误以下(这是我真正需要的):

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

我得到一个错误说

”报表'body'的变量表达式使用不带范围的聚合 表达式。除非报表cono在数据区域外使用的所有聚合 都需要作用域只保留一个数据集。“

我有一个预感,说我的语法/ parantheses的位置有问题。有什么建议么?

回答

1

能否请您提供一个详细的例子,可能有样品数据和预期的解决方案?

因为我不明白你为什么要SUM(SUM())。内部的SUM()会导致一个整数值,为什么你想在一个单一的值上做另一个SUM。即使它有效,它也会是同样的价值。我很抱歉,如果我错误地理解了这个问题,我不能发表评论,所以我正在回答,但我想清楚地知道你在找什么。我可以理解你是否试图做SUM(SUM(),SUM(),SUM()...)。如在,总和。

对不起,回答只是查询更多信息,但我看不到评论选项。


UPDATE:

确定现在我认为你有类似

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

所以SUM(Fields!a.Value)会给你w,并SUM(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) 

这将使在计算领域的每一个条目在各个领域的每个条目的总和。 所以计算字段的总和会给你你的答案。

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

+0

谢谢s1lntz。数据集从表中提取“数量”。金额(Tablix的数据)属于不同的账户(Tablix的行)以及区域位置(Tablix的列)。这些数量的总和将小的位置聚集在一起,第二个总和在tablix的底部垂直提供总数。我用于单元格的表达式是SUM(Fields!Amount.Value),但底部水平合计行的表达式是SUM(SUM(Fields!Amount.Value))。由于某种原因,我无法创建一个变量再现此效应 – dp3

+0

检查更新后的答案,看看你是否需要...... – s1lntz

1

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

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

我预计这也将失败 - 在一些新的&不同的方式 - 但该错误将让你更接近的解决方案。

+0

感谢您的建议,不幸的是SSRS不合作。返回的错误说:“报表'主体的变量表达式'在外部聚合中有一个内部聚合,它指定了数据集范围。指定数据集范围的聚合不能包含其他聚合。”很有趣,因为所有这些变量都在试图复制显示在另一个文本框中的数据,请问是否真的太多了? – dp3

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 

你必须确保你输入正确。如果你使用上面的爆炸语法(!),你会得到intellisense。