您可以在 Report Builder 3 中轮流显示子报告吗?
Can you rotate through visible sub reports in report builder 3?
我有一个主报告和几个子报告。本质上,我想轮流显示每个子报告约 30 秒,然后隐藏第一个,然后显示下一个,并在所有时间到了后再次重新启动。
谢谢
我 'think' 你可以这样做,但有一些注意事项。
您将需要设置一个数据库 table 来存储当前循环位置,如果您有多个这样的报告,您可以在报告名称上键入它。
(注意这些名称是针对主报表的,与子报表无关)
ReportName LoopPosition LoopMax
MyMainReportA 0 3
AnotherReport 7 10
将一个数据集(我们称它为 dsLoop
)添加到您的主报告中,以更新此值并 returns 用类似的东西更新它。 (未测试)
DECLARE @LoopPosition int
SELECT @LoopPosition = CASE LoopPosition WHEN LoopMax THEN 1 ELSE LoopPosition + 1 END
FROM myReportLoopTable
WHERE ReportName = 'MyMainReportA'
UPDATE myReportLoopTable Set LoopPosition = @LoopPosition WHERE ReportName = 'MyMainReportA'
SELECT @LoopPosition as LPos
此代码只是将 LoopPosition 加 1,或者在我们达到最大值时将其重置为 1。然后returns这个值。
现在将参数 pLoopPos
添加到您的主报告(这可以是隐藏参数)并将其默认值设置为我们新的 dsLoop
数据集。
现在将每个子报表的隐藏 属性 更改为仅在 Parameters!pLoopPos.Value = x 时显示子报表,其中 x 是子报表的顺序。
现在,当报告 运行s 时,它将更新循环位置并获取新值。第一个子报告将显示为 pLoopPos 为 1 。当您的报告刷新时(通过 AutoRfresh 属性),dsLoop
数据集将被重新评估,这将 运行 代码更新值。 pLoopPos值会增加,显示下一个子报表。
您可能必须强制参数始终刷新(从参数属性)。
请注意这是未经尝试和测试的。这只是我的想法,所以我建议在花太多时间尝试实现它之前先做一个简单的测试报告。
更新:2018-04-10 根据您的后续问题,使用该参数似乎无法正常工作,因为它不会刷新。但是,您可以直接使用 dsLoop
returns 的值。要进行更改,只需换出
Parameters!pLoopPos.Value
与 =First(Fields!LPos.Value, "dsLoop")
注意:我稍微修改了 dsLoop 查询,为最终结果命名 (LPos
)。
您现在应该可以删除不再使用的参数。
我有一个主报告和几个子报告。本质上,我想轮流显示每个子报告约 30 秒,然后隐藏第一个,然后显示下一个,并在所有时间到了后再次重新启动。
谢谢
我 'think' 你可以这样做,但有一些注意事项。
您将需要设置一个数据库 table 来存储当前循环位置,如果您有多个这样的报告,您可以在报告名称上键入它。
(注意这些名称是针对主报表的,与子报表无关)
ReportName LoopPosition LoopMax
MyMainReportA 0 3
AnotherReport 7 10
将一个数据集(我们称它为 dsLoop
)添加到您的主报告中,以更新此值并 returns 用类似的东西更新它。 (未测试)
DECLARE @LoopPosition int
SELECT @LoopPosition = CASE LoopPosition WHEN LoopMax THEN 1 ELSE LoopPosition + 1 END
FROM myReportLoopTable
WHERE ReportName = 'MyMainReportA'
UPDATE myReportLoopTable Set LoopPosition = @LoopPosition WHERE ReportName = 'MyMainReportA'
SELECT @LoopPosition as LPos
此代码只是将 LoopPosition 加 1,或者在我们达到最大值时将其重置为 1。然后returns这个值。
现在将参数 pLoopPos
添加到您的主报告(这可以是隐藏参数)并将其默认值设置为我们新的 dsLoop
数据集。
现在将每个子报表的隐藏 属性 更改为仅在 Parameters!pLoopPos.Value = x 时显示子报表,其中 x 是子报表的顺序。
现在,当报告 运行s 时,它将更新循环位置并获取新值。第一个子报告将显示为 pLoopPos 为 1 。当您的报告刷新时(通过 AutoRfresh 属性),dsLoop
数据集将被重新评估,这将 运行 代码更新值。 pLoopPos值会增加,显示下一个子报表。
您可能必须强制参数始终刷新(从参数属性)。
请注意这是未经尝试和测试的。这只是我的想法,所以我建议在花太多时间尝试实现它之前先做一个简单的测试报告。
更新:2018-04-10 根据您的后续问题,使用该参数似乎无法正常工作,因为它不会刷新。但是,您可以直接使用 dsLoop
returns 的值。要进行更改,只需换出
Parameters!pLoopPos.Value
与 =First(Fields!LPos.Value, "dsLoop")
注意:我稍微修改了 dsLoop 查询,为最终结果命名 (LPos
)。
您现在应该可以删除不再使用的参数。