您可以在 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)。

您现在应该可以删除不再使用的参数。