我有一份包含多个子报告的主报告,每个报告的查询略有不同,并且显示数据的方式也不同。
所以,在我的情况下,我有一个文本框,需要使用不同的标准从几个不同的报告中编译数据。 E.G。
MainReportTextbox =(Sum(columnA, "Main Dataset"))-(SubReportTextBox))
OR
MainReportTextbox =(Sum(columnA, "Main Dataset"))-(subReportVariable))
我看到了一些建议的解决方案,例如this。其中使用=[Reports]!MainReport!SubReport!Textbox
方案。问题是[Reports]
不是公认的标识符。
我确实考虑废弃子报告,只是让所有内容都在同一个主报告上运行,但我们失去了能够单独使用报告的功能,而不会在两个地方维护相同的内容。
所以我想我的问题是,你能从子报告中提取变量或元素(特别是表格中的文本框)吗?
如果答案是否定的,请向我展示一些有关MSDN原因或MSDN或有效来源的信息,并提供一些有效的反建议。
答案 0 :(得分:9)
问题和评论中的链接有时会引用非SSRS报告:SSRS中未使用语法[subreport].[Report]![MyFieldName]
或[Reports]![YourReportName]![YourSubReportName]![TheValueFromTheSubReportYouWantToReference]
。然而,它被用于设计MS Access报告,正如ojeffrey在您链接的讨论中指出的那样。
没有通用的方法来访问子报表中的数据。 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提供:
您需要将子报表项替换为数据区域 像列表,表格或矩阵,以便能够得到适当的参考 正在寻找。
[跳到另一篇文章] ......
现在,似乎你想要计算 主报表与子报表之间的差异。还有,因为他们 拥有不同的数据源,所以你不能使用nest table / matrix / list,对吧?如果是这样,我能想到的一个解决方法是 将参数传递给子报表并计算总计/小计 分报告。我的意思是,创建几个隐藏/内部参数,传递 从主报告到子报告的值通过参数然后 计算那里的总数/小计。
Jeroen对链接问题的回答指向我要去的方向:使用“共享数据集”并在数据集执行缓慢时启用缓存。然后,可以将相同的数据集执行用于父节点和子节点。这可以更改参数的使用:它们通常会从SQL查询移动到报表中数据集的过滤器。
但是使用SSRS 2008R2中引入的Lookup
function,您可以非常灵活地处理数据集之间的报表级别连接。
我如何设计这个的细节很大程度上取决于需要多少其他数据来回传递,以及报告的查询可以如何巧妙地编织在一起。
答案 1 :(得分:0)
在主报表中创建变量并在子报表中更新它,以便您可以将值返回到主报表
例如: 在主报告中创建名称为{@Total}的流程在其中流动的公式
WhilePrintingRecords;
shared Numbervar myTotal := 0;
注意:放置;没有印刷价值;将打印值打印在上面的示例中,如果要打印公式值,则不打印;从第二行前
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}放在您要在报告中显示此值的主报告中,但请记住,您应该在子报告后放置此公式。
注意:要为变量使用赋值:=运算符