s-s-rS:如何计算仅包含组中最后一项的总和

Posted

技术标签:

【中文标题】s-s-rS:如何计算仅包含组中最后一项的总和【英文标题】:s-s-rS: How to make a sum that only includes the last item in a group 【发布时间】:2010-10-24 04:40:10 【问题描述】:

我有一个 rdlc 报告文件,我正在尝试计算只能包含每个组中最后一项的总和。我有一张这样的桌子:

Place                 = ?                              (Group header 1)
    User              = ?                              (Group header 2)
        Date          =Last(Fields!Number.Value)       (Group header 3)
            Number    =Fields!Number.Value             (Detail row)

所以,换句话说,在User 那里,我想要Date 的总和...如果这有意义...

Numberrows 每个Date 包含许多数字。但是Date 只显示当天的最后一个数字,因为其余的不算数(但必须显示) 在User 我想总结该用户所有日期的最后一个数字。与Place 相同(这将是每个用户每天最后一个数字的总和)。

谁能帮我解决这个问题?我尝试了明显的(至少对我而言)=Sum(Last(Fields!Number.Value)),但是(也尝试在这些函数中指定组,但没有产生任何影响,因为)当我尝试编译时出现错误:

文本框“numberTextbox”的值表达式在另一个聚合函数(或 RunningValue)的参数中包含聚合函数(或 RunningValue 或 RowNumber 函数)。聚合函数不能嵌套在其他聚合函数中。

我想这有点道理......但是我该怎么做呢?


更新:我已通过添加另一列并将最后的数字复制到该列中解决了这个问题。这样我可以显示所有的数字,并对只包含那些将在总和中的列进行求和。我仍然很好奇是否有人可以解决我原来的问题......所以如果你有,请发布答案!

【问题讨论】:

如何将最后的数字复制到该列中?我也有一个行组。那能解决问题吗?谢谢 【参考方案1】:

不确定我是否完全理解您要执行的操作。可能类似于 =Last(Fields!Number.Value,"Group 1") + Last(Fields!Number.Value,"Group 2") + Last(Fields!Number.Value,"Group 3"),而不是使用总和功能?

【讨论】:

问题是我有一个包含一堆数字的数据集。这些数字都显示在详细信息行中。这些数字按日期分组,然后按用户分组,然后按位置分组。我们需要为每个用户和每个位置的总和。每个位置当然需要它下面的每个用户的总和。每个位置都需要每个日期的总和。但每个日期只会显示该日期的最后一个数字(即使可能有很多)。所以用户 sum 不能将组中的所有数字相加。只有每个日期的最后一个。这有意义吗? 好的...那么如何使用您的示例,=Last(Fields!Number.Value) 在“lastTextBox”中。然后 =Sum(ReportItems!lastTextBox.Value)。我离你需要的更近了吗? 好吧,理论上是的,但实际上我得到了同样的错误=/“文本框'sumTextbox'的值表达式在报表项上使用聚合函数。聚合函数只能用于页眉和页脚中包含的报表项。”和“文本框‘sumTextbox’的值表达式具有对聚合函数无效的范围参数。范围参数必须设置为字符串常量,该常量等于包含组的名称、包含数据区域,或数据集的名称。”【参考方案2】:

最简单的方法是修改您的数据集以仅包含您在日期字段中显示的记录,这样您就可以只使用简单的 sum() 而不是尝试做一些奇怪和棘手的事情,并且可能不工作。

【讨论】:

是的,很明显,但是其他的就不会显示了,他们必须是 =) 事情是数字在一天中变化,报告必须显示它们是如何变化的。但总的来说,只有最后一个数字必须考虑在内。 我可以看看你的问题吗?我对如何解决这个问题有一个模糊的想法,但我需要一些东西来可视化它 不能在这里粘贴整个 linq 查询内容。但结果行有点像这样: Place User Date Number1 Number2 Number3 Number4 TimeA TimeB TimeSpanAB。每行都必须显示 TimeA 和 TimeB,数字也必须显示。但只有每个日期的最后一个数字必须考虑到总和。 你可以把它作为实际问题的一部分,那么你就没有大小限制了。【参考方案3】:

修改数据集可能确实是最简单的解决方案,但如果您真的想在不使查询复杂化的情况下这样做,您可以尝试“自定义聚合”。

具体的技术取决于 s-s-rS 的版本,我的理解是在 s-s-rS 2008 之前它并没有那么好用。

这个想法是,您编写一些自定义代码来维护一个包含每个日期的最后一个值的数组。一个函数更新日期的“最后一个值”,另一个函数对数组中的值求和。您的标头调用后一个函数;您合谋导致在处理标题之前为每个详细信息行调用一次前一个函数。

Here's a blog 的文章解释了 s-s-rS 2008 中的技术。

它还提供了一些关于如何尝试在 SRSS 2005 中进行这项工作的见解,但显然这并不可靠。

【讨论】:

以上是关于s-s-rS:如何计算仅包含组中最后一项的总和的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ArrayList 包含添加到列表中的最后一项的 N 个副本?

Javascript 仅设置数组中最后一项的属性

如何计算 Postgresql 中特定日期最后 7 行的累积总和?

MySQL获取组中每x分钟的列的平均值和总和

Flutter Using ListView.Builder:如何在我选择的所有项目上仅更改一项的背景颜色

如何在 Meteor 中使用 #each 块实现最后一项的条件?