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))
在第二行。
右键单击组窗格中的列组部分 --> Select 添加总计 --> 之后。它将在 Matrix 的末尾添加新列。将表达式 Sum(Efforts)
放在第一行,将表达式 =Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)
放在第二行。
保存并 运行 您应该会在报告中看到以下内容。
请记住按照您的代码更改列和数据集的名称。
这是关于如何进行此类分组的想法,显然您需要对 headers 和第 3 行等进行更改
HTH.
发布另一个答案,因为上一个答案变得太长了。
我参考了这个 MSDN link,并使用了选择的答案。显然我们需要使用自定义代码来实现这一点(如果您不愿意更改数据集并在其中包含计算值)。
右键单击报表 --> 报表属性 --> 转到选项卡 'Code' --> 粘贴这个
Dim public nettotal 为 Double
Public 函数 Getvalue (ByVal 小计 AS Double) AS Double
净合计 = 净合计 + 小计
return 小计
结束功能
Public 函数 Totalvalue()
return 净总计
结束函数
在第二行的行组表达式中放
= code.Getvalue(IIF(总和(字段!Efforts.Value)>8.0,8.0,总和(字段!Efforts.Value)))
在总计单元格表达式(第二行)中输入
=code.Totalvalue()
保存并运行,您应该会看到以下结果。
我有一个 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))
在第二行。
右键单击组窗格中的列组部分 --> Select 添加总计 --> 之后。它将在 Matrix 的末尾添加新列。将表达式
Sum(Efforts)
放在第一行,将表达式=Sum(IIF(Fields!Efforts.Value>8.0,8.0,Fields!Efforts.Value),"DataSet1",Recursive)
放在第二行。保存并 运行 您应该会在报告中看到以下内容。
请记住按照您的代码更改列和数据集的名称。 这是关于如何进行此类分组的想法,显然您需要对 headers 和第 3 行等进行更改
HTH.
发布另一个答案,因为上一个答案变得太长了。
我参考了这个 MSDN link,并使用了选择的答案。显然我们需要使用自定义代码来实现这一点(如果您不愿意更改数据集并在其中包含计算值)。
右键单击报表 --> 报表属性 --> 转到选项卡 'Code' --> 粘贴这个
Dim public nettotal 为 Double Public 函数 Getvalue (ByVal 小计 AS Double) AS Double 净合计 = 净合计 + 小计 return 小计 结束功能 Public 函数 Totalvalue() return 净总计 结束函数
在第二行的行组表达式中放
= code.Getvalue(IIF(总和(字段!Efforts.Value)>8.0,8.0,总和(字段!Efforts.Value)))
在总计单元格表达式(第二行)中输入
=code.Totalvalue()
保存并运行,您应该会看到以下结果。