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

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

我有一个 table 建立的数据集,其中包含时间表数据,每天可能有多个条目 (day_date) 给定的人。 table 在 day_date 上分组。小时字段是 effort_hr(请参阅下面的数据集和报告布局)。

table 每天生成一行一列(如预期)。

对于每一天,我只需要一个值(人的总小时数),所以表达式是 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。报告保存的很好,表达式也没有错误。

问题似乎出在给定日期有 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,要么得到错误的总数。 有什么方法可以只得到table中单元格值的总和吗?每天的数字是正确的,给我最后的总数(如 Excel)。

我可以在 SQL 中执行此操作,但这会弄乱此报告的其他部分。

数据集:

res_name day_date effort_hr

J。母鹿 | 2015 年 4 月 6 日2

J。母鹿 | 2015 年 4 月 6 日9

J。母鹿 | 2015 年 4 月 7 日8

J。母鹿 | 2015 年 4 月 8 日7

J。母鹿 | 2015 年 4 月 9 日10

J。母鹿 | 2015 年 4 月 10 日9

报告TABLE布局:

| 4 月 6 日4 月 7 日4 月 8 日 | 4 月 9 日4 月 10 日总数

总计 | 11 | 8 | 7 | 10 | 9 | 45

注册 | 8 | 8 | 7 | 8 | 8 | 39

加时赛 | 3 | 0 | 0 | 2 | 1 | 6

问题:

第 1 列总计效果很好,耗时 45 小时;

Row 2 Column Total 给出#Error、41 或其他错误数字 - 只需要它来计算行中每个单元格的实际值;

第 3 行共有相同问题

提前感谢您的宝贵时间!

我使用了您的输入数据并尝试以给定的格式创建报告。我对第 2 行 Total

使用了以下函数
=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)

这显示第二行的总和为 39。您可以尝试让我知道它是否适合您。如果没有,我将列出创建矩阵和组的具体步骤。

注意:不要忘记将数据集名称放在函数 Sum 的第二个参数中。而 Recursive,顾名思义,递归地为组应用 Sum。

更新:我遵循了以下步骤。 1. 在报表上添加矩阵。 2. 在矩阵的列组部分下,Select 数据集中的任何列名称。 (否则下一步不会显示任何列) 2. 右键单击​​列 --> 添加组 --> (在列组下)添加 Parent 组。 Select 日期作为分组依据 --> 确定。它将创建一个新行。将表达式 Sum(Efforts) 放在第一行。你的表达式 =IIF(Sum(Fields!Efforts.Value)>8.0,8.0,Sum(Fields!Efforts.Value)) 在第二行。

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

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

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

HTH.

发布另一个答案,因为上一个答案变得太长了。

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

  1. 右键单击报表 --> 报表属性 --> 转到选项卡 'Code' --> 粘贴这个

    Dim public nettotal 为 Double Public 函数 Getvalue (ByVal 小计 AS Double) AS Double 净合计 = 净合计 + 小计 return 小计 结束功能 Public 函数 Totalvalue() return 净总计 结束函数

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

    = code.Getvalue(IIF(总和(字段!Efforts.Value)>8.0,8.0,总和(字段!Efforts.Value)))

  3. 在总计单元格表达式(第二行)中输入

    =code.Totalvalue()

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