在 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 中创建一个子组,将其他组的特定行的值相加?