我在SSRS报告中有两个不同的数据集,它们给出了不同数量的输出字段。我在报告中将这两个数据集用于两个不同的表。
1)一个表将根据条件一次显示输出。
实际上,在运行报告时,两个数据集正在执行SP,并且显示输出需要更多时间。
要求: 我需要根据条件执行一个数据集SP。其他数据集SP不应该执行。
实施例: 数据集1执行Sp1 数据集2执行Sp2
Table1使用Sp1 表2使用Sp2
通常在执行报告时,Table1将显示输出(基于默认参数选择)
但SP1和SP2正在同一时间执行。因此报告需要更多时间来显示输出。
我需要根据条件一次执行1个SP。否则其他数据集SP将不会执行。
答案 0 :(得分:2)
<强>步骤1:强> 首先为数据集创建 Dummy SP 。该SP应该具有相同的输入参数和相同的输出字段作为原始SP1但是给出零输出行。对于数据集2的SP2也是如此
<强>步骤2:强> 在数据集属性中选择StoredProcedure Icon,在Fx列中添加以下代码
= IIF(参数!ManagerID.Value = -1,“SP1”,“DummySP”)
注意:创建的DummySP应该与SP1相同 为数据集2做同样的事情。这是有效的。
答案 1 :(得分:0)
你必须控制tablix的可见性取决于收到的参数,另外你可以在两个查询上创建参数来控制执行的位置,以避免执行,如
Where @Condition = 1 AND ( Your WHERE )
答案 2 :(得分:0)
至于那一堆性能,你根本不想运行其他SP
,在这种情况下,根据我的经验,最好的方法是将你的stored procs
修改为根据您决定调用哪些数据集来添加new parameter
(表示要提取的数据)。
因此,如果参数表明不需要特定的SP,请不要使用IF-ELSE
组合在SP中运行代码并返回空白单行。
然后,最重要的是,您可以{tab}来hide
或show
。
希望有道理吗?
如果column count
和data types
相同,您可以随时使用表达式来决定要调用的stored-proc
。
答案 3 :(得分:0)
我见过this answer,很好,但是要创建两个SP,有时很麻烦。有时报表使用一个SP 的很多。这意味着必须复制所有 SP。如果您将报告翻倍……这意味着它们需要终生维护和改进。
相反,我有另一个解决方案:
第 1 步:我创建了一个 SP,并使用已经存在的参数之一。
第 2 步: 在 DS\Report 的参数映射中,您可以编写一个表达式,表示如果我想要要显示这个SP的数据我把发送到报表的参数发送,如果我不想显示这个数据,我会发送不同的参数,这会导致SP不返回数据。
所有这一切当然只有当它是一个具有允许上述参数的过程时。也可以为此创建一个特殊参数。
和表达式:
=IIf(Parameters!Display_xxx.Value=1,Parameters!yyy.Value,0)