我正在尝试为变量(非参数)编写表达式,以便我可以使用/引用它在另一个文本框中进行计算。我有多个数据集,每个数据集都需要SUM(SUM(Fields!amount.Value))
。然后我将在另一个文本框中使用这些数字,将它们相互添加。我需要一些语法帮助。我可以自己使用SUM,没有问题。例如,这很好用:
=SUM(Fields!Amount.Value, "DataSet1")
但是在尝试将其修改为以下内容时出现错误(这是我实际需要的):
=SUM(SUM(Fields!amt.Value, "Acctrange_90300_90399_InterestExpenses"))
我收到错误说
“报告'body'的变量表达式使用聚合 表达式没有范围。所有聚合都需要范围 除非报告只包含一个数据集,否则在数据区域之外使用。“
我预感到我的语法/ parantheses位置存在问题。有什么建议吗?
答案 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)
会给你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)
这将使计算字段中的每个条目成为所有字段中每个条目的总和。 所以计算字段的总和会给你答案。
希望这就是你想要的。否则,我试着理解这个问题。 :)
答案 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
你必须确保你输入正确的。如果您使用上面的爆炸语法(!),您将获得智能感知。