簡體   English   中英

基於單元格值的表總計列-SQL Report Builder 3.0

[英]Table Total Column based on cell values - SQL Report Builder 3.0

我有一個基於數據表構建的表,該數據表包含時間表數據,對於給定的人,每天可能有多個條目( day_date )。 該表在day_date分組。 小時的字段為effort_hr (請參見下面的數據集和報告布局)。

該表每天(如預期的那樣)生成一行一行的單行。

對於每一天,我只需要一個值(一個人的總小時數),因此表達式為Sum(Fields!effort_hr.Value)這正確地將每天的所有小時數相加。

現在,我在該行的末尾添加一個總計列,以查看整個時間表的所有小時數。 總列單元格中的表達式為Sum(Fields!effort_hr.Value) ,與每日的完全相同。 同樣,這將增加時間表的所有時間。

所以這很好。


現在,我需要一個新行,每天最多只能顯示8個小時。 因此,如果此人工作較少,則顯示較少,但如果此人工作較多,則顯示最大值為8。

在這種情況下,每日列表達式為:

 IIF(Sum(Fields!effort_hr.Value)>8.0,8.0,Sum(Fields!effort_hr.Value)) 

再次,它完美地顯示了每一天。

這行總數就是我遇到麻煩的地方。 我已經嘗試了很多方法,但是無法獲得此行中各列的總數。 該報告在單元格中始終顯示#Error。 該報告可以節省費用,並且expr中沒有錯誤。

問題似乎來自給定一天有2個值的事實。 換句話說,在5天內,該人有6個條目。 當我為只有5個條目的人嘗試時,沒有問題。

我努力了:

Sum(IIF(Sum(Fields!effort_hr.Value)>8.0,8.0,Sum(Fields!effort_hr.Value)))

RunningValue(IIF(Sum(Fields!effort_hr.Value)>8.0,8.0,Sum(Fields!effort_hr.Value)),Sum,Nothing)

我或者收到一個#Error,或者我得到了錯誤的總數。 有什么方法可以獲取表格中單元格值的總和? 每日數字是正確的,只需在末尾給我總數即可(例如Excel)。

我可以在SQL中執行此操作,但這會弄亂該報告的其他部分。

數據集:

res_name | day_date | effort_hr

J. Doe | 2015年4月6日| 2

J. Doe | 2015年4月6日| 9

J. Doe | 2015年4月7日| 8

J. Doe | 2015年4月8日| 7

J. Doe | 2015年4月9日| 10

J. Doe | 2015年4月10日| 9

報告表布局:

| 4月6日| 4月7日| 4月8日| 4月9日| 4月10日| 匯總

合計 11 | 8 | 7 | 10 | 9 | 45

注冊| 8 | 8 | 7 | 8 | 8 | 39

OT | 3 | 0 | 0 | 2 | 1 | 6

問題:

第1欄總計效果很好,可以持續45小時;

第2行的Total列要么給出#Error,41或其他錯誤的數字-只需要將其累加到該行中每個單元格的實際值即可;

第3行共有相同的問題

在此先感謝您的時間!

發布與前一個答案相同的答案已經很長了。

我引用了此MSDN鏈接 ,並使用了選定的答案。 顯然,我們需要使用自定義代碼來實現此目的(如果您不願意更改數據集並在其中擁有計算所得的值)。

  1. 右鍵單擊報告->報告屬性->轉到標簽“代碼”->粘貼此

    Dim public nettotal作為Double公共函數Getvalue(ByVal小計AS Double)AS Double nettotal = nettotal +小計返回小計End函數公共函數Totalvalue()返回nettotal結束函數

  2. 在第二行的行組表達式中

    = code.Getvalue(IIF(Sum(Fields!Efforts.Value)> 8.0,8.0,Sum(Fields!Efforts.Value)))

  3. 在總單元格表達式(第二行)中

    = code.Totalvalue()

  4. 保存並運行,您將看到以下結果。

結果

我使用了您的輸入數據,並嘗試以給定的格式創建報告。 我對第2行總計使用了以下功能

=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)

第二行的總和為39。 您可以嘗試讓我知道是否適合您。 如果沒有,我將列出創建矩陣和組的確切步驟。

注意:不要忘記將數據集名稱放在函數Sum的第二個參數中。 顧名思義,“遞歸”將遞歸求和應用於該組。

更新:我遵循以下步驟。 1.在報表上添加一個矩陣。 2.在矩陣的“列組”部分下,從數據集中選擇任何列名稱。 (否則,下一步將不會顯示任何列。)2.右鍵單擊Column-> Add Group->(在column group下)Add Parent Group。 選擇天作為分組依據->確定。 它將創建一個新行。 將表達式Sum(Efforts)放在第一行。 第二行中的表達式=IIF(Sum(Fields!Efforts.Value)>8.0,8.0,Sum(Fields!Efforts.Value)) 在此處輸入圖片說明

  1. 右鍵單擊組窗格中的列組部分->選擇添加總計->之后。 它將在Matrix的末尾添加新列。 將表達式Sum(Efforts)放在第一行,將表達式=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)放在第二行。 在此處輸入圖片說明

  2. 保存並運行,您應該在報告中看到以下內容。 在此處輸入圖片說明

切記將列和數據集的名稱更改為與代碼相同的值。 這是關於如何進行分組的想法,顯然,您需要更改標題和第三行等。

HTH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM