【问题标题】:SSRS Pull Variables Or Values From Sub Report Into Main ReportSSRS 将变量或值从子报表拉到主报表中
【发布时间】:2013-10-17 05:56:49
【问题描述】:

我有一个包含多个子报表的主报表,每个子报表都有略微不同的查询和不同的数据显示方式。

因此,在我的情况下,我有一个文本框,需要根据不同的标准从几个不同的报告中编译数据。例如

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(SubReportTextBox))

MainReportTextbox =(Sum(columnA, "Main Dataset"))-(subReportVariable))

我看到了一些建议的解决方案,例如this。它使用=[Reports]!MainReport!SubReport!Textbox 方案。问题是[Reports] 不是一个可识别的标识符。

我确实考虑过废弃子报表,让所有内容都在同一个主报表上运行,但是我们失去了能够单独使用报表的功能,而无需在两个地方维护相同的东西。

所以我想我的问题是,你能从子报告中提取变量或元素(尤其是表格中的文本框)值吗?

如果答案是否定的,请从 MSDN 或有效来源告诉我一些关于为什么不或如何不的信息,并提供一些有效的反击建议。

【问题讨论】:

  • 虽然你没有看到我的答案:stackoverflow.com/questions/13584509/…@Jeroen 有正确的答案,但没有提供来自可靠来源的链接。其中有一些解决方法可能会对您有所帮助。

标签: reporting-services ssrs-2008 report subreport


【解决方案1】:

问题和 cmets 中的链接有时会引用非 SSRS 报告:语法 [subreport].[Report]![MyFieldName][Reports]![YourReportName]![YourSubReportName]![TheValueFromTheSubReportYouWantToReference] 未在 SSRS 中使用。然而,正如 ojeffrey 在您链接到的讨论中指出的那样,它用于设计 MS Access 报告。

没有通用的方法来访问子报表中的数据。 SSRS 模型是处理父报表数据,处理子报表数据,渲染子报表,结果返回父级,然后呈现父级,包括适当的子报表。两者之间传递的唯一数据是参数被传递到子报告中,渲染输出被传递回父级。您将在此处看到从父级传入的数据必须作为报告参数:http://technet.microsoft.com/en-us/library/ms160348(v=sql.100).aspx

子报表需要的所有参数都必须包含在 参数列表。如果缺少必需的参数,则子报表 在主报告中未正确显示。

引用权威来源: This discussion sums it up:

不,不允许在子报表中引用报表项。

但这有点老了,还有这个更新的discussion of work-arounds,由微软员工和 MS BI MVP 提供:

您需要将子报表项替换为数据区域 像列表、表格或矩阵一样能够获得正确的参考 正在寻找。

[跳到另一篇文章]...

现在,您似乎想计算 主报表和子报表的区别。另外,因为他们 有不同的数据源,所以你不能使用嵌套 表/矩阵/列表,对吧?如果是这样,我能想到的一种解决方法是 将参数传递给子报表并计算总计/小计 子报告。我的意思是,创建几个隐藏/内部参数,通过 通过参数从主报告到子报告的值,然后 在那里计算总计/小计。

Jeroen 对链接问题的回答指向了我要走的方向:使用“共享数据集”并在数据集执行缓慢时启用缓存。然后可以将相同的数据集执行用于父报表和子报表。这可以改变参数的使用:它们通常从 SQL 查询移动到报表中数据集的过滤器。

但是通过 SSRS 2008R2 中引入的Lookup function,您可以非常灵活地在数据集之间进行报表级连接。

我如何设计它的细节在很大程度上取决于需要来回传递多少其他数据,以及报告查询可以如何巧妙地结合在一起。

【讨论】:

  • 你给了我最好的建议。部分是因为这是我的想法,部分是因为没有其他人回答。我会给你赏金。感谢您的帮助!
【解决方案2】:

在主报告中创建变量并在子报告中更新它,以便您可以将值返回给主报告

例如: 在主报表中创建公式,名称为 {@Total} 位置在其中流动

WhilePrintingRecords;
shared Numbervar myTotal := 0;

注意:放置;不会打印 value 并且没有 ;如果要打印公式的值,则将不打印上面示例中的值,只需删除即可;从第二行开始

WhilePrintingRecords;
shared Numbervar myTotal := 0

现在将 {@Total} 放在主报告的报告标题中 现在在子报告中创建第二个公式,您希望将小计添加到名称为 {@addTotal} 的主报告公式中,并在其中放置以下行

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal := myTotal + 200; //or any formula or field

将此公式添加到您要为总计添加价值的子报表中

现在在主报告中创建公式以显示名称为 {@showTotal} 的总计并在其中放置以下行

WhilePrintingRecords;
shared Numbervar myTotal;
myTotal

将 {@showTotal} 放在您想要在报告中显示此值的主报告中,但请记住一件事,您应该将此公式放在子报告之后。

注意:为变量赋值使用 := 运算符

【讨论】:

  • 看起来像 Crystal,不过在 SSRS 中有没有办法做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多