2012-09-05 73 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。