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

问题描述 投票:0回答:2

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

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

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

enter image description here

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

reporting-services ssrs-2008 reportingservices-2005 report-builder2.0
2个回答
0
投票

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

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

您需要某种聚合函数,例如

MAX()
来告诉SSRS什么范围以及应该做什么操作。 (例如,如果您想确保总数不超过限制,您可以使用
SUM(...)


0
投票

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

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

enter image description here

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

grp
的组。

enter image description here

这里详细信息行中value文本框的

BackgroundColor
属性设置为:

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

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

enter image description here

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

评论后编辑

好的,根据进一步的评论,您似乎需要聚合聚合功能。

这仅在 2008R2 及更高版本中通过 SSRS 表达式可用,因此这对您的情况没有帮助。

对于旧版本,最好的选择可能是向数据集中添加一个额外的字段,为每个组提供最大

Invoice
值,然后您可以在父组中使用该值而不会出现问题。

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.