表总计基于单元格值的列 - SQL Report Builder 3.0

时间:2015-04-07 18:00:23

标签: sql reportbuilder

我有一个基于数据集的表格,其中包含时间表数据,每天可能有多个条目(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行的相同问题

提前感谢您的时间!

2 个答案:

答案 0 :(得分:1)

发布另一个答案,因为前一个答案已经变得很长。

我提到了这个MSDN link,并使用了选定的答案。显然我们需要使用自定义代码来实现这一目标(如果您不愿意更改数据集并在其中包含计算值)。

  1. 右键点击报告 - >报告属性 - >转到“代码”标签 - >粘贴此

    Dim public nettotal为Double     公共函数Getvalue(ByVal小计AS Double)AS Double                 nettotal = nettotal + subtotal                 返回小计     结束功能     公共函数Totalvalue()                 返回nettotal 结束职能

  2. 在第二行的行组表达式中放置

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

  3. 在Total cell表达式中(第二行)put

    = code.Totalvalue()

  4. 保存并运行,您应该看到以下结果。

  5. The Result

答案 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))在第二行。 enter image description here

  1. 右键单击组窗格中的列组部分 - >选择添加总计 - >后。它将在Matrix的末尾添加新列。将表达式Sum(Efforts)放在第一行,将表达式=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)放在第二行。 enter image description here

  2. 保存并运行您应该在报告中看到以下内容。 enter image description here

  3. 请记住将列和数据集的名称更改为您的代码。 这是关于如何进行此类分组的想法,显然您需要对标题和第3行等进行更改。

    HTH。