我有一个基于数据集的表格,其中包含时间表数据,每天可能有多个条目(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
学家Doe | 2015年4月6日| 2
学家Doe | 2015年4月6日| 9
学家Doe | 2015年4月7日| 8
学家Doe | 2015年4月8日| 7
学家Doe | 2015年4月9日| 10
学家Doe | 2015年4月10日| 9
报告表布局:
| 4月6日| 4月7日| 4月8日| 4月9日| 4月10日|总计
总计| 11 | 8 | 7 | 10 | 9 | 45
Reg | 8 | 8 | 7 | 8 | 8 | 39
OT | 3 | 0 | 0 | 2 | 1 | 6
问题:
第1行列总计效果很好,可以提供45小时;
第2行Column Total要么给出#Error,41,要么给出一些其他错误的数字 - 只需要它来计算行中每个单元格的实际值;
第3行的相同问题
提前感谢您的时间!
答案 0 :(得分:1)
发布另一个答案,因为前一个答案已经变得很长。
我提到了这个MSDN link,并使用了选定的答案。显然我们需要使用自定义代码来实现这一目标(如果您不愿意更改数据集并在其中包含计算值)。
右键点击报告 - >报告属性 - >转到“代码”标签 - >粘贴此
Dim public nettotal为Double 公共函数Getvalue(ByVal小计AS Double)AS Double nettotal = nettotal + subtotal 返回小计 结束功能 公共函数Totalvalue() 返回nettotal 结束职能
在第二行的行组表达式中放置
= code.Getvalue(IIF(Sum(Fields!Efforts.Value)> 8.0,8.0,Sum(Fields!Efforts.Value)))
在Total cell表达式中(第二行)put
= code.Totalvalue()
保存并运行,您应该看到以下结果。
答案 1 :(得分:0)
我使用了您的输入数据并尝试以给定格式创建报告。我对第2行总计
使用了以下功能=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)
这表示第二行的总和为39。您可以尝试让我知道它是否适合您。如果它没有,我将列出我创建矩阵和组的确切步骤。
注意:不要忘记将数据集名称放在函数Sum的第二个参数中。并且递归,如名称清楚,递归地为该组应用Sum。
更新:我按照以下步骤操作。
1.在报告上添加Matrix。
2.在Matrix上的列组部分下,从数据集中选择任何列名称。 (否则它不会在下一步显示任何列)
2.右键单击Column - >添加组 - > (在列组下)添加父组。选择Day as Group By - >好。它将创建一个新行。将表达式Sum(Efforts)
放在第一行。你的表达式=IIF(Sum(Fields!Efforts.Value)>8.0,8.0,Sum(Fields!Efforts.Value))
在第二行。
右键单击组窗格中的列组部分 - >选择添加总计 - >后。它将在Matrix的末尾添加新列。将表达式Sum(Efforts)
放在第一行,将表达式=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)
放在第二行。
保存并运行您应该在报告中看到以下内容。
请记住将列和数据集的名称更改为您的代码。 这是关于如何进行此类分组的想法,显然您需要对标题和第3行等进行更改。
HTH。