SSRS变量表达式 - 求和,求和,范围?

时间:2012-09-05 22:38:54

标签: tsql ssrs-2008 ssrs-expression

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

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

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

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

我收到错误说

  

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

我预感到我的语法/ parantheses位置存在问题。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

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

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

我希望这也会失败 - 在一些新的&不同的方式 - 但是这个错误会让你更接近解决方案。

答案 1 :(得分: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)

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

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

答案 2 :(得分: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 

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