我正在使用 SSRS 2008。我的报告详细信息上方有 3 个不同的组,它们是计算总和。如果子组中的任何发票金额 (A) 高于限制 (B),我会尝试将限制着色为红色。
我目前正在使用这个表达式,但它只查看第一张或最后一张发票金额。限制报告项目位于发票组上方的父组中。
=IIF(ReportItems!Invoice_DueDate.Value>ReportItems!Limit.Value,"Red","Black")
我的解决方案:我决定使用 SQL 来获取按到期日分组的发票金额总和。然后我在父组中调用该字段。
如果我正确理解你的问题,那么我认为你可以使用
=IIF(MAX(ReportItems!Invoice_DueDate.Value) > ReportItems!Limit.Value,"Red","Black")
您需要某种聚合函数,例如
MAX()
来告诉SSRS什么范围以及应该做什么操作。 (例如,如果您想确保总数不超过限制,您可以使用 SUM(...)
您可以使用指定父组范围的聚合表达式从子组引用父组。
例如,假设我们有一些简单的数据:
还有一个基于此的简单表格,以及基于
grp
的组。
这里详细信息行中value
文本框的
BackgroundColor属性设置为:
=IIf(Fields!value.Value > Min(Fields!limit.Value, "Group1")
, "Red"
, Nothing)
这会检查当前行的父组中的所有行,而不仅仅是当前行。这按预期工作:
在不了解您的数据的情况下,无法判断这是否适用于您的情况,但希望它能给您一些值得考虑的东西。
评论后编辑
好的,根据进一步的评论,您似乎需要聚合聚合功能。
这仅在 2008R2 及更高版本中通过 SSRS 表达式可用,因此这对您的情况没有帮助。
对于旧版本,最好的选择可能是向数据集中添加一个额外的字段,为每个组提供最大
Invoice
值,然后您可以在父组中使用该值而不会出现问题。
有一些解决方法建议使用自定义代码来执行此操作,例如这篇文章,但我从未使用过这个建议的解决方案,并且只有在您对报告数据集没有任何控制权时才会考虑它。