在 s-s-rS 中,如何将父报表项的值与子组中的报表项进行比较?

Posted

技术标签:

【中文标题】在 s-s-rS 中,如何将父报表项的值与子组中的报表项进行比较?【英文标题】:In s-s-rS, how do I compare a value of a parent report item with report items in a child group? 【发布时间】:2013-09-04 21:37:16 【问题描述】:

我正在使用 s-s-rS 2008。我的报告详细信息上方有 3 个不同的组,它们是计算的总和。如果子组中的任何发票金额 (A) 高于限制 (B),我会尝试将限制涂成红色。

我目前正在使用这个表达式,但它只查看第一张或最后一张发票金额。限额报告项目位于发票组上方的父组中。

=IIF(ReportItems!Invoice_DueDate.Value>ReportItems!Limit.Value,"Red","Black")

我的解决方案:我决定使用 SQL 来获取按到期日分组的发票金额总和。然后我在父组中调用了该字段。

【问题讨论】:

我决定使用 SQL 来获取按到期日分组的发票金额总和。然后我在父组中调用了该字段。 【参考方案1】:

如果我正确理解你的问题,那么我认为你可以使用

=IIF(MAX(ReportItems!Invoice_DueDate.Value) > ReportItems!Limit.Value,"Red","Black")

你需要某种聚合函数,比如MAX()来告诉s-s-rS应该做什么范围和操作。 (例如,如果您想确保总数不超过限制,您可以使用SUM(...)

【讨论】:

我尝试了此解决方案,但收到错误消息。表达式:=IIF(MAX(ReportItems!Invoice_DueDate.Value)>ReportItems!Limit.Value,"Red","Black") 错误:[rsAggregateReportItemInBody] textrun 'Limit.Paragraphs[0].TextRuns 的颜色表达式[0]' 对报告项使用聚合函数。聚合函数只能用于页眉和页脚中包含的报表项。【参考方案2】:

您可以使用指定父组范围的聚合表达式从子组引用父组。

例如,假设我们有一些简单的数据:

还有一个基于此的简单表格,以及基于grp 的组。

这里,详细信息行中value 文本框的BackgroundColor 属性设置为:

=IIf(Fields!value.Value > Min(Fields!limit.Value, "Group1")
  , "Red"
  , Nothing)

这会检查当前行的父组中的所有行,而不仅仅是当前行。这按预期工作:

在不了解您的数据的情况下,无法说这是否适用于您的情况,但希望它能给您一些考虑。

在 cmets 之后编辑

好的,根据进一步的 cmets,您似乎需要对聚合功能进行聚合。

这仅可通过 2008R2 及更高版本中的 s-s-rS 表达式获得,因此这对您的情况没有帮助。

对于旧版本,您最好的选择可能是向您的数据集添加一个额外的字段,为每个组提供最大的 Invoice 值,然后您可以在父组中使用此值而不会出现问题。

有一些解决方法建议使用自定义代码来执行此操作,例如this post,但我从未使用过这个建议的解决方案,并且只有在您无法控制报告数据集时才会考虑它.

【讨论】:

数据为十进制格式(1200000.00),但报表项的格式为美元金额。这是我尝试过的表达式: =IIF(MAX(ReportItems!Invoice_DueDate.Value, "table1_DueDate")>ReportItems!Limit.Value,"Red","Black") 我尝试了此解决方案,但出现以下错误:[rsAggregateReportItemInBody ] textrun 'Limit.Paragraphs[0].TextRuns[0]' 的颜色表达式对报告项使用聚合函数。聚合函数只能用于页眉和页脚中包含的报表项。 在我的屏幕截图中,组的设置与您的完全不同。谢谢你的帮助,伊恩。 在我的示例中,我使用的是Fields!... 引用,而不是ReportItems!...,这就是为什么您可以使用它作为属性表达式的原因。如果您提供一些示例数据来证明您的要求,我可以提供更多详细信息。 我想获取子组的最大值以在父组中使用。您的解决方案是获取父组聚合以在子组中使用。我正在使用 =IIF(MAX(Fields!Invoice.Value,"table1_DueDate")>SUM(Fields!Limit.Value),"Red","Black") ,但我似乎无法获得聚合函数来查看我的子组。 table1_DueDate 是子组或 (A)。我收到以下错误:范围参数必须设置为字符串常量,该常量等于包含组的名称、包含数据区域的名称或数据集的名称。 好的,我添加了更多细节。

以上是关于在 s-s-rS 中,如何将父报表项的值与子组中的报表项进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 s-s-rS 中创建一个子组,将其他组的特定行的值相加?

获取不同子组中的值计数

如何将父项的第一个子项中的属性移动到 XSLT 中的父项?

如何将地图中的值与阈值进行比较并将大于最小阈值的值放入集合中

如何识别 s-s-rS 中的报表项

摆脱报告中的分页符