15

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

所以,在我的情况下,我有一个文本框,需要从几个不同的报告中编译数据,这些报告具有不同的标准。例如

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

或者

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

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

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

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

如果答案是否定的,请从 MSDN 或有效来源向我展示一些关于它为什么不是或如何不是的信息,并给出一些有效的反击建议。

4

2 回答 2

10

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

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

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

引用权威来源: 此讨论总结如下:

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

但这有点老了,微软员工和 MS BI MVP 也提供了最近关于变通方法的讨论:

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

[跳到另一个帖子]...

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

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

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

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

于 2013-10-16T04:18:35.140 回答
0

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

例如:在主报表中创建公式,名称为 {@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} 放在您想要在报告中显示此值的主报告中,但请记住您应该将此公式放在子报告之后的一件事。

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

于 2014-03-08T11:19:55.783 回答